| Autor |
Beitrag |
axlegolas
      
Beiträge: 42
WIN 2000, WIN XP
D 6,D 2006, C#
|
Verfasst: Mo 13.02.06 10:52
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| TableSet:= TADOQuery.Create(Self); TableSet.ConnectionString:= 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+pDatabase+';Persist Security Info=False'; TableSet.SQL.Clear; TableSet.SQL.Add('CREATE TABLE Version(Tabellenname CHARACTER(30) NOT NULL,'+ 'Versionsnummer SMALLINT)'); TableSet.ExecSQL; TableSet.SQL.Clear; TableSet.SQL.Add('INSERT INTO Version (Tabellenname,Versionsnummer)'); TableSet.SQL.Add('VALUES ("Version","'+IntToStr(Tab_Version_VN)+'"),'+ '("DerivBestaende","'+IntToStr(Tab_DerivBest_VN)+'"),'+ '("RepCashBuchungen","'+IntToStr(Tab_CashRep_VN)+'"),'+ '("RepDerivOpenPos","'+IntToStr(Tab_DerivOpenRep_VN)+'"),'+ '("RepDerivOrder","'+IntToStr(Tab_DerivOrdRep_VN)+'"),'+ '("RepDerivTransList","'+IntToStr(Tab_DerivTransRep_VN)+'"),'+ '("RepMarginDetail","'+IntToStr(Tab_MarginRep_VN)+'"),'+ '("RepWPBestaende","'+IntToStr(Tab_WPBestRep_VN)+'"),'+ '("RepWPOrder","'+IntToStr(Tab_WPOrdRep_VN)+'"),'+ '("RepWPTrans","'+IntToStr(Tab_WPTransRep_VN)+'"),'+ '("WPBestaende","'+IntToStr(Tab_WPBest_VN)+'");'); TableSet.ExecSQL; |
Fehlermeldung: Fehlendes Semikolon am Ende der SQL Anweisung!?!?
Zudem möchte ich beide ExecSQL zusammenfassen
Moderiert von raziel: Delphi-Tags hinzugefügt
_________________ Jene Menschen die zu Tage träumen sind gefährliche Menschen, denn ihre Träume sind Träume der Veränderung und des Chaos.
Zuletzt bearbeitet von axlegolas am Mo 13.02.06 11:09, insgesamt 2-mal bearbeitet
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Mo 13.02.06 11:00
Ich würde die Abfrage als paramterisierten Query ausführen.
TQuery unterstützt nur einfache Statements, daher ist es nicht möglich mehrere Staements auf einmal auszuführen, dafür gibt es spezielle Komponenten.
Für den Zugriff auf access-Datenbanken sind die ADO-Komponenten besser geeignet.
_________________ Markus Kinzler.
|
|
axlegolas 
      
Beiträge: 42
WIN 2000, WIN XP
D 6,D 2006, C#
|
Verfasst: Mo 13.02.06 11:03
Deshalb benutze ich auch eine ADOQuery-Komponente
_________________ Jene Menschen die zu Tage träumen sind gefährliche Menschen, denn ihre Träume sind Träume der Veränderung und des Chaos.
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Mo 13.02.06 11:08
| Zitat: | | ich möchte mit einer TQuery einen SQL Befehl ausführen |
Deshalb ging ich von der BDE aus. TADOCommand wäre dann die richtige Komponente. Den mehrfach INSERT würde ich aber wegwn der Flexibilität in der Anzahl der einzufügenden Datensätze über eine parameterisierten Query (TADOQuery) machen.
_________________ Markus Kinzler.
|
|
axlegolas 
      
Beiträge: 42
WIN 2000, WIN XP
D 6,D 2006, C#
|
Verfasst: Mo 13.02.06 11:18
Irgendwie verstehe ich dich nicht. ich benutze doch die ADOQuery. Es funktioniert auch alles ganz gut, bis auf die SQL-Syntax. Die Fehlermeldung sagt mir es fehlt ein Semikolon und ich sehe den Wald vor lauter Bäumen nicht....
Ich habe gehofft mir kann einer sagen wo dieser Fehler liegt (in der Syntax)!!!!
_________________ Jene Menschen die zu Tage träumen sind gefährliche Menschen, denn ihre Träume sind Träume der Veränderung und des Chaos.
|
|
KidPaddle
      
Beiträge: 351
WinXP,Linux
D7 Prof, XE7
|
Verfasst: Mo 13.02.06 11:24
Welche Datenbank verwendest Du? Außer MySQL kenne ich keine Datenbank, die in einem INSERT - Statement mehrere Wertepaare einfügen kann, sondern immer nur ein Wertepaar pro INSERT. Das würde die Fehlermeldung nach dem fehlenden Semikolon, welches dann nach dem ersten Wertepaar sein sollte, erklären.
Gruß
Thomas
|
|
axlegolas 
      
Beiträge: 42
WIN 2000, WIN XP
D 6,D 2006, C#
|
Verfasst: Mo 13.02.06 11:30
Ich bin leider gezwungen eine Access-db zu verwenden. Aber bist du sicher, daß es an der Datenbank liegt? Hört sich für mich nicht plausibel an. Ich denke ich werde irgendwo einen kleinen Syntaxfehler eingebaut haben. In anderen Foren oder Tutorials war es nämlich auch möglich...
_________________ Jene Menschen die zu Tage träumen sind gefährliche Menschen, denn ihre Träume sind Träume der Veränderung und des Chaos.
|
|
noidic
      
Beiträge: 851
Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
|
Verfasst: Mo 13.02.06 11:35
Mit Delphi-Tags wärs warscheinlich schneller gegangen...
Am Ende des CREATE TABLE - Statements ist kein Semikolon, tu da mal eins hin.
_________________ Bravery calls my name in the sound of the wind in the night...
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Mo 13.02.06 11:36
Ein SQL-Query wird immer durch ein Semikolon abgeschlossen. Bei einfachen Queries funktioniert es aber auch ohne.
_________________ Markus Kinzler.
|
|
axlegolas 
      
Beiträge: 42
WIN 2000, WIN XP
D 6,D 2006, C#
|
Verfasst: Mo 13.02.06 11:39
Die CREATE Anweisung funktioniert, da habe ich das mit dem ; schon probiert. Das Problem ist die INSERT Anweisung da crashst...
_________________ Jene Menschen die zu Tage träumen sind gefährliche Menschen, denn ihre Träume sind Träume der Veränderung und des Chaos.
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Mo 13.02.06 11:42
Wie sieht der Code für den mehrfachen INSERT aus?
_________________ Markus Kinzler.
|
|
axlegolas 
      
Beiträge: 42
WIN 2000, WIN XP
D 6,D 2006, C#
|
Verfasst: Mo 13.02.06 11:43
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Mo 13.02.06 11:46
Du benötigst für einen INSERT immer den ganzen Query. Es reicht nicht nur die VALUES zu wiederholen. Nochmal den Vorschlag diesen Teil zu parametrisieren.
_________________ Markus Kinzler.
|
|
axlegolas 
      
Beiträge: 42
WIN 2000, WIN XP
D 6,D 2006, C#
|
Verfasst: Mo 13.02.06 11:50
Kannst du mir dann kurz erläutern, wie du das meinst mit dem parametisieren?
_________________ Jene Menschen die zu Tage träumen sind gefährliche Menschen, denn ihre Träume sind Träume der Veränderung und des Chaos.
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Mo 13.02.06 11:59
Der Eigenschaft TableSet.SQL.Text folgenden Wert zuweisen:
SQL-Anweisung 1:
| INSERT INTO Version (Tabellenname,Versionsnummer) VALUES( :Tabname, :VerNr); |
Dann mußt du im Sourcecode nur noch die Paramter mit TableSet.Parameters.ParamByName('Tabname').Value := <Wert>;
bzw. .asInteger und TableSet.Parameters.ParamByName('VerNr').Value := <Wert>;setzten.
_________________ Markus Kinzler.
|
|
axlegolas 
      
Beiträge: 42
WIN 2000, WIN XP
D 6,D 2006, C#
|
Verfasst: Mo 13.02.06 12:03
Damit ist das Problem noch immer nicht gelöst, da ich in diesem Fall auch nur eine INSERT Anweisung habe, ich aber doch mehrere Datensätze einfügen muß.!!!!!!!!!
_________________ Jene Menschen die zu Tage träumen sind gefährliche Menschen, denn ihre Träume sind Träume der Veränderung und des Chaos.
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Mo 13.02.06 13:22
Wenn du mehere in einem Durchgang einfügen willst mußt du wie schon gesagt für jeden datensatz das gesammte Statement einfügen, oder eben jeweild die Parameter anpassen und mit ExecSql abschließen.
_________________ Markus Kinzler.
|
|