Entwickler-Ecke

Datenbanken - Sql Suche


purehate - Mo 13.03.06 21:00
Titel: Sql Suche
Hi!

Ich versuche mithilfe von Sql auf meine Paradox Tabelle zuzugreifen. Jedenfalls soll er in der film.db in der Spalte FilmName nach einem Namen suchen der in edit1 steht. Nur will das nit so wirklich...



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button2Click(Sender: TObject);
begin

Query1.Active := False;
Query1.Sql.Clear;
Query1.Sql.Add('Select * From film where FilmName like '+edit1.text);
Query1.Active := True;

end;



mfg


MSCH - Mo 13.03.06 21:05

versuchs mal damit. Like erwartet %text



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Button2Click(Sender: TObject);  
//   Query1.Sql enthält 'Select * From film where FilmName like :Param'  
begin  
  Query1.Active := False;  
  Query1.parameters.paramByName('Param').value:='%'+edit1.text;
  Query1.Active := True;  
end;

grez
msch


purehate - Mo 13.03.06 21:17

Also wenn ich


Delphi-Quelltext
1:
Query1.params.paramByName('Param').value:='%'+edit1.text;                    


nutze passiert scheinbar nichts. Bekomme keine Fehlermeldung, aber er springt immer noch nicht zum eingegebenen Film...

mfg


mkinzler - Mo 13.03.06 21:28

Noch besser wäre es die

Delphi-Quelltext
1:
Query1.parameters.paramByName('Param').value:='%'+edit1.text+'%';                    

zu schreiben.
Dann findet er alle Einträge die den Suchstring enthalten, und nicht nur die, die auf den Suchstring enden.


cherry - Di 14.03.06 09:23

Also ich mach das immer so und es klappt! (bei mir jedenfalls)


Delphi-Quelltext
1:
Query1.Sql.Add('SELECT * FROM film WHERE FilmName LIKE ''' + edit1.text + '%''');                    


alzaimar - Di 14.03.06 09:41

Wenn man mit Parametern arbeitet (was einfach einfacher ist), dann muss man die Parameter im SQL-Text aber auch angeben:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
MyQuery.SQL.Text := 'Select * from Foo Where Field1 =:MyField and Field2 like :AnotherField';
MyQuery.Parameters.ParamByName ('MyField').DataType := ftInteger;
MyQuery.Parameters.ParamByName ('Another').DataType := ftString;
// Das o.g. kann man auch zur Designzeit einstellen
MyQuery.Parameters.ParamValues ['MyField'] := 12345;
MyQuery.Parameters.ParamValues ['AnotherField'] := '%'+Edit1.Text;
MyQuery.Active := True;

Klar, handgebissene SQL-Statements sind kompakt, aber spätestens beim Formatieren eines Floats oder Datums wird man Probleme bekommen, weil jeder PC und jede DB das anders macht bzw. erwartet. FloatToStr liefert vielleicht ein Komma als Dezimaltrennzeichen, die DB erwartet jedoch einen Punkt. Und wie ist das beim Datum? Mit Quotes? Ohne? DD-MM-YYYY, oder MM/DD/YYYY, oder DD.MMM.YY, oder wie?

Bei einer Verwendung einer parametrisierten Abfrage gibt man das Formatierungsproblem demjenigen, der was davon versteht, nämlich dem Provider/DB-Treiber o.ä.