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