![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с TBDECallback [D6, dBase, FoxPro]
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. Я что не прав?