Entwickler-Ecke

Datenbanken - Selectanweisung mit WHERE Feld nicht leer


Krischa - Di 02.06.09 12:04
Titel: Selectanweisung mit WHERE Feld nicht leer
Hi,
ich brauche eine Selectanweisung die mir nur gefüllte Felder anzeigt. Bis her habe ich es folgendermaßen gemacht:

Delphi-Quelltext
1:
2:
3:
4:
query2.SQL.Text:='SELECT EAN FROM '+art1+' WHERE ART="'+prod[j].ian+'"';
query2.open;
if query2.FieldByName('EAN').Value<>NULL then         
  prod[j].pn:=query2.FieldByName'EAN').Value;query2.open;


Wie kann ich die Selectanweisung schreiben damit er mir gleich nur gefüllte Felder ausgibt. Das Feld EAN darf nicht leer sein.


Robert.Wachtel - Di 02.06.09 12:09


SQL-Anweisung
1:
SELECT EAN FROM artikelTabelle WHERE ART = :ArtikelNr AND EAN IS NOT NULL                    

Und bitte arbeite mit Parametern (Stichwort: SQL Injection).

Eine Angabe des verwendeten RDBMS wäre übrigens grundsätzlich angebracht.


Krischa - Di 02.06.09 12:12


Delphi-Quelltext
1:
query2.SQL.Text:='SELECT EAN FROM '+art1+' WHERE ART="'+prod[j].ian+'" AND EAN IS NOT NULL';                    


Funktioniert zwar die Abfrage aber er mekert wenn ich auf das Feld zugreifen will das nichts darin steht.

und was meinst du mit Parametern? (SQL-Anfänger)


Robert.Wachtel - Di 02.06.09 12:21

user profile iconKrischa hat folgendes geschrieben Zum zitierten Posting springen:
[...] Funktioniert zwar die Abfrage [...]

Ja, wo ist dann das Problem?

Zitat:
aber er mekert wenn ich auf das Feld zugreifen will das nichts darin steht.

Wer meckert wann und wo mit welcher Fehlermeldung nach dem Du was getan hast?

Zitat:
und was meinst du mit Parametern? (SQL-Anfänger)

http://lmgtfy.com/?q=delphi+query+parameter+sql+injection


Krischa - Di 02.06.09 12:25


Delphi-Quelltext
1:
2:
3:
4:
query2.SQL.Text:='SELECT EAN FROM '+art1+' WHERE ART="'+prod[j].ian+'" AND EAN IS NOT NULL';
query2.open;
prod[j].pn:=query2.FieldByName('EAN').Value;                  
query2.Close;

er meckert bei der dritten Zeile. Typ NULL konnte nicht in String formatiert werden. Daraus ziehe ich das das Feld EAN leer ist, was wiederum durch die Abfrage nicht sein dürfte. Die Artikelnummer gibt es mehrmals in der Datenbank aber nur eine hat eine EAN-Nummer (wegen Gültigkeitsdatum).

Zum Thema Injektion: Der SQL-Server läuft auf einem Lan und hat kein Zugang zum Internet. Es sollte also kein Problem geben.


Robert.Wachtel - Di 02.06.09 12:28

user profile iconKrischa hat folgendes geschrieben Zum zitierten Posting springen:
[...] er meckert bei der dritten Zeile. [...]

Wer ist er?

Zitat:
Typ NULL konnte nicht in String formatiert werden. Daraus ziehe ich das das Feld EAN leer ist, was wiederum durch die Abfrage nicht sein dürfte. [...]

Woher willst Du das wissen? Vielleicht hat die Abfrage ja keinen einzigen Datensatz zurückgeliefert. Diesn Fall fängst Du ja nicht ab.


Delphi-Quelltext
1:
if not queryMitTollemNamen.Eof then                    


Zitat:
Zum Thema Injektion: Der SQL-Server läuft auf einem Lan und hat kein Zugang zum Internet. Es sollte also kein Problem geben.

Famous last words...