Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.13;
Скачать: CL | DM;

Вниз

Не полное добавление записей update в цикле.   Найти похожие ветки 

 
Orc ©   (2005-01-17 14:10) [0]

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

// 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 14:22) [1]

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


 
Orc ©   (2005-01-17 14:25) [2]

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


 
Danilka ©   (2005-01-17 14:37) [3]

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

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

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

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


 
Orc ©   (2005-01-17 14:42) [4]


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

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


 
Danilka ©   (2005-01-17 14:49) [5]

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


 
Orc ©   (2005-01-17 14:55) [6]


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

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


 
Erik1 ©   (2005-01-17 15:03) [7]

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


 
Danilka ©   (2005-01-17 15:07) [8]

[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;

:))



Страницы: 1 вся ветка

Текущий архив: 2005.02.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
3-1105079633
Mefodiy
2005-01-07 09:33
2005.02.13
Ошибка при записи изменений в Oracle через dbExpress


3-1105162091
va
2005-01-08 08:28
2005.02.13
БД - IntraWeb


6-1101471915
Vikky
2004-11-26 15:25
2005.02.13
Компонент для работы с SMTP и POP


14-1106275434
Думкин
2005-01-21 05:43
2005.02.13
С Днем рождения! 21 января


3-1105529008
Некто
2005-01-12 14:23
2005.02.13
Ексепшны или стандартные сообщения об ошибках