| Autor |
Beitrag |
Arne Danikowski
      
Beiträge: 194
|
Verfasst: Fr 29.08.08 17:09
Hallo, ich versuche mich grade an Queryabfragen.
Kann mir einer sagen warum forgende Abfrage zu einer Fehlermeldung führt:
Delphi-Quelltext 1: 2:
| Lagerdata.ADOEingangQuery.SQL.Text:=('Select * From Eingang Where Eingangsnummer=' +dbedit45.text); Lagerdata.ADOEingangQuery.Open; |
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Fr 29.08.08 17:27
Was für ein Fehler?
Delphi-Quelltext 1:
| Lagerdata.ADOEingangQuery.SQL.Text:='Select * From Eingang Where Eingangsnummer=' +dbedit45.text; |
_________________ Markus Kinzler.
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 29.08.08 17:33
kann man so, ohne kristallkugel nicht sagen...
da braucht man (a) mehr code und (b) die tabellendeklaration und (c) die fehlermeldung...
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Fr 29.08.08 20:04
Lustig, ein Quiz. Au Fein.  Hier die möglichen Antworten
A - Es gibt gar keine Datenbank
B - Delphi ist nicht installiert
C - dbedit45.text enthält nichtnumerische Zeichen
D - Die Welt ist eine Scheibe
So, den Telefonjoker hast du noch, 50:50 auch. Und?
_________________ Na denn, dann. Bis dann, denn.
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Fr 29.08.08 20:06
Das Publikum hat er ja hiermit schon gefragt 
_________________ Markus Kinzler.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 29.08.08 20:18
Lösungsmöglichkeiten:
A) Use Infinite Inprobability Drive
B) Use Prepared Statements
C) Use Proper Escaping
D) Use Brain 1.0
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Arne Danikowski 
      
Beiträge: 194
|
Verfasst: Mo 01.09.08 10:13
Hatte nicht gedacht dass das Quizz so schwer ist.
- Ich habe eine Access Datenbank (jep die Datenbank ist vorhanden) mit einer Tabelle (eigentlich sogar mehrere) huchu
- Ich arbeite mit Delphi 2007 (ist sogar installiert)
- enthält keine nichtnummerischen Zeichen (geht nicht das Feld ist ein AutoFeld Nummersich per Zufall)
- definitiv keine Scheibe nur bei Terry Pratchett
ich habe aber immer wieder ähnliche Probleme hier noch ein Beispiel. Ich möchte eine Tabelle nach dem Inhalt in einem edit Text Feld durchsuchen.
Die Ergebnisse sollen in enem Grid angezeigt werden.
Delphi-Quelltext 1: 2:
| lagerdata.ADOArtikelQuery.SQL.Text:=('select * from artikel where Seriennummer= '+seriensuchedit.text); lagerdata.ADOArtikelQuery.open; |
Die Tabelle in der Datenbank heißt = artikel
die zu filternde Spalte = Seriennummer
ich möchte nur Dtaensätze anzeigen, die mit dem Inhalt in seriensuchedit.text übereinstimmen.
und hier die Fehlermeldung : Fehlender Operator in Abfrageausdruck 'Seriennummer=" aufgetreten.
|
|
baka0815
      
Beiträge: 489
Erhaltene Danke: 14
Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
|
Verfasst: Mo 01.09.08 10:32
Klingt als sei "seriensuchedit.text" ein Leerstring, also ''
Damit sieht das SQL wie folgt aus: select * from artikel where Seriennummer= und da fehlt dann halt einfach was.
Ich würde aber Punkt B von BenBE beherzigen und Prepared Statements verwenden.
Dann sieht das SQL z.B. so aus: select * from artikel where Seriennummer=:SerienNr.
Über lagerdata.ADOArtikelQuery.SQL.ParamByName('SerienNr').AsInteger := 4711 kannst du dem ganzen dann den Wert zuweisen.
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mo 01.09.08 10:33
Hui, dann wirds lustig.
Gib die Query mal in eine Textdatei aus
Delphi-Quelltext 1: 2: 3: 4:
| lagerdata.ADOArtikelQuery.SQL.Text:='select * from artikel where Seriennummer= '+seriensuchedit.text; lagerdata.ADOArtikelQuery.SQL.SaveToFile('c:\Foobar.txt'); lagerdata.ADOArtikelQuery.open; |
Öffne die Textdatei, per Copy & Paste in Access reinschnipseln und dann schauen.
Wenn das nicht hilft:
DB leeren, packen und hier reinstellen. Kriegen wir schon hin. Auch wenn es nix mit Multiple-Choice und der Millionenfrage wird.
Ach, und die Sache mit den 'prepared Statements' ist auf jeden Fall besser, als eine per Hand zusammengebastelte Query.
_________________ Na denn, dann. Bis dann, denn.
|
|
Arne Danikowski 
      
Beiträge: 194
|
Verfasst: Mo 01.09.08 10:45
Ich hab das nochmal ausprobiert in der Textdatei steht dann zum Beispiel:
select * from artikel where Seriennummer= 1
In Access und auch in Delphi bekomme ich folgende Fehlermeldung:
"Datentypen in Kreterienausdruck unverträglich"
|
|
Robert.Wachtel
      
Beiträge: 895
Erhaltene Danke: 7
Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
|
Verfasst: Mo 01.09.08 10:57
Nun, ich würde sagen, es scheint so als wären die Datentypen im Kriterienausdruck unverträglich.  Wie lautet das DDL-Statement der Spalte "Seriennummer"?
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mo 01.09.08 10:58
Gut, und nun noch die gepackte Access-DB (kann auch leer sein) als ZIP. Alternativ Access öffnen, in der Tabellenbeareitung das Feld 'Seriennummer' auswählen und das als Screenshot hier einhängen.
Das Feld 'Seriennummer' ist vermutlich nicht numerisch.
_________________ Na denn, dann. Bis dann, denn.
|
|
Arne Danikowski 
      
Beiträge: 194
|
Verfasst: Mo 01.09.08 11:04
Das mit den prepared Statements gestaltet sich schwierig, da mein ADOQuery kein Opjekt von ParamByName kennt.
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mo 01.09.08 11:08
_________________ Na denn, dann. Bis dann, denn.
|
|
Arne Danikowski 
      
Beiträge: 194
|
Verfasst: Mo 01.09.08 11:40
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mo 01.09.08 11:49
Das Feld 'Seriennummer' ist ein Text und daher musst Du auch mit einem Text vergleichen. Nimm die parametrierten Queries, dann passieren solche Geschichten nicht. ADO wird die Query dann automatisch korrekt formatieren.
_________________ Na denn, dann. Bis dann, denn.
|
|
Arne Danikowski 
      
Beiträge: 194
|
Verfasst: Mo 01.09.08 12:35
Erst einmal vielen Dank für Deine Gedult mit mir.
Ich bastle grade so an den paramentierten SQL Abfragen rum da geschieht es plötzlich: Fehler !!
Komm mir schon blöd vor aber ich hab noch den
Publikumsjoker.
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| Var suche:String; suche:seriensuchedit.text .. .. lagerdata.ADOEingangQuery.SQL.Text:= 'SELECT Seriennummer FROM Eingang WHERE Seriennummer = :seriennr'; |
so weit so gut aber bei.
Delphi-Quelltext 1:
| lagerdata.ADOEingangQuery.Parameters.ParamByName('seriennr').AsString:=suche; |
gibt es in meinem Query kein Objekt für AsString erkennt der nicht.
Soweit ich das verstanden habe muss man doch dem ParamByName einen Datatype zuweisen oder nicht?
Wenn ich statt ASString Value einsetzte (das Kennt er zumindestens) dann bekomme ich kein Fehlermeldung:
Aber es funktioniert auch nicht ich bekomme keine Daten.
Zuletzt bearbeitet von Arne Danikowski am Mo 01.09.08 12:39, insgesamt 1-mal bearbeitet
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mo 01.09.08 12:38
Delphi-Quelltext 1:
| lagerdata.ADOWareneingangQuery.Parameters.ParamByName('seriennr').DataType := ftString; |
_________________ Na denn, dann. Bis dann, denn.
|
|
Arne Danikowski 
      
Beiträge: 194
|
Verfasst: Mo 01.09.08 12:40
ftString = undefinierter Bezeichner
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mo 01.09.08 12:46
F1 = Delphi Hilfe. Und dann die Unit einbinden, in der dieser Wert definiert wurde (DB.PAS, denke ich).
_________________ Na denn, dann. Bis dann, denn.
|
|