![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ZeosDBO. Несколько запросов [D5, MySQL]
Terminus © (2004-07-05 17:15:00)Господа, рабротал ли кто с ZeosDBO v6 + MySQL v4?
Проблема в следующем.
Пишу такой примерно код:
var
SQLQuery: TZQuery;
SQLQuery.SQL.Clear;
SQLQuery.SQL.Add('INSERT INTO users (name) VALUES (First)');
SQLQuery.SQL.Add('INSERT INTO users (name) VALUES (Second)');
SQLQuery.ExecSQL;
Так вот при этом вылетает ошибка синтаксиса MySQL во второй строчке. :(. Если выполнить запросы по очереди, т.е. после первого сделать ExecSQL и SQL.Clear, то все нормально, а вот подать несколько запросов за раз не получается. Попытка ставить в конце запроса ";" к успеху не приводила. :( Может кто сталкивался в этим?
P.S.: В самом запросе ошибок нет, база создана, таблица, поля, все ok...
Terminus (2004-07-05 22:06:00) [1]Сейчас да, открывается :)
Спасибо всем, маневр с параметрами удался...
Sir John (2004-07-05 20:45:00) [2]
http://www.zeoslib.netработает. Без проблем открывается!
Terminus (2004-07-05 19:57:00) [3]Ага... За ценный совет спасибо, попробую. :) Просто с параметрами тут я еще не успел столкнуться...
sniknik (2004-07-05 18:14:00) [4]чуть подробнее об этом :)
SQLQuery.SQL.Clear;
SQLQuery.SQL.Add('INSERT INTO users (name) VALUES (:name);
for i:=0 to Users.Count-1 do begin
SQLQuery.Params[0].value:= Users.Items[i].Name;
SQLQuery.ExecSQL;
end;
примерно так, воможны вариации (Params/Parameters, Prepare, asString, ... х.з.)
(парамбайнейм лучше не использовать)
Terminus (2004-07-05 18:07:00) [5]Соловьев
Ну вот я и прошу чуть подробнее об этом :). Документация как-то не особо помогает...
Terminus (2004-07-05 18:05:00) [6]Sir John
Увы, в моем дистрибутиве нет ни намека на этот компонент. У меня v6.1.5
Сайт http://zeoslib.net/лежит, как, кстати, и gamedev.ru и Аська. Или это только у меня? :)
Соловьев (2004-07-05 18:03:00) [7]
> это процесс не ускорит, боюсь... Это только место сэкономит.
> :)
тебе же сказали - параметры!
Terminus (2004-07-05 18:01:00) [8]Мда, походу, нет в MySQL разделителей... Прийдется делать сотню ExecSQL :(
Nikolay M.
А как в таком случае будет выглядеть подгрузка файла и выполнение запроса? Ведь в любом случае все сведется к многострочному SQLQuery.SQL и ExecSQL с ошибкой в конце... Или я не понял мысль :)
sniknik
А можно чуть поподробнее? Если речь идет просто о цикле типа
for i:=0 to Users.Count-1 do
begin
SQLQuery.SQL.Clear;
SQLQuery.SQL.Add('INSERT INTO users (name) VALUES ('''+Users.Items[i].Name+''')');
SQLQuery.ExecSQL;
end;
То это процесс не ускорит, боюсь... Это только место сэкономит. :)
Sir John (2004-07-05 17:53:00) [9]<>ответ:Terminus
хотите смейтесь, хотите нет - есть!
я использую zeosdbo-5.4.1-stable. Скорее всего Вы не все установили
sniknik (2004-07-05 17:50:00) [10]> множественное ExecSQL все таки не ускоряет процесс :)
выноси изменение самого запроса за цикл, смену значения (судя по приведенным 2м запросам это вполне возможно) делай в параметрах.
будет достаточно быстро. (убереш самую длительную составляющую)
> разделитель ставить надо другой?
если и есть такой то на сайте MySQL наверняка о нем написано.
Nikolay M. (2004-07-05 17:44:00) [11]Если нужно делать быструю вставку, то быстрее всего будет подготовить текстовый файлик того вида, который ты напрасно пытаешься выполнить как один запрос и подать его (файл) на вход isql.
Курдль (2004-07-05 17:44:00) [12]А разделитель выражений? Не знаю, как для мускула, но для оракла - /
для сайбэйса - ;
Terminus (2004-07-05 17:41:00) [13]И еще. Зачем тогда ZQuery вообще свойство SQL как набор строк, если выпонить можно только одну операцию? :) Или может там какой-то разделитель ставить надо другой? Пробовал Chr(10)... без толку...
Terminus (2004-07-05 17:39:00) [14]Хотите смейтесь, хотите нет, а такого компонента в ZeosDBO нет :(. А мне потребуется в ММОРПГ делать несколько дексятков INSERT за раз, а множественное ExecSQL все таки не ускоряет процесс :)
Sir John (2004-07-05 17:29:00) [15]для выполения нескольких строк запроса одновременно используйте
ZBatchSQL
Соловьев (2004-07-05 17:17:00) [16]выполнять запросы по очереди