AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL Query Variable in INSERT INTO VALUES Anweisung
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Query Variable in INSERT INTO VALUES Anweisung

Ein Thema von germanos · begonnen am 4. Apr 2009 · letzter Beitrag vom 4. Apr 2009
Antwort Antwort
germanos

Registriert seit: 3. Apr 2009
Ort: Xanten
16 Beiträge
 
#1

SQL Query Variable in INSERT INTO VALUES Anweisung

  Alt 4. Apr 2009, 10:24
Datenbank: Paradox • Zugriff über: ODBC
Hallo,
ich möchte mit folgendem Quellcode Daten in eine Tabelle übergeben. Bei den 4 EDIT.Texten geht es ohne Problem. Die Spalten der Tabelle sind wie folgt formatiert:
E2.text=INTEGER; E1.Text=INTEGER; MEDatum.text=DATE; EdText.Text=ALPHA
Der problematische Teil ist EdPreis.Text. Hier ist die Tabellenspalte CURRENCY und ich bekomme die Daten nicht untergebracht.

Hier der Quelltext:

procedure TForm1.EdPreisKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin

if (Key=VK_Return) then begin
n:=StrToCurr(EdPreis.Text);
Query1.SQL.Clear;
Query1.SQL.Add('INSERT INTO hb_beschreib.db(monat,NkontoID,Datum,Beschreibung, Preis)');
Query1.SQL.Add('VALUES('''+E2.text+''','''+E1.Text +''','''+MEDatum.text+''','''+EdText.Text+''','''+ EdPreis.Text+''')');


Query1.ExecSQL;
Schreiben; //Ist eine Procedur zum Ausfüllen des DBGrid und geht problemlos
end;
end;

Für schnelle Hilfe bin sehr dankbar

Peter
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: SQL Query Variable in INSERT INTO VALUES Anweisung

  Alt 4. Apr 2009, 10:33
Hallo und Willkommen in der DP ,
würdest Du Quellcode bitte künftig in Delphi-Tags einschließen, dann ist er besser zu lesen, Danke. Und zu Deinem Problem: versuch es mal mit SQL-Parametern. Beispiel:
Delphi-Quellcode:
Query.SQL.Text := 'INSERT INTO Tabelle(Stringfeld,IntegerFeld) VALUES(:str,:int)';
Query.ParamByName('str').Value := 'Hallo';
Query.ParamByName('int').Value := 10;
Query.ExecSQL;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#3

Re: SQL Query Variable in INSERT INTO VALUES Anweisung

  Alt 4. Apr 2009, 10:38
Hallo und ebenfalls willkommen,

Detlef war schneller als ich und hat alles Wesentliche gesagt. Nur noch als Erläuterung: Du hast Text (nämlich den eigentlichen SQL-Befehl) und Daten (nämlich die Werte) vermischt und dann auch noch die (nur bei Text nötigen) Gänsefüßchen einbauen müssen. Mit Parametern ersparst du dir den ganzen Aufwand und lässt dies vom DB-Treiber (hier: Odbc) erledigen.

Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: SQL Query Variable in INSERT INTO VALUES Anweisung

  Alt 4. Apr 2009, 10:40
Ergänzend zu Jürgen sei noch gesagt, dass man sich bei Verwendung von Parametern so "ganz nebenbei" auch vor SQL-Injection schützt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
germanos

Registriert seit: 3. Apr 2009
Ort: Xanten
16 Beiträge
 
#5

Re: SQL Query Variable in INSERT INTO VALUES Anweisung

  Alt 4. Apr 2009, 11:37
Hallo und danke für die schnelle Anrwort.
Leider bin ich erst seid ca. 2 Wochen mit Delphi beschäftigt und bin deshalb absolutes Greenhorn.
So kenne ich Ausdrücke und Bezeichnungen noch nicht. Dennoch möchte ich nicht aufgeben.

Zum Text:

Wie könnte in meinem Beispiel die Lösung aussehen? Die Lösung, die ich benutzt habe, fand ich auch nur in einem Forum. Ich habe sie einfach übernommen.

Ich hoffe, ich bin nicht zu anstrengend, aber mit 56 geht schon alles ein wenig langsamer.

Nochmals vielen Dank

Peter
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: SQL Query Variable in INSERT INTO VALUES Anweisung

  Alt 4. Apr 2009, 11:47
Mal aus dem Kopf, ich hoffe, das stimmt so:
Delphi-Quellcode:
procedure TForm1.EdPreisKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin

  if (Key=VK_Return) then begin
    n:=StrToCurr(EdPreis.Text);
    Query1.SQL.Clear;
    Query1.SQL.Add('INSERT INTO hb_beschreib.db(monat,NkontoID,Datum,Beschreibung,Preis)');
    Query1.SQL.Add('VALUES(:E2,:E1,:MEDatum,:EdText,:EdPreis)');

    Query1.ParamByName('E2').Value := StrToInt(E2.Text);
    Query1.ParamByName('E1').Value := StrToInt(E1.Text);
    Query1.ParamByName('MEDatum').Value := StrToDate(MEDatum.Text);
    Query1.ParamByName('EdText').Value := EdText.Text;
    Query1.ParamByName('EdPreis').Value := n;


    Query1.ExecSQL;
    Schreiben; //Ist eine Procedur zum Ausfüllen des DBGrid und geht problemlos
  end;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
germanos

Registriert seit: 3. Apr 2009
Ort: Xanten
16 Beiträge
 
#7

Re: SQL Query Variable in INSERT INTO VALUES Anweisung

  Alt 4. Apr 2009, 15:57
Hallo DeddyH,

ich habe jetzt den Code probiert. Leider bekomme ich bei den ersten beiden EDIT(ShortEdit) und bei dem letzten EDIT(Currency) die Fehlermeldung "Keine Übereinstimmung der Typen im Ausdruck".
Ich habe jeden einzelnen Wert alleine übergeben, um den "Bösewicht" zu entlarven. Bei meinem ersten Entwurf kam nur bei dem letzten Wert eine Fehlermeldung.

Vielleicht gibt es eine Kleinigkeit, die ich einfach übersehe.

Schon jetzt Dank für die Hilfe,

Peter
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#8

Re: SQL Query Variable in INSERT INTO VALUES Anweisung

  Alt 4. Apr 2009, 16:37
Hallo Peter,

vielleicht solltest du nicht nur die Fehlermeldung wiederholen, sondern auch selbst nachdenken und probieren, woran der Fehler liegen könnte.

Zu E1 und E2: Bei der ersten Frage hast du gesagt, dass es sich um Integer handelt; jetzt sprichst du von ShortEdit. Was gilt denn nun? StrToInt liefert, wie der Name sagt, einen Integer als Ergebnis. Vielleicht muss der noch explizit in einen Short konvertiert werden?

Zu Currency: StrToCurr hat gewisse Forderungen, wie der String auszusehen hat; siehe Delphi-Hilfe. Vielleicht ist die eine oder andere Bedingung nicht erfüllt?

Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
germanos

Registriert seit: 3. Apr 2009
Ort: Xanten
16 Beiträge
 
#9

Re: SQL Query Variable in INSERT INTO VALUES Anweisung

  Alt 4. Apr 2009, 17:45
Hallo Detlef,
es ist richtig. Nur hatte ich die Tabelle in der Datenbankoberfläche angelegt. Hier standen mir nur die Feldtypen Integer (kurz) oder Integer (lang) zur Verfügung. Ich habe mich für kurz entschieden. Das funktionierte nicht. Ich habe die ganze Tabelle noch einmal mit SQL angelegt und hier Feld INTEGER angegeben. Das klappt nun. Das Feld Preis hat jetzt den Typ NUMERIC und mit StrToFloat(EdPreis.Text) übergeben. Das klappt jetzt auch!!??

Ich habe in den letzten Tagen eine Menge Hilfen von Delphi, auch aus dem WEB gelesen. Verstehen kann ich es meistens nach einem Beispiel. Und die stehen in der Hilfe von Delphi nicht immer zur Verfügung.

Deshalb danke ich nochmals für die Geduld mit mir.

Viele Grüße

Peter
  Mit Zitat antworten Zitat
germanos

Registriert seit: 3. Apr 2009
Ort: Xanten
16 Beiträge
 
#10

Re: SQL Query Variable in INSERT INTO VALUES Anweisung

  Alt 4. Apr 2009, 17:47
Hallo Jürgen,
es ist richtig. Nur hatte ich die Tabelle in der Datenbankoberfläche angelegt. Hier standen mir nur die Feldtypen Integer (kurz) oder Integer (lang) zur Verfügung. Ich habe mich für kurz entschieden. Das funktionierte nicht. Ich habe die ganze Tabelle noch einmal mit SQL angelegt und hier Feld INTEGER angegeben. Das klappt nun. Das Feld Preis hat jetzt den Typ NUMERIC und mit StrToFloat(EdPreis.Text) übergeben. Das klappt jetzt auch!!??

Ich habe in den letzten Tagen eine Menge Hilfen von Delphi, auch aus dem WEB gelesen. Verstehen kann ich es meistens nach einem Beispiel. Und die stehen in der Hilfe von Delphi nicht immer zur Verfügung.

Deshalb danke ich nochmals für die Geduld mit mir.

Viele Grüße

Peter
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:29 Uhr.
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