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

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

Не полное добавление записей update в цикле. [D7, Access]


Orc ©   (2005-01-17 14:10:00) 

Проблема вот какая: организовано чтение из файла (допустим неких идентификаторов, имён, количества и цен) в таблицу. Далее, на основе некоторых других данных (введённого пользователем коэффициента), производится расчёт в поле таблицы. Сделано так:

// q - введённый кэффициент.

adoquery1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+extractfilepath(application.ExeName)+'mainbase.mdb;Mode=ReadWrite;Persist Security Info=False;Jet OLEDB:Database Password=12345678';
adoquery2.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+extractfilepath(application.ExeName)+'mainbase.mdb;Mode=ReadWrite;Persist Security Info=False;Jet OLEDB:Database Password=12345678';

adoQuery1.Active := false;
adoQuery1.SQL.Text := 'select * from maintable';
adoQuery1.Active := true;

while not adoquery1.Eof do
begin
ADOQuery2.SQL.Text:='UPDATE maintable set newfield="'+ADOQuery1.FieldValues['id']*ADOQuery1.FieldValues['id']/q+'" where id="'+ADOQuery1.FieldValues['id']+'"';
adoQuery2.ExecSQL;
adoquery1.Next;
end;


А проблема заключается в том, что остаётся необработанная последняя запись в таблице, т.е. на неё не срабатывает update, хотя данными эта запись ничем не отличается от ей предшествующих. В чём может быть загвоздка? Заранее благодарен за ответы!


Danilka   (2005-01-17 15:07:00) [1]

[6] Orc ©   (17.01.05 14:55)
при чем здесь сервер? аццесс тоже понимает скуль. я написал тебе пример запроса, которые делает то-же самое, что и ты в приведенном тобой примере.
если тебе нада пример полного кода на, держи:

adoquery1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+extractfilepath(application.ExeName)+'mainbase.mdb;Mode=ReadWrite;Persist Security Info=False;Jet OLEDB:Database Password=12345678';
adoQuery1.SQL.Text := 'UPDATE maintable set newfield=id*id/:PARAM_Q';
adoQuery1.Parameters[0].Value := q;
adoQuery1.ExecSQL;

:))


Erik1   (2005-01-17 15:03:00) [2]

Вопервых непонятно почему делается 2 соеденения? Во вторых ты под отладкой это запускал? На последнею строку формируется SQL команда? Мне кажется, что нет.


Orc   (2005-01-17 14:55:00) [3]


> обычно все можно описать sql-запросом.

Можно, но есть из ряда вон выходящие случаи. Просто заказчик настоял на файл-сервере. Так бы я реализовал всё на SQL - и все дела.


Danilka   (2005-01-17 14:49:00) [4]

[4] Orc ©   (17.01.05 14:42)
все равно не ко мне: не помню когда последний раз все записи в цикле перебирал. :) обычно все можно описать sql-запросом.


Orc   (2005-01-17 14:42:00) [5]


> это уже не ко мне, я с аццессом дело имел последний раз
> где-то в 99 году. :)

Принципы-то одни и те же :) Я вон вообще MCDBA и MCSD до кучи, с MS SQL - проще имхо :)


Danilka   (2005-01-17 14:37:00) [6]

[2] Orc ©   (17.01.05 14:25)
> А значения ранее записанных полей откуда брать?

в смысле? судя по коду - у тебя уже есть в аццессе заполненая таблица maintable, и тебе надо проапдейтить у нее одно поле, все ее записи. это делается одним запросом, а не кучей запросов - по одному на каждую запись+еще один селект.

> Нет, ну так можно сделать, конечно, но мне просто интересно
> - это я чего-то не понимаю или что?

это уже не ко мне, я с аццессом дело имел последний раз где-то в 99 году. :)


Orc   (2005-01-17 14:25:00) [7]

А значения ранее записанных полей откуда брать? Нет, ну так можно сделать, конечно, но мне просто интересно - это я чего-то не понимаю или что? :)


Danilka   (2005-01-17 14:22:00) [8]

а зачем все тянуть на клиента? можно одним запросом
что-то типа:
UPDATE maintable set newfield=id*id/:PARAM_Q
предварительно заполнив параметр PARAM_Q.


Наверх

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