Форум: "Базы";
Текущий архив: 2003.09.18;
Скачать: [xml.tar.bz2];
ВнизВопрос по ADOQuery... Найти похожие ветки
← →
grusty (2003-08-27 12:10) [0]На форме 5 компонентов: ADOQuery, ADOScript, DataSource, Button и DBGrid, причем:
ADOQuery.SQL:="SELECT * from Spisok";
ADOScript.SQL:="DELETE from Spisok";
DataSource связан с ADOQuery и при открытии формы все записи отображаются в DBGrid.
Мне необходимо при нажатии на Button удалить все записи из базы. Выполняю следующую процедуру:
procedure TForm.ButtonClick(Sender: TObject);
begin
SQLScript.ExecStatement(1);
SQLScript.ExecSQL;
ADOQuery.Close;
ADOQuery.Open;
end;
По логике все должно быть замечательно, однако при первом нажатии на Button записи продолжают отображаться. При последующем нажатии на Button - все нормально. Такое чувство, что необходима какая-то пауза. Может я что-то неправильно делаю? ПОМОГИТЕ!
← →
Fiend (2003-08-27 12:26) [1]так может надо закрыть и открыть ADOQuery после віполнения удаления? ;)
← →
grusty (2003-08-27 12:34) [2]--> Fiend
А я что делаю... См. процедуру...
← →
Vlad (2003-08-27 12:36) [3]>Fiend © (27.08.03 12:26) [1]
Query итак закрывается-открывается после удаления.
>grusty (27.08.03 12:10)
А что такое ADOScript, если не секрет ?
И еще. Кажется где-то Commit надо ставить... :)
← →
ZS (2003-08-27 12:41) [4]Попробуй ADOQuery.Refresh
← →
grusty (2003-08-27 12:49) [5]--> Vlad
vg2ADOSQLScript (vgLib);
--> ZS
Возникает ошибка...
← →
Fiend (2003-08-27 12:50) [6]То grusty
сорри, как фсегда недочитал до конца.
Действительно хто такой этот ADOScript?
Да и еще можно оттрассировать запросы к серверу, дабы убедиться что тот самый скрипт выполняется.
← →
grusty (2003-08-27 12:54) [7]А вот так работает:
procedure TForm.ButtonClick(Sender: TObject);
begin
with ADOQuery do begin
Close;
SQL:="DELETE from Spisok";
ExecSQL;
SQL:="SELECT * from Spisok";
Open;
end;
end;
Идиотизм какой-то...
← →
Fiend (2003-08-27 12:58) [8]То grusty:
никакого идиотизма!
Ты просто доверился сторонней библиотеке vgLib, а теперь пожинаешь плоды.
← →
grusty (2003-08-27 13:02) [9]-->Fiend
Ничего подобного. Если вместо SQLScript использовать второй ADOQuery, то результат тот же...
← →
Vlad (2003-08-27 13:10) [10]А если так ?
procedure TForm.ButtonClick(Sender: TObject);
begin
ADOConnection.BeginTrans;
SQLScript.ExecStatement(1);
SQLScript.ExecSQL;
ADOConnection.CommitTrans;
ADOQuery.Close;
ADOQuery.Open;
end;
← →
grusty (2003-08-27 13:43) [11]Абсолютно идентичный результат. Никакой разницы.
Вот если после SQLScript.ExecSQL поставить паузу около 5 сек., тогда все нормально. Что это за задержка?
Еще пол дня, и я перейду на BDE...
← →
SiJack (2003-08-27 13:54) [12]Взято из работающей программы
ADODataSet.Close;
ADOExport.CommandText:="Delete * from TSTip";
ADOExport.Execute;
ADODataSet.Open;
Даже глазом не успеешь моргнуть :)
← →
SiJack (2003-08-27 14:01) [13]ADOExport енто ADOCommand
← →
grusty (2003-08-27 14:23) [14]Тот же результат, только компоненты разные...
Почему то именно запрос на удаление всех записей выполняется не менее чем 5 сек.
← →
SiJack (2003-08-27 14:25) [15]>grusty ©
У меня все работает нормально без 5-и секунд
← →
grusty (2003-08-27 14:49) [16]-->SiJack
Я сейчас сделал все, как у тебя. В базе 1 запись.
Ну хоть убей, но не менее чем за 5 сек. происходит удаление. Могу текст своей проги выслать. Вот пример №7 работает без проблем (см. выше).
← →
Vlad (2003-08-27 15:27) [17]Сдается мне, тут все-таки какая-то путаница с транзакциями...
То бишь судя по характеру проблемы, каждый Query делает запрос в отдельной транзакции, и первый - не успевает закончить ее, а второй уже делает SELECT
← →
grusty (2003-08-27 19:29) [18]Ну наконец-то, разобрался...
Оказывается нужно было на форму добавить ADOConnection...
Спасибо всем, в частности -->Vlad!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.09.18;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c