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

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

Вопрос по ADOQuery... [D5, MSSQL]


grusty ©   (2003-08-27 12:10:00) 

На форме 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 - все нормально. Такое чувство, что необходима какая-то пауза. Может я что-то неправильно делаю? ПОМОГИТЕ!


grusty   (2003-08-27 19:29:00) [1]

Ну наконец-то, разобрался...
Оказывается нужно было на форму добавить ADOConnection...
Спасибо всем, в частности -->Vlad!


Vlad   (2003-08-27 15:27:00) [2]

Сдается мне, тут все-таки какая-то путаница с транзакциями...
То бишь судя по характеру проблемы, каждый Query делает запрос в отдельной транзакции, и первый - не успевает закончить ее, а второй уже делает SELECT


grusty   (2003-08-27 14:49:00) [3]

-->SiJack
Я сейчас сделал все, как у тебя. В базе 1 запись.
Ну хоть убей, но не менее чем за 5 сек. происходит удаление. Могу текст своей проги выслать. Вот пример №7 работает без проблем (см. выше).


SiJack   (2003-08-27 14:25:00) [4]

>grusty ©
У меня все работает нормально без 5-и секунд


grusty   (2003-08-27 14:23:00) [5]

Тот же результат, только компоненты разные...
Почему то именно запрос на удаление всех записей выполняется не менее чем 5 сек.


SiJack   (2003-08-27 14:01:00) [6]

ADOExport енто ADOCommand


SiJack   (2003-08-27 13:54:00) [7]

Взято из работающей программы
ADODataSet.Close;
ADOExport.CommandText:="Delete * from TSTip";
ADOExport.Execute;
ADODataSet.Open;

Даже глазом не успеешь моргнуть :)


grusty   (2003-08-27 13:43:00) [8]

Абсолютно идентичный результат. Никакой разницы.
Вот если после SQLScript.ExecSQL поставить паузу около 5 сек., тогда все нормально. Что это за задержка?
Еще пол дня, и я перейду на BDE...


Vlad   (2003-08-27 13:10:00) [9]

А если так ?

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:02:00) [10]

-->Fiend
Ничего подобного. Если вместо SQLScript использовать второй ADOQuery, то результат тот же...


Fiend   (2003-08-27 12:58:00) [11]

То grusty:
никакого идиотизма!
Ты просто доверился сторонней библиотеке vgLib, а теперь пожинаешь плоды.


grusty   (2003-08-27 12:54:00) [12]

А вот так работает:

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:50:00) [13]

То grusty
сорри, как фсегда недочитал до конца.
Действительно хто такой этот ADOScript?
Да и еще можно оттрассировать запросы к серверу, дабы убедиться что тот самый скрипт выполняется.


grusty   (2003-08-27 12:49:00) [14]

--> Vlad
vg2ADOSQLScript (vgLib);

--> ZS
Возникает ошибка...


ZS   (2003-08-27 12:41:00) [15]

Попробуй ADOQuery.Refresh


Vlad   (2003-08-27 12:36:00) [16]

>Fiend © (27.08.03 12:26) [1]
Query итак закрывается-открывается после удаления.
>grusty (27.08.03 12:10)
А что такое ADOScript, если не секрет ?
И еще. Кажется где-то Commit надо ставить... :)


grusty   (2003-08-27 12:34:00) [17]

--> Fiend
А я что делаю... См. процедуру...


Fiend   (2003-08-27 12:26:00) [18]

так может надо закрыть и открыть ADOQuery после віполнения удаления? ;)


Наверх

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