Einzelnen Beitrag anzeigen

Robert_G
(Gast)

n/a Beiträge
 
#2

Re: Hilfe, ich ahb ein Problem mit einer Query und Edit-Feld

  Alt 26. Mär 2004, 14:50
Also ersteinmal...
Zitat von tylix:
Ist doch echt zum
... sowas gehört hier nun wirklich nicht hin

Du hattest Delphi code gepostet, nicht SQL. Außerdem fehlt der End tag. Kannst du bitte vor deinen code ein [ delphi ] und danach [ /dephi ] tippen (ohne Leerzeichen)?

Wenn du deinem Statement veränderliche Werte übergeben willst, dann gehören die in einen Parameter.

Bei Datumsfeldern ist das absolute Pflicht!!!

Ich weiß nicht, wie oft ich das noch predigen muss...
Es ist doch total blauäugig anzunehmen, dass DB und Windows das gleiche Format zur implizierten Umwandlung von Text zu Datum (und andersherum) verwenden!
Packe das Ganze in eine SQL Variable (Parameter), der du den Typ Date gibst. Erst dann hat die DB keine Möglichkeit das Datum falsch zu interpretieren.
Standardfehler ist z. Bsp. die Vertauschung von Monat und Tag.

Als Eingabefeld für das Datum bietet sich ein DateTimePicker an.


Die Abfrage würde dann etwa so aussehen:

Delphi-Quellcode:
  With DM.Qry_Akti2_Selektieren Do
  Begin
    SQL.Text :=
      'SELECT Person.ID' + #10 +
      'FROM DBAdmin.Person Person, DBAdmin.Bogen Bogen' + #10 +
      'WHERE (Person.ID = Bogen.PER_ID) And Bogen.status = :i_BogenStatus And' + #10 +
      ' Person.Sperre Not In (''01'', ''02'', ''03'', ''04'', ''05'', ''06'') And' + #10 +
      ' Person.ID Not In' + #10 +
      ' SELECT ID' + #10 +
      ' FROM DBAdmin.Person s_Pers, DBAdmin.Merkmale Merkm' + #10 +
      ' WHERE s_Pers.ID = Merkm.Mer_Pad_ID And Merkm.mer_merkmal = :i_MerkMal And' + #10 +
      ' Merkm.Mer_Dat = :i_MerkDat)';
    // Parse Statement um Variablen zu erkennen
    Prepared := True;
    // Parameterzuweisung
    With Parameters Do
    Begin
      ParamByName('i_BogenStatus').Value := 1;
      ParamByName('i_MerkMal').Value := '002';
      ParamByName('i_MerkDat').DataType := ftDate;
      ParamByName('i_MerkDat').Value := IgendeinDateTimePicker.Date;
    End;
  End;
  // Ausführen
  Open;
  Mit Zitat antworten Zitat