Пишу в 4 ночи, может вопрос тупой по сути, но я ничего не въезжаю. Долгое время у меня была процедура, пишу упрощённо:
| Код | for i:=1 to n do begin query.close; query.sql.text:='update "c:\1.db" set x="'+myvar+'" where ID = '+inttostr(i); query.ExesSQL; end;
|
x - поле типа BLOB Memo. работала хорошо, но долго. Решил упростить так:
| Код | query.close; query.sql.text:='update "c:\1.db" set x="'+myvar+'" where ((ID = 1) or (ID = 2) or (ID = 3) or (ID = 4) or (ID = 5) or (ID =6) or (ID = 7) or (ID = 8)...)'; //*** query.ExesSQL; end;
|
Сначала протестил - вроде пашет, а потом... В итоге n=50, в результате выполнения запроса (***) никаких ошибок не возникает, но х установилось не в 50ти записях, а в 16ти-24х! Причём без какой-то зависимости и не удалось мне понять, сколько же точно записей обновляется. При выполнении процедуры 3 раза (при n=50 у меня в базе) в итоге все поля были обновлены... Объясните, что это за лажа, можно ли писать так запрос (***) и есть ли выход? |