Форум: "Базы";
Текущий архив: 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