Entwickler-Ecke

Datenbanken - mehrere SQL befehle (nix gefunden)


Flash106 - Mo 24.05.04 17:51
Titel: mehrere SQL befehle (nix gefunden)
Hi,

ich hab das Forum schon abgegrast aber nichts was mein Problem löst gefunden. Und zwar möchte ich mehrer SQL befehle aufeinmal ausführen. Ich benutze die SQL query von dbExpress, hier das code beispiel:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button2Click(Sender: TObject);
begin
with SQLQuery1.SQL do begin
  Clear;
  Add ('CREATE DATABASE test');
  Add ('CREATE DATABASE test02');
end;
  SQLQuery1.ExecSQL;
end;


Das Problem is das ich nur einen BEfehl ausführen kann. Füge ich einen zweiten hinzu kommt der Fehler:
...'You have an error in your SQL syntax near 'CREATE DATABASE test02' at line 2'... .
:(.. Warum erhalte ich diesen Fehler denn? Im Forum wurde doch vorgeschlagen das so zumachen..
sowas dummes ... :(

Danke schonmal... Bianca

EDIT: hatte vergessen zu erwähnen das ich MySQL benutze....


FaTaLGuiLLoTiNe - Mo 24.05.04 18:05

[klugscheiss]
Also erstmal kann man das definitiv nicht gleichzeitig machen, sondern nur hintereinander. Echte Gleichzeitigkeit gibt es auf dem PC nämlich nicht. :mahn:
[/klugscheiss]

Ich bin mir im Moment nicht sicher ob man überhaupt mehrere Befehle auf einmal absetzen kann, aber wenn, denn nur mit einem Semikolon dazwischen. Also probier das mal:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button2Click(Sender: TObject);
begin
with SQLQuery1.SQL do begin
  Clear;
  Add ('CREATE DATABASE test;');
  Add ('CREATE DATABASE test02;');
end;
  SQLQuery1.ExecSQL;
end;


Wenn das nicht geht musst du halt zwischendurch das Query schliessen, neu füllen und ExecSQL nochmal aufrufen.


MSCH - Mo 24.05.04 18:24

es geht; aber nur durch die Hintertür;
eine Stored Procedure kann sowas; also createStoredProcedure(ErstelleTabelle erstellen, ZweiteTabelle erstellen), aufrufen und anschließend wieder löschen.
grez
msch


FaTaLGuiLLoTiNe - Mo 24.05.04 18:26

Allerdings können AFAIK nicht alle Datenbanken (z.B. ältere MySQL Versionen) mit StoredProcedures umgehen.


Flash106 - Mo 24.05.04 18:53

schon ok =) ... danke.. ich machs doch einzeln... is auch nich sooo das problem =) .. DANKE


Flash106 - Mo 24.05.04 19:43

aaaaahhhhhhhh VERDAAAAAAAAMMT!!! *grummel* .. ok ich mach ja jetz die SQL querys einzeln.. ABER... ich kann ja nichmal ne Tabelle mit mehreren Feldern erstellen.. dann bekommen ich die gleich Fehlermeldung wie schon genannt... KANN DOCH NICH WAHR SEIN!!!! :twisted: ... hilfe?!??!

EDIT: hier der code schnippzel:


Quelltext
1:
  mySQLQuery('CREATE TABLE test (name VARCHAR(25), alter INT)');                    

mySQLQuery ist eine procedure:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure mySQLQuery(query : string);
begin
  with Form1.SQLQuery1.SQL do begin
    clear;
    Add (query);
  end;
  Form1.SQLQuery1.ExecSQL;
end;


UGrohne - Di 25.05.04 16:30

Wie greifst Du denn auf die Datenbank zu? Per BDE? Dann hast Du damit ein Problem, da gehts nämlich auf diesem Weg nicht.

Ich würde Dir vorschlagen die zeoslibs zu verwenden, da gibts ne Kompo ZSQLProcessor, die ganze Scripte ausführen kann.


DannyVapid - Do 27.05.04 07:19

@UGrohne: naja, normalerweise funktioniert das schon einwandfrei per BDE und ODBC sowohl bei MySQL- als auch MSSQL-Datenbanken.

@Flash106: ich vermute mal die Datenbank hat mit Deinem Statement 'CREATE TABLE test (name VARCHAR(25), alter INT)' ein Problem, weil ALTER ein reserviertes Wort in SQL ist.
Nenn das Feld doch testweise mal anders.


Freundliche Grüsse
Danny


Flash106 - Mo 31.05.04 19:53

danke danny.. so hats super funktioniert =)

Bianca


UGrohne - Di 01.06.04 17:46

Ach na sowas, das kommt davon, wenn man sich nicht jedes Wort genau anschaut und den Sinn dahinter sucht ;-)