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

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

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]

выполнять запросы по очереди


Наверх

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