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

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

Обновление DataSet [D7, ADO, Access]


Apollo ©   (2003-12-11 17:05:00) 

Здравствуйте. Проблема у меня такая:
Через ADODataset делаю выборку SQL-запросом из двух баз.
Затем при нажатии на кнопку выполняется следующий код

ADOCommand1.ConnectionString:=...;
ADOCommand1.CommandType:=cmdText;
ADOCommand1.CommandText:="Delete from KontrAgent where ID ="+IntToStr(Org.ID);
ADOCommand1.Execute;

ADODataSet1.Close;
ADODataSet1.Open

После всего этого ADODataSet1 выдает тоже самое, что и до нажатия кнопки. Т.е. ничего не обновилось. :о(
Потом, отдельно делаю ADODataSet1.Refreshи оно обновляется. Если ADODataSet1.Refreshделаю вместо Close-Openне обновляется. :о(
Подскажите, как можно обновить набор данных...

Заранее спасибо.


Apollo   (2003-12-22 13:15:00) [1]

--> sniknik
Да, действительно. Поставил ADOConnection на ADOCommand1 и ADODataSet1. После выполнения добавления записи в ADOCommand запись сразу же появляется в DBGrid.

--> All
Спасибо всем.


Apollo   (2003-12-18 17:51:00) [2]

А если запросы "Select..." хранить непосредственно в базе. А затем подключать их как таблицы? По идее проблему должно решить. Но как по скорости? база у меня предполагается большая, тысяч на 10 записей.


sniknik   (2003-12-18 11:20:00) [3]

важно, может не в этом случае (в этом все правильно работает), но не раз сдесь были вопросы по странным глюкам именно изза того что не использовался компонент ADOConnection, а прописывались строки.
во всяком случае изменение только этого решало проблему. (что конкретно было не вспомню, даже для одного случая)


Плохиш_   (2003-12-18 11:01:00) [4]


> Apollo © (18.12.03 10:47) [5]
> --> roottim
> ExecuteOption все в False и там и там.
> ADOConnection не использую, сразу в ConnectionString пишу.

Для каждого создаётся своя Connection

> --> sniknik
> ConnectionString у обоих одинаковые.

А это уже не важно


Семен Сорокин   (2003-12-18 10:52:00) [5]

ADODataSet1.Requery;

from help:

Call Requery to refresh the recordset. Requery updates the dataset by re-executing the original command or SQL statement that produced the recordset.

The effects of Requery are the same as calling the dataset’s Close method and then its Open method. However, there are circumstances when one means of refreshing the recordset is better than the other. The values in properties like CursorLocation, CursorType, and LockType cannot be changed while the dataset is open, so Requery can only refresh the recordset using the existing values in these properties. To refresh the recordset using different values for these properties, effect the refresh using the Close and Open methods.

Options is a TExecuteOptions value that specifies the characteristics of the command execution affected by the requery that produces the recordset for the dataset.


Apollo   (2003-12-18 10:47:00) [6]

--> roottim
ExecuteOption все в False и там и там.
ADOConnection не использую, сразу в ConnectionString пишу.
--> sniknik
ConnectionString у обоих одинаковые.


sniknik   (2003-12-16 15:05:00) [7]

в ADOCommand1 и ADODataSet1 один ADOConnecton или разные?


roottim   (2003-12-16 14:58:00) [8]

+ConnectOptions в ADOConnecton


roottim   (2003-12-16 14:56:00) [9]

что установлено в ExecuteOptions?


Apollo   (2003-12-16 14:46:00) [10]

Возможно это из-за длительности выполнения.
Делаю следующий код:

var i:integer;
t1,t2:TDateTime;
begin
i:=ADODataSet1.RecordCount;
ADOCommand1.ConnectionString:=csMain;
ADOCommand1.CommandType:=cmdText;
ADOCommand1.CommandText:="Delete from KontrAgent where ID ="+IntToStr(Org.ID);
ADOCommand1.Execute;

{ TODO :
НЕ РАБОТАЕТ
Посмотри в форуме ответы }
t1:=Time;
while i<=ADODataSet1.RecordCount do
ADOPoluch.Requery;
t2:=Time;
ShowMessage(FormatDateTime("hh:mm:ss.zzz",t1)+#10+
FormatDateTime("hh:mm:ss.zzz",t2)+#10+
FormatDateTime("hh:mm:ss.zzz",t2-t1)+#10);
end;

Получается, что удаление одной записи занимает до 5-6 секунд.

Есть ли другие соображения на этот счет.


Наверх

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