2016-08-05 26 views
0

Wenn ich versuche, beide Spalte zu suchen, gibt es keinen Filter. Ich möchte 5 und 30.05.2016 in dbgrid auflisten.Delphi sql Suche mit beiden Spalte

adoquery1.Close; 
adoquery1.SQL.CLEAR; 
adoquery1.SQL.Add('select * FROM Sheet11 '); 
adoquery1.SQL.Add('where field9 like :blm and field12 like :blm1'); 
adoquery1.Parameters.ParamByName('blm').Value:='5'; 
adoquery1.Parameters.ParamByName('blm1').Value:='30.05.2016'; 
adoquery1.Open; 
+0

Was die Art der 'field9' ist? – Sami

Antwort

1

Also was genau ist die Frage da? Die Verwendung von Parametern ist richtig, ein String-Splicing wegen aller Arten von Zerbrechlichkeit und unerwarteten Nebenwirkungen besser nicht zu verwenden -

Und verwenden Sie die richtigen Datentypen!

adoquery1.SQL.Text := 'select * FROM Sheet11 ' + 
         'where (field9 = :_p_field9) ' + 
         ' and (field12 = :_p_field12)'; 
with adoquery1.Parameters do begin 
    ParamByName('_p_field9').AsInteger := 5; 
    ParamByName('_p_field12').AsDateTime := EncodeDate(2016, 05, 30); 
end; 
adoquery1.Open; 
+0

Dies ist eine bessere Lösung als meine (jetzt gelöscht). – Dsm

+0

@Dsm gut, vielleicht ist es, vielleicht ist es nicht. Ich verstehe immer noch nicht, was hier überhaupt das Problem ist? .. –

+0

gut Ihre Lösung ist sicherlich besser als meins. Was ist das Problem - mein - ich bin kein Experte in SQL, aber müssen Datumsfelder nicht in Anführungszeichen gesetzt werden? Ich würde erwarten, dass die ursprüngliche Abfrage "select * from sheet11 erzeugt, wobei field9 wie 5 und field 10 wie 30.05.2016". Aber vielleicht liege ich falsch ... – Dsm

1

Sie haben einen ziemlich schlechten SQL-Fehler. LIKE funktioniert nicht für andere Typen als Strings (CHAR, VARCHAR usw.). Es funktioniert nicht für Zahlen oder Daten. Sie suchen stattdessen nach =, für genaue Übereinstimmungen, oder BETWEEN, wenn Sie etwas zwischen zwei Werten möchten.

Dies sollte für Sie arbeiten:

adoquery1.Close; 
    adoquery1.SQL.CLEAR; 
    adoquery1.SQL.Add('select * FROM Sheet11 '); 
    adoquery1.SQL.Add('where field9 = :blm and field12 = :blm1'); 
    adoquery1.Parameters.ParamByName('blm').Value:= 5; // Notice no quotes 
    adoquery1.Parameters.ParamByName('blm1').Value:= '2016-05-30'; // Note no extra quotes 
    adoquery1.Open;