Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];

Вниз

Проблема с TBDECallback   Найти похожие ветки 

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

Есть локальная БД 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 никогда не выполняется, в чем тут дело?


 
Sandman25 ©   (2004-07-27 10:21) [1]

Насколько я помню, callback работает только для Paradox


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

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


 
leonidus   (2004-07-27 10:27) [3]

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


 
Sandman25 ©   (2004-07-27 10:27) [4]

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


 
Sandman25 ©   (2004-07-27 10:28) [5]

[3] leonidus   (27.07.04 10:27)

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


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

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


 
Sandman25 ©   (2004-07-27 10:43) [7]

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


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


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

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

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

прав.


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

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


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

[9] leonidus   (27.07.04 10:53)

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


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

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

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


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

> [9] leonidus   (27.07.04 10:53)

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


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


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

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


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

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


 
Sandman25 ©   (2004-07-27 11:33) [15]

[14] leonidus   (27.07.04 11:30)

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


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

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


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


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

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


 
Sandman25 ©   (2004-07-27 11:42) [18]

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

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


 
bushmen ©   (2004-07-27 11:42) [19]

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

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


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

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


 
bushmen ©   (2004-07-27 11:52) [21]

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

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



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.035 c
4-1089283866
andrey__
2004-07-08 14:51
2004.08.22
Как принять сообщение в TServiceApplication посланное другим прил


9-1083671803
alless
2004-05-04 15:56
2004.08.22
Sprite &amp; Button


4-1089286295
bar
2004-07-08 15:31
2004.08.22
В Cи можно а в Delphi?


1-1091687216
Loki3D
2004-08-05 10:26
2004.08.22
создание отчета


3-1091089438
Hermit
2004-07-29 12:23
2004.08.22
Вертикальный текст в QRLabel





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский