Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.024 c
1-1107160374
dreamse
2005-01-31 11:32
2005.02.13
Как перевести real ( double ) в integer


1-1106742980
Mishenka
2005-01-26 15:36
2005.02.13
Чем отличается Integer от LongInt?


3-1105599719
denis24
2005-01-13 10:01
2005.02.13
Tadotable.locktype


14-1106739159
ПЛОВ
2005-01-26 14:32
2005.02.13
Чем открыть *.LDF и *.MDF


1-1106811370
s_pavell
2005-01-27 10:36
2005.02.13
Интересный модуль GraphicEx




   Наверх