Dodawanie wielu wierszy jednym INSERTEM

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 )

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

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

Kopiuj
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

edytowany 1x, ostatnio: flowCRANE
JU
  • Rejestracja:około 22 lata
  • Ostatnio:3 miesiące
  • Postów:5042
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:

Kopiuj
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.

_13th_Dragon
To nie może działać poprawnie, brakuje nawiasu.
J7
Nie chodzi o nawias i czy literkę y (to błąd przy pisaniu posta). Czy można za pomocą ZQuery.ExecSQL dodać dwa wiersze jednocześnie?
ŁF
Moderator
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 19 godzin
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.


edytowany 1x, ostatnio: ŁF
_13th_Dragon
MySQL, Oracle, Postgres
JU
MSSQL masz bulk insert.
KR
Cassandra też - batch update.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.