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

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

асинхронное ADO


wicked ©   (2002-01-25 15:39:00) 

возникла проблема - при открытии recordset"а с ExecuteOptions, установленными в eoAsyncExecute (простой select) и последующим открытием (показыванием) формы, которая связана с recordset"ом, вылетает exception "access violation <blah, blah>... read of address FFFFFFFF".... может знает кто, какс этим бороться?....


wicked   (2002-01-25 17:38:00) [1]

хм.... правда, мне приходила в голову мысль про событие OnFetchProgress... а до AfterOpen я не додумался... :)
спасибо...


Delirium   (2002-01-25 17:29:00) [2]

В общем проблема где-то в следующем, твои визуальные компоненты с формы AbFrm обращаются к ещё не созданному RecordSet-y, решение такое - привязать AbFrm.ShowModal к событию AbSet.AfterOpen


wicked   (2002-01-25 17:21:00) [3]

нет конечно.... но тормозит, особенно при больших наборах.....


Delirium   (2002-01-25 17:19:00) [4]

А при выключеном eoAsyncExecute ошибка проявляется?


wicked   (2002-01-25 17:15:00) [5]

всё равно выскакивает exception.... но когда тут же выходить из программы, то выскакивает другой exception - "Invalid operation on object while processing another command"... типа он чего то там уже выбирает, а тут его обрывают.... главное, что в доке по ADO от microsoft о таком - ни гу-гу....


Delirium   (2002-01-25 17:06:00) [6]

Попробуй для начала AbFrm.ShowModal; заменить на AbFrm.Show;


wicked   (2002-01-25 16:55:00) [7]

не-а.... AbSet - это TBetterADODataSet - потомок TADODataSet.... его я использую из-за пары наворотов... а так можно считать, что это TADODataSet....


Delirium   (2002-01-25 16:41:00) [8]

Так, секундочку, у тебя AbSet это TADOCommand, судя по "AbSet.CommandText := q;" ?


Delirium   (2002-01-25 16:37:00) [9]

А как ты объявляешь свой _RecordSet ?


wicked   (2002-01-25 16:18:00) [10]

код большой... но вот отрывки...
кусок, который запускает recordset:

procedure TMainDM.applyab(s: string);
var q: string;
begin
q := format(abqry, [s]);
AbSet.Close;
AbSet.CommandText := q;
AbSet.Open;
end;


а вот кусок, в котором вылетает exception:


procedure TAbSFrm.OKBtnClick(Sender: TObject);
var s: string;
begin
inherited;
s := "";
addand(s, "a.number like ""%" + trim(NumberEd.Text) + "%""", trim(NumberEd.Text));
addand(s, "a.name like ""%" + trim(AbonEd.Text) + "%""", trim(AbonEd.Text));
addand(s, "l.name like ""%" + trim(LocEd.Text) + "%""", trim(LocEd.Text));
addand(s, "t.name like ""%" + trim(TownEd.Text) + "%""", trim(TownEd.Text));
addand(s, "s.name like ""%" + trim(StreetEd.Text) + "%""", trim(StreetEd.Text));
if s <> "" then begin
MainDM.applyab(s);
AbFrm.ShowModal; // вот ЗДЕСЬ оно и вылетает
end;
end;

пояснения: addand - процедурка, делов у которой - построить кусок строки, пригодный для вставки в where-часть запроса,
AbSet - recordset с запросом, расположен в модуле данных maindm,
AbSFrm - форма для ввода параметров поиска,
AbFrm - форма, в которой находятся элементы управления, привязанные к тому recordset"у...

воде всё....


Delirium   (2002-01-25 15:47:00) [11]

Что-то не очень понятно, покажи код


Наверх

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