Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с TBDECallback [D6, dBase, FoxPro]


Страницы:   1 2

leonidus ©   (2004-07-27 10:16:00) 

Есть локальная БД dBase, хочу с на ней отработать функцию обратного вызова что бы потом перенести опыт на распеределенную БД на двух компах. Итак, делаю вот что:

//эту функцию надо будет вызвать обратным вызовом
function TForm1.TableChangeCallBack(CBInfo: Pointer): CBRType;
begin
 MessageBeep(0);
end;

procedure TForm1.T1AfterOpen(DataSet: TDataSet);
begin
// устанавливаю функцию обратного вызова
 TBDECallback.Create(Self, TTable(DataSet).Handle,
   cbTableChanged, nil, 0, TableChangeCallBack, True);
end;

по таймеру проверяю занята ли таблица и если она свободна разрешую к ней доступ

procedure TForm1.Timer1Timer(Sender: TObject);
var
 SeqNo: Longint;
begin
 if T1.State <> dsInActive then
   DbiGetSeqNo(T1.Handle, SeqNo);
end;

Все как в литературе:
http://www.delphirus.com.ru/delphi-sovetid-129.html
http://www.delphikingdom.ru/asp/viewitem.asp?UrlItem=/helloworld/bdeloc.htm

НО TableChangeCallBack никогда не выполняется, в чем тут дело?


bushmen   (2004-07-27 11:52:00) [1]

> в моем понимании надо отделать сервер от клиентов

Но от этого технология не меняется


leonidus   (2004-07-27 11:49:00) [2]

[18] - ок, я попробую.
[19] - ну в общем случае конечно нет, просто в моем понимании надо отделать сервер от клиентов, может я конечно ошибаюсь


bushmen   (2004-07-27 11:42:00) [3]

> приложение нельзя считать полноценно клиент-серверным

А что, разве под словом "серверная" подразумевается "ВЫДЕЛЕННЫЙ КОМПЬЮТЕР" ?


Sandman25   (2004-07-27 11:42:00) [4]

>без проблем могу перейти и к TQuery, но что это изменит?

Если использовать select * from table1, то ничего.
а вот если добавить where ..., то время загрузки можно сделать 1 сек, причем всегда, практически независимо от размера БД.


Соловьев   (2004-07-27 11:42:00) [5]


> приложение нельзя считать полноценно клиент-серверным
> ведь БД лежит на том же компьютере на котором работает
> один их двух операторов, второй с другого компьютера
> обращается к певому.

Пока не поздно брось ты эту затею - клиент-сервер с Парадоксом(ужас) Перейди ты на ФБ. Там для обратного вызова есть ивенты.


leonidus   (2004-07-27 11:40:00) [6]

без проблем могу перейти и к TQuery, но что это изменит? приложение нельзя считать полноценно клиент-серверным ведь БД лежит на том же компьютере на котором работает один их двух операторов, второй с другого компьютера обращается к певому.


Sandman25   (2004-07-27 11:33:00) [7]

[14] leonidus   (27.07.04 11:30)

Тут дело даже не в обновлении. У Вас используется TTable, открытие таблицы УЖЕ занимает 10 секунд, и будет только расти по мере добавления данных. И вот вместо того, чтобы перейти на TQuery и запросы, Вы озабочены тем, как бы еще больше замедлить работу, вызывая обновление данных тогда, когда пользователь об этом не просил...


leonidus   (2004-07-27 11:30:00) [8]

[13] - тут не совсем так, при добавлении новой записи открывается отдельное модальное окно при этом ничего не обновляется, как только инормация внесена, окно закрывается запись довалсяется в базу.
Другими словами кроме как делать кнопку "Обновить" больше идей ни у кого нет?
Может мне просто сконверсить БД из dBase в парадокс и воспользоваться обратным вызовом? Ни ких проблем с конверчиванием базы не будет (индексов в базе нет)?


Соловьев   (2004-07-27 10:58:00) [9]


> leonidus   (27.07.04 10:53) [9][Ответить]

представь что такое сделали на этом форуме - ты пишешь свой пост о колбеке, а тут бац! я написал кому-то ответ и у тебя переоткрылась страница и ты опять пишешь свой пост, и так несколько раз. Вопрос: через сколько минут ты побежишь убивать создателя движка форума?


bushmen   (2004-07-27 10:56:00) [10]

> [9] leonidus   (27.07.04 10:53)

Тут уже столько раз об этом говорилось - воспользовались бы поиском.


bushmen   (2004-07-27 10:55:00) [11]

> особено есть сеть плохая,

Как раз в этом случае и необходимо обновлять только по "обновить". Иначе, не сможешь работать.


Sandman25   (2004-07-27 10:54:00) [12]

[9] leonidus   (27.07.04 10:53)

Супер! Вместо того, чтобы работать, пользователь будет каждые 30 секунд ждать по 20 секунд, потому что кто-то другой из пользователей добавил запись :)


leonidus   (2004-07-27 10:53:00) [13]

хорошо, пусть будет удобнее, но мне кажется каждый раз кликать "Обновить" это не лучший вариант, особено есть сеть плохая, приходится ждать обновления секунд по 10-20


Соловьев   (2004-07-27 10:46:00) [14]


> Есть локальная БД dBase, хочу с на ней отработать
> функцию обратного вызова что бы потом перенести опыт
> на распеределенную БД на двух компах.

это можно сделать все и без БДЕ - Мидас. Но, имхо,

> Sandman25 ©   (27.07.04 10:28) [5]

прав.


Sandman25   (2004-07-27 10:43:00) [15]

Нужно не изящнее, нужно удобнее и экономичнее.


leonidus   (2004-07-27 10:41:00) [16]

"Обновить" это всегда понятно, может просто есть другие способы - изяшнее?


Sandman25   (2004-07-27 10:28:00) [17]

[3] leonidus   (27.07.04 10:27)

А не надо этого делать. Если пользователь захочет, пускать кнопку "Обновить" давит.


Sandman25   (2004-07-27 10:27:00) [18]

DbiRegisterCallBack + F1,
затем тыкаем на cbTABLECHANGED и находим:
...This callback is supported only by the Paradox driver.


leonidus   (2004-07-27 10:27:00) [19]

В любом случае, как тогда на другой машине узнать что тут в БД были внесены изменения что бы и на другой машине обновить Grid(БД у них одна)?


leonidus   (2004-07-27 10:24:00) [20]

не ну я догадывался... просто думал что это механизм именно движка, т.е. BDE а ему пофигу с какой базой работать dBase или Paradox. Я что не прав?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо