AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi In SQL Anweisung Feld Inhalt abfragen lassen
Thema durchsuchen
Ansicht
Themen-Optionen

In SQL Anweisung Feld Inhalt abfragen lassen

Ein Thema von LuckyStrike4life · begonnen am 8. Jan 2004 · letzter Beitrag vom 13. Jan 2004
Antwort Antwort
Seite 1 von 3  1 23      
LuckyStrike4life

Registriert seit: 22. Jul 2003
Ort: SN
105 Beiträge
 
Delphi 5 Enterprise
 
#1

In SQL Anweisung Feld Inhalt abfragen lassen

  Alt 8. Jan 2004, 09:49
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:
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;
Nun, das ist nur ein einfaches Beispiel, um zu lernen wie es überhaupt funktionieren kann.

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 .
- ich kann doch wirklich nichts -
  Mit Zitat antworten Zitat
Benutzerbild von Smokey
Smokey

Registriert seit: 10. Nov 2003
Ort: Puerto de la Cruz
158 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: In SQL Anweisung Feld Inhalt abfragen lassen

  Alt 8. Jan 2004, 10:01
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 :

sSQL := 'SELECT * FROM myTable where myFeld = ' + textField1.Text + 'AND myField2 = ' + QuotedString(wasweissich.text) sSql ist dabei ne String Variable. Du müsstest quasi nur textField1.text und wasweissich.text durch die Werte deiner beiden Controls ersetzen.

Oder hab ich dein Problem missverstanden??
Greif dir ein gutes Stück Fleisch auf deinem Weg nach draussen !!!
  Mit Zitat antworten Zitat
LuckyStrike4life

Registriert seit: 22. Jul 2003
Ort: SN
105 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: In SQL Anweisung Feld Inhalt abfragen lassen

  Alt 8. Jan 2004, 10:51
Zitat von Smokey:
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 :

sSQL := 'SELECT * FROM myTable where myFeld = ' + textField1.Text + 'AND myField2 = ' + QuotedString(wasweissich.text) sSql ist dabei ne String Variable. Du müsstest quasi nur textField1.text und wasweissich.text durch die Werte deiner beiden Controls ersetzen.

Oder hab ich dein Problem missverstanden??
Danke,
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:
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;
Nun mag Delphi aber nicht compilieren, ich bekomme immer die Aussage:
Zitat:
[Fehler] Unit1.pas(46): Nicht abgeschlossener String
[Fehler] Unit1.pas(47): Operator oder Semikolon fehlt
...
- ich kann doch wirklich nichts -
  Mit Zitat antworten Zitat
Benutzerbild von BluesKid
BluesKid

Registriert seit: 2. Sep 2003
Ort: NRW
133 Beiträge
 
Delphi 2005 Professional
 
#4

Re: In SQL Anweisung Feld Inhalt abfragen lassen

  Alt 8. Jan 2004, 11:06
Versuchs mal so:

Delphi-Quellcode:
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;
u.U. kannst du die Gänsefüsschen und Klammern auch weglassen

schöne Grüße

Sam
  Mit Zitat antworten Zitat
Benutzerbild von Smokey
Smokey

Registriert seit: 10. Nov 2003
Ort: Puerto de la Cruz
158 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: In SQL Anweisung Feld Inhalt abfragen lassen

  Alt 8. Jan 2004, 11:23
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


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.
Greif dir ein gutes Stück Fleisch auf deinem Weg nach draussen !!!
  Mit Zitat antworten Zitat
LuckyStrike4life

Registriert seit: 22. Jul 2003
Ort: SN
105 Beiträge
 
Delphi 5 Enterprise
 
#6

Re: In SQL Anweisung Feld Inhalt abfragen lassen

  Alt 8. Jan 2004, 12:21
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:
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;
Nur, und das ist mir vorher nicht aufgefallen, wenn jetzt kein Datensatz dazu passt - dann bricht das Programm ab und Delphi meint:
Zitat:
Im Projekt soundso.exe ist eine Exception der Klasse EDBEngineError aufgetreten. Meldung: 'Keine Übereinstimmung der Typen im Ausdruck'. Prozeß...
Klare Sache,
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.
- ich kann doch wirklich nichts -
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#7

Re: In SQL Anweisung Feld Inhalt abfragen lassen

  Alt 8. Jan 2004, 12:30
Hi LuckyStrike, eine ähnliche Problematik hatten wir hier schon einmal.
Hier im Forum suchenfreien AND Belegungszeitraum AND ermitteln - Treffnix's Lösung war die richtige.
  Mit Zitat antworten Zitat
Benutzerbild von BluesKid
BluesKid

Registriert seit: 2. Sep 2003
Ort: NRW
133 Beiträge
 
Delphi 2005 Professional
 
#8

Re: In SQL Anweisung Feld Inhalt abfragen lassen

  Alt 8. Jan 2004, 12:35
Moin

Also da werd ich jetzt nicht ganz schlau draus...

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:
Im Projekt soundso.exe ist eine Exception der Klasse EDBEngineError aufgetreten. Meldung: 'Keine Übereinstimmung der Typen im Ausdruck'. Prozeß...
Diese Meldung besagt doch nur, dass der Typ eines Feldes in deiner DB und der Typ den du im SQL-Statement angegeben hast nicht übereinstimmen...denke nich dass das was damit zu tun hat ob ein Eintrag vorhanden is oder nich...(dann wäre recordcount einfach 0 aber die Abfrage geht trotzdem)

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

schöne Grüße

Sam
  Mit Zitat antworten Zitat
LuckyStrike4life

Registriert seit: 22. Jul 2003
Ort: SN
105 Beiträge
 
Delphi 5 Enterprise
 
#9

Re: In SQL Anweisung Feld Inhalt abfragen lassen

  Alt 8. Jan 2004, 13:15
Zitat von BluesKid:
Moin

Also da werd ich jetzt nicht ganz schlau draus...

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:
Im Projekt soundso.exe ist eine Exception der Klasse EDBEngineError aufgetreten. Meldung: 'Keine Übereinstimmung der Typen im Ausdruck'. Prozeß...
Diese Meldung besagt doch nur, dass der Typ eines Feldes in deiner DB und der Typ den du im SQL-Statement angegeben hast nicht übereinstimmen...denke nich dass das was damit zu tun hat ob ein Eintrag vorhanden is oder nich...(dann wäre recordcount einfach 0 aber die Abfrage geht trotzdem)

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

schöne Grüße

Sam
Also die Klammer war nur ein Fehler, so würds natürlich nicht funktionieren.
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.
- ich kann doch wirklich nichts -
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#10

Re: In SQL Anweisung Feld Inhalt abfragen lassen

  Alt 8. Jan 2004, 13:29
Zitat von LuckyStrike4life:
Wenn ich keine Anführungsstriche um Datum setze, dann läßt es sich nicht compilieren.
Doch, mit doppelten Hochkommas! Und das ist genau das, was QuotedStr auch macht. Es gibt Datenbanken, die akzeptieren kein " als Klammerung für Zeichenketten!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 13:34 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