Dodawanie wielu wierszy jednym INSERTEM

0

Witam,
aby skrócić czas dodawania wierszy do bazy SQLITE, potrzebuję dodać jednym INSERTEM kilka wierszy naraz.
Używam ZEOS-7.0.4-stable.

Wykonanie (np. w SQlite Manager )

INSERT INTO tabela (kolumna1, kolumna2) VALUES (wartosc1, wartosc2),(wartosc3, wartosc4)

działa poprawnie, dodają się dwa wiersze naraz, ale w Delphi wykonanie:

ZQuery.SQL.Clear;
ZQuery.SQL.Add('INSERT INTO tabela (kolumna1, kolumna2) VALUES (:wartosc1, :wartosc2),(:wartosc3, :wartosc4)');
ZQuery.ParamByName('wartosc1').AsMemo :=wartosc1;
ZQuery.ParamByName('wartosc2').AsMemo :=wartosc2;
ZQuery.ParamByName('wartosc3').AsMemo :=wartosc3;
ZQuery.ParamByName('wartosc4').AsMemo :=wartosc4;
ZQuery.ExecSQL;

zwraca błąd

First chance exception at $77172EEC. Exception class EZSQLException with message 'SQL Error: near ",": syntax error'. Processprogram.exe (2980)
Czy ZEOS przewiduje taką konstrukcję INSERT?

dodanie znacznika <code class="plsql"> - fp

1

Nigdzie w zapytaniu nie masz apostrofów, a kod wskazuje na to, że dodajesz dane tekstowe ;) Ale też skupiłbym się najpierw na mechanizmie parametrów, który wydaje się tu nie działać. Nie robiłem nigdy nic na ZEOS, więc nie wiem, jak to powinno być, ale może skup się właśnie na tym. Pewnie brakuje jakiejś instrukcji. Albo zamiast AsMemo rób: AsString.

0

Nie chodzi o typ zmiennej.
wykonanie:

ZQuery.SQL.Clear;
ZQuery.SQL.Add('INSERT INTO tabela (kolumna1, kolumna2) VALUES (:wartosc1, :wartosc2');
ZQuery.ParamByName(:wartosc1).AsMemo:=wartosc1;
ZQuery.ParamByName(:wartosc2).AsMemo:=wartosc2;
ZQuer.ExecSQL;

Działa poprawnie.

0

Nie znam bazy danych, która pozwalałaby na dodanie wielu rekordów w jednym insercie. TSQL zdaje się tak ma.
No proszę, człowiek uczy się przez całe życie - nawet MSSQL tak ma, kwestia poprawnej składni.

1 użytkowników online, w tym zalogowanych: 0, gości: 1