![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Время выполнения запроса [D6, Access]
Litr © (2004-05-11 07:57:00)Мастера, подскажите новичку. Делаю запрос с тремя параметрами:
время старта, стопа и №. Запрос выполняется достаточно быстро, далее добавляю два поля и заполняю их начиная с первой строки и до .Eof, ну уж слишком долго происходит заполнение этих полей.
Посмотрите код и подскажите, как можно сделать, чтоб получалось быстрее ? Заранее спасибо.
begin
with ADOQuery1 do
begin
Close;
SQL.Text:='create table TMP (MDateTime DateTime, NTank Integer, Tape Integer, Sensor Integer)';
ExecSql;
Close;
SQL.Text:='Delete * from TMP';
ExecSQL;
Close;
SQL.Text:='insert into TMP Select MDateTime, NTank, (VolumeBytape/1000) as Type, (VolumeBySensor/1000)as Sensor from TankData WHERE (MDateTime Between :Dt1 And :Dt2) AND NTank=:N order by MDateTime';
ADOQuery1.Parameters.ParamByName('N').Value := DBComboBox1.text;
ADOQuery1.Parameters.ParamByName('Dt1').Value :=Trunc(DateTimePicker7.Date) + DateTimePicker5.Time - Trunc(DateTimePicker5.Time);
ADOQuery1.Parameters.ParamByName('Dt2').Value :=Trunc(DateTimePicker8.Date) + DateTimePicker6.Time - Trunc(DateTimePicker6.Time);
ExecSql;
Close;
SQL.Text:='ALTER TABLE TMP ADD COLUMN Popravka Integer';
ExecSQL;
Close;
SQL.Text:='ALTER TABLE TMP ADD COLUMN Result Integer';
ExecSQL;
Close;
with ADOQuery6 do
begin
Close;
SQL.Text:='select * from TMP';
Open;
ADOQuery6.First;
while not ADOQuery6.Eof do
begin
p:=ADOQuery6.Fields[3].AsInteger;
ADOQuery6.Edit;
ADOQuery6.Fields[4].AsInteger:=0;
ADOQuery6.Fields[5].AsInteger:=(p+0);
ADOQuery6.Post;
ADOQuery6.Next;
Litr (2004-05-11 08:56:00) [1]да, но поля то Popravka, Result не заполненные, разве можно Update их ?
sniknik (2004-05-11 08:42:00) [2]сделай еше одну SQL команду вместо цикла
UPDATE TMP SET Popravka = 0, [Result] = Sensor + 0