![]() |
Datenbank: Paradox • Version: 7 • Zugriff über: BDE, SQL
Ansteuerung von Paradoxtabellen mit SQL
Moin moin,
hab mal wieder ein kleines Problem mit einem meiner Programme, ich plane im Folgenden in der Datenbank CDDVD.db einen neuen Eintrag anzulegen, leider klappt es nicht wie gewünscht... Ein paar Zeilen drüber funktioniert es aber bei einer anderen Datenbank fast genauso. Ich bekomme bei der Showmessage-kontrolle ausgegeben: "INSERT INTO CDDVD (ID,Lagerort,Name,Monat,Jahr) VALUES (1,2,"WLP2",2,2009)". Das System meldet den Fehler: Ungültiges Schlüsselwort Symbolstring INSERT. Und finde den Fehler nicht, kann mir einer verraten wo sich der Wurm da heimisch fühlt?
Delphi-Quellcode:
Herzlichen Dank im Vorraus
CDID:=NeuerCDIndex;
If CDID=0 then Abort; with Query1 do begin Close; SQL.Clear; Showmessage('INSERT INTO CDDVD (ID,Lagerort,Name,Monat,Jahr) VALUES ('+IntToStr(CDID)+','+IntToStr(Lagerort)+',"'+GetPartitionName(ComboBox1.Text[1])+'",'+LabeledEdit1.Text+','+LabeledEdit2.Text+')'); SQL.Add('INSERT INTO CDDVD (ID,Lagerort,Name,Monat,Jahr) VALUES ('+IntToStr(CDID)+','+IntToStr(Lagerort)+',"'+GetPartitionName(ComboBox1.Text[1])+'",'+LabeledEdit1.Text+','+LabeledEdit2.Text+')'); ExecSQL; Close; end; Abraxas |
Re: Ansteuerung von Paradoxtabellen mit SQL
Hallo,
mach' mal anstelle von " ein QuotedStr. Sind im SQL " eigentlich zulässig oder müssen es ' sein? Änder mal das
Delphi-Quellcode:
in
SQL.Clear;
Showmessage('INSERT INTO CDDVD (ID,Lagerort,Name,Monat,Jahr) VALUES ('+IntToStr(CDID)+','+IntToStr(Lagerort)+',"'+GetPartitionName(ComboBox1.Text[1])+'",'+LabeledEdit1.Text+','+LabeledEdit2.Text+')'); SQL.Add('INSERT INTO CDDVD (ID,Lagerort,Name,Monat,Jahr) VALUES ('+IntToStr(CDID)+','+IntToStr(Lagerort)+',"'+GetPartitionName(ComboBox1.Text[1])+'",'+LabeledEdit1.Text+','+LabeledEdit2.Text+')');
Delphi-Quellcode:
damit Du das auszuführende SQL siehst und nicht eine Zeichenfolge, von der Du hoffst, dass sie mit dem auszuführenden SQL übereinstimmt :wink:
SQL.Clear;
SQL.Add('INSERT INTO CDDVD (ID,Lagerort,Name,Monat,Jahr)'; SQL.Add('VALUES (' + IntToStr(CDID) + ',' + IntToStr(Lagerort) + ','); SQL.Add(QuotedStr(GetPartitionName(ComboBox1.Text[1])) + ','); SQL.Add(LabeledEdit1.Text + ',' + LabeledEdit2.Text + ')'); Showmessage(SQL.Text); |
Re: Ansteuerung von Paradoxtabellen mit SQL
Hallo,
warum nutz Du nicht die Möglich keit der Parameter übergabe. Dein Code könnte dann ungefähr so aussehen und läst sich besser lesen
Delphi-Quellcode:
Gruß Hartmuth
with Query1 do
begin sql.Clear; sql.Add('INSERT INTO CDDVD (ID,Lagerort,Name,Monat,Jahr) VALUES (:ID,:Lagerort,:Name,:Monat,:Jahr'); ParamByName('ID').AsInteger := CDID; ParamByName('Lagerort').AsString := Lagerort; ... Prepare; ExecSQL; end; |
Re: Ansteuerung von Paradoxtabellen mit SQL
Hallo,
wenn ich mich nicht irre, genügt es nicht, nur den Tabellennamen zu benutzen, sondern es muss auch auch noch die Endung und ggf. der Dateipfad hinzugefügt werden. entweder so
Delphi-Quellcode:
oder so
INSERT INTO "CDDVD.DB" (ID,....
Delphi-Quellcode:
INSERT INTO "C:\PfadZurTabelle\CDDVD.DB" (ID,....
|
Re: Ansteuerung von Paradoxtabellen mit SQL
Zitat:
Sollte sich die Tabelle nicht in dem Verzeichnis befindet, dann muss das Verzeichnis im SQL angegeben werden. Gruß Hartmuth |
Re: Ansteuerung von Paradoxtabellen mit SQL
Danke für die schnellen Antworten!
Ich habe alle eure Vorschläge nacheinander ausprobiert, hat mir nur leider nicht viel geholfen. Bei der Ausgabe des SQL.Text habe ich zusätzlich noch die zuvor ausgeführte SQL-Anweisung gelistet, trotz dem "SQL.Clear", ansonsten ist die ausgabe vollkommen identisch mit der die im ersten Beitrag steht. :gruebel: Und bei der Parametervariante:
Delphi-Quellcode:
Bekomme ich als Antwort: "Query1: Parameter 'Name' nicht gefunden" :gruebel:
with Query1 do
begin sql.Clear; sql.Add('INSERT INTO CDDVD (ID,Lagerort,Name,Monat,Jahr) VALUES (:ID,:Lagerort,:Name,:Monat,:Jahr'); ParamByName('ID').AsInteger := CDID; ParamByName('Lagerort').AsInteger := Lagerort; ParamByName('Name').AsString:= GetPartitionName(ComboBox1.Text[1]); ParamByName('Monat').AsString:= LabeledEdit1.Text; ParamByName('Jahr').AsString:=LabeledEdit2.Text; Prepare; ExecSQL; end; Bin also der Lösung noch nicht näher gekommen. |
Re: Ansteuerung von Paradoxtabellen mit SQL
Hallo,
ist das sicher der komplette Quelltext ? oder steht zwischen dem with Query1 do und dem SQL.Clear noch was ?. Lass das with Query1 mal komplett weg Query1.SQL.Clear; Query1.SQL.Add usw. Ah j es fehlt auch noch eine Klammer hinter dem Parameter-Jahr
Delphi-Quellcode:
sql.Add('INSERT INTO CDDVD (ID,Lagerort,Name,Monat,Jahr) VALUES (:ID,:Lagerort,:Name,:Monat,:Jahr)');
Heiko |
Re: Ansteuerung von Paradoxtabellen mit SQL
Statt Clear und Add könntest Du auch Text zuweisen.
Delphi-Quellcode:
[edit] Ich sehe gerade, dass im SQL-String die schließende Klammer fehlt. Ist das im Originalsource auch so? [/edit]
sql.Text := 'INSERT INTO CDDVD (ID,Lagerort,Name,Monat,Jahr) VALUES (:ID,:Lagerort,:Name,:Monat,:Jahr';
|
Re: Ansteuerung von Paradoxtabellen mit SQL
Danke für die Blitzantworten. :-)
Ja das ist der gesamte Quelltext zu dieser SQL-Anweisung 1:1 von Delphi kopiert. In einer Prozedur davor wird zwar eine nahezu identische SQL-Anweisung durchgeführt, die aber problemlos funktioniert, daher hab ich sie ausgelassen. Leider bringt auch die Schreibweise ohne "with Query1 do" nichts. Und das SQL.Text:=... verkürzt zwar den Quelltext um eine Zeile, hat aber sonst leider keinen Effekt. P.S. Die schließende Klammer habe ich bereits ergänzt. |
Re: Ansteuerung von Paradoxtabellen mit SQL
Ändere mal den Name des Parameter Name ab, Name könnte misinterpretiert werden
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz