![]() |
In SQL Anweisung Feld Inhalt abfragen lassen
Morgen,
ich hab ein Code geschrieben der soweit auch funktioniert. Es ging darum das geschaut wird, ob ein Eintrag der in eine DB gespeichert werden soll, nicht möglich ist - weil Überschneidungen in den angeforderten PKWs zu Tag XX besteht. Das geht mit SQL und schaut so aus:
Delphi-Quellcode:
Nun, das ist nur ein einfaches Beispiel, um zu lernen wie es überhaupt funktionieren kann.
Query2.Close;
Query2.SQL.Clear; Query2.SQL.ADD ('SELECT * FROM "mainDB" WHERE dienst_pkw="Ford DM-162" and datum="08.01.2004"'); Query2.Active:=True; Alles funktioniert, in nem DBGRid las ich mir dann die entsprechenden Datensätze anzeigen. Jetzt muss der Code aber so verändert werden, dass ich nach WHERE dienst_pkw= nicht im Code sagen muss, was für ein Fahrzeug ausgewählt wurde. Das gleiche beim Datum. Also muss ich den Code noch so verändern, dass die Abfrage der Felder automatisch erfolgt und sich in den Code einsetzt. Die Fahrzeuge werden in einer DBLookupCombobox angegeben, das Datum über den DateTimePicker. Angaben wie WHERE dienst_pkw="FieldByName('Dienst_PKW')" funktionieren natürlich nicht, hab ich probiert :) . |
Re: In SQL Anweisung Feld Inhalt abfragen lassen
Ich habe bisher weder mit DBLookupCombo gearbeitet noch mit DateTimePicker aber mal generell:
Wenn du in einen String irgendwas einbinden willst, was erst zur Laufzeit bekannt ist (Variable, Text aus Combobox usw.) dann so :
Delphi-Quellcode:
sSql ist dabei ne String Variable. Du müsstest quasi nur textField1.text und wasweissich.text durch die Werte deiner beiden Controls ersetzen.
sSQL := 'SELECT * FROM myTable where myFeld = ' + textField1.Text + 'AND myField2 = ' + QuotedString(wasweissich.text)
Oder hab ich dein Problem missverstanden?? |
Re: In SQL Anweisung Feld Inhalt abfragen lassen
Zitat:
du hast das Problem richtig erkannt. Dein Programmcode sieht auch gut aus, hab das Beispielprogramm mal so verändert, dass die Daten aus normalen Edit Feldern abgegriffen werden. Hab dann sSQL als String deklariert, schaut nun so aus:
Delphi-Quellcode:
Nun mag Delphi aber nicht compilieren, ich bekomme immer die Aussage:
var
sSQL: String; procedure TForm1.Button1Click(Sender: TObject); begin Query2.Close; Query2.SQL.Clear; sSQL := 'SELECT * FROM "t:eDienstreisebuch\mainDBalt.dbf" where dienst_pkw =' + PKW.Text + 'AND datum = ' + Datum2.text + '; Query2.Active:=True; end; Zitat:
|
Re: In SQL Anweisung Feld Inhalt abfragen lassen
Versuchs mal so:
Delphi-Quellcode:
u.U. kannst du die Gänsefüsschen und Klammern auch weglassen :?:
var
sSQL: String; procedure TForm1.Button1Click(Sender: TObject); begin Query2.Close; Query2.SQL.Clear; sSQL := 'SELECT * FROM "t:eDienstreisebuch\mainDBalt.dbf" where dienst_pkw = "' + PKW.Text + '" AND datum = (' + Datum2.text +')'; Query2.sql.add(sSQL); Query2.Active:=True; end; schöne Grüße Sam |
Re: In SQL Anweisung Feld Inhalt abfragen lassen
In deinem Beispiel ist das allerletzte Hochkomma zuviel. Ka warum du das da hingemacht hast.
Deshalb denkt Delphi, da fängt nen neuer Teil vom String an, der aber nirgendwo endet. Lies dir am besten nochmal generelles zum Handling von Strings durch, mir scheint da fehlen dir noch ein paar Grundlegende Informationen. Und ohne sicheren Umgang mit Strings kommst du bei Datenbanken und SQL nicht weit. Ist nicht böse gemeint, sondern nur ein Rat :wink: P.S.: Denk dran, dass im SQL bei einem Vergleich von String-Datenbankfeldern die Strings in Hochkommata stehen müssen, was bei dir mindestens im Fall dienst_pkw so ist. Dafür am besten die Funktion QuotedString(PKW.Text) benutzen. Dann wird der String aus dem Textfeld direkt in Gänsefüsschen gepackt. |
Re: In SQL Anweisung Feld Inhalt abfragen lassen
BluesKid:
Thx, jetzt funktioniert es soweit. Smokey: Dein Rat fasse ich nicht böse auf. An sich muss ich noch sehr viel lernen, Strings und SQL gehört sicher mit dazu. Wenn ich jetzt z.B.: QuotedString(PKW.text) schreibe, sagt Delphi das QuotedString ein undefinierter Bezeichner sei. Soll ichs als String deklarieren? Aber gut, der Code funktioniert in der Forum:
Delphi-Quellcode:
Nur, und das ist mir vorher nicht aufgefallen, wenn jetzt kein Datensatz dazu passt - dann bricht das Programm ab und Delphi meint:
Query2.Close;
Query2.SQL.Clear; sSQL := 'SELECT * FROM "t:eDienstreisebuch\mainDBalt.dbf" where dienst_pkw = "' + PKW.Text + '" AND datum = "' + Datum2.text + '"'; Query2.sql.add(sSQL); Query2.Active:=True; Zitat:
wenn das jetzt eine If Abfrage wäre, hätte ich kein Problem - so könnte ich eben wenn nichts zutrift einfach einen anderen Weg weiterarbeiten lassen. Aber bei SQL bin ich so jungfräulich, dass mir die Lösung nicht einfällt. |
Re: In SQL Anweisung Feld Inhalt abfragen lassen
Hi LuckyStrike, eine ähnliche Problematik hatten wir hier schon einmal.
![]() |
Re: In SQL Anweisung Feld Inhalt abfragen lassen
Moin
Also da werd ich jetzt nicht ganz schlau draus... :wiejetzt: Was soll die offene Klammer vor PKW.text und warum hast du die Gänsefüsschen um den Abfrageausdruck für datum gemacht... imho müsste die Exception bei jedem Versuch die Abfrage zu öffnen kommen...is jetzt reine Spekulation aber : Zitat:
Mein Vorschlag: Schau dir die Feldtypen in deiner DB an .. ich rate mal ins Blaue, aber ich denke PKW.txt musst du (siehe Post Smokey) mit Hochkommata übergeben und den Wert fürs Datum mit Klammern... Verbesserungen erwünscht :zwinker: schöne Grüße Sam |
Re: In SQL Anweisung Feld Inhalt abfragen lassen
Zitat:
Wenn ich keine Anführungsstriche um Datum setze, dann läßt es sich nicht compilieren. Da standen im Codebeispiel von eich Klammern. Die hab ich dann halt ausgetauscht, denn mit den Klammern gings auch nicht. So nun hab ich mal noch n wenig getestet, es schaut jetzt so aus - wenn im Feld Datum nichts eingetragen ist, oder nur zB. 12.12. dann bricht das Programm ab. Wenn dort irgendein richtiges ganzes Datum eingetragen wurde, egal ob es das in der DB gibt oder nicht - dann bricht das Programm nicht ab! So wies sein soll. Der Grid, in dem dann das Ergebniss ausgegeben wird, wird nur mit einer leeren Zeile gefüllt. Das interessante, es ist egal ob etwas in dem Feld für PKW steht, da kann auch nichts stehen. Das programm bricht nicht ab. So wie es sein soll. Nun könnte ich schon damit leben wenn es so bleibt, denn ein Datum gibt es immer - bei jedem Datensatz, ein Fahrzeug nicht. Bin euch wirklich dankbar für die Hilfe!! Was nicht heißen soll das dieser Thread damit beendet ist, ich muss noch n paar Dinge wissen. |
Re: In SQL Anweisung Feld Inhalt abfragen lassen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:23 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