Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Ansteuerung von Paradoxtabellen mit SQL (https://www.delphipraxis.net/127894-ansteuerung-von-paradoxtabellen-mit-sql.html)

Abraxas 20. Jan 2009 21:09

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:
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;
Herzlichen Dank im Vorraus

Abraxas

nahpets 21. Jan 2009 08:59

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:
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+')');
in
Delphi-Quellcode:
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);
damit Du das auszuführende SQL siehst und nicht eine Zeichenfolge, von der Du hoffst, dass sie mit dem auszuführenden SQL übereinstimmt :wink:

borwin 21. Jan 2009 09:58

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:
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;
Gruß Hartmuth

Gollum 21. Jan 2009 11:03

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:
  INSERT INTO "CDDVD.DB" (ID,....
oder so

Delphi-Quellcode:
  INSERT INTO "C:\PfadZurTabelle\CDDVD.DB" (ID,....

borwin 21. Jan 2009 16:09

Re: Ansteuerung von Paradoxtabellen mit SQL
 
Zitat:

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.
Nur wenn die Tagelle nicht im Verzeichnis vom AliasName in der BDE definiert hat. Alternativ kann das auch im Database Objekt bei den Parameter "PATH= " angegeben werden.
Sollte sich die Tabelle nicht in dem Verzeichnis befindet, dann muss das Verzeichnis im SQL angegeben werden.

Gruß Hartmuth

Abraxas 21. Jan 2009 18:57

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:
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;
Bekomme ich als Antwort: "Query1: Parameter 'Name' nicht gefunden" :gruebel:

Bin also der Lösung noch nicht näher gekommen.

hoika 21. Jan 2009 19:00

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

DeddyH 21. Jan 2009 19:01

Re: Ansteuerung von Paradoxtabellen mit SQL
 
Statt Clear und Add könntest Du auch Text zuweisen.
Delphi-Quellcode:
sql.Text := 'INSERT INTO CDDVD (ID,Lagerort,Name,Monat,Jahr) VALUES (:ID,:Lagerort,:Name,:Monat,:Jahr';
[edit] Ich sehe gerade, dass im SQL-String die schließende Klammer fehlt. Ist das im Originalsource auch so? [/edit]

Abraxas 21. Jan 2009 19:14

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.

mkinzler 21. Jan 2009 19:38

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 01:25 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz