Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Hilfe, ich ahb ein Problem mit einer Query und Edit-Feld (https://www.delphipraxis.net/18950-hilfe-ich-ahb-ein-problem-mit-einer-query-und-edit-feld.html)

tylix 26. Mär 2004 14:22


Hilfe, ich ahb ein Problem mit einer Query und Edit-Feld
 
Hi Leute,

ich hab ein sau blödes Problem.

Ich hab eine DB-connect auf eine ADABAS DB.
Die untere Abfrage funktioniert soweit.

Nur habe ich folgendes Problem, im Formular habe ich ein Edit-Feld.
In dieses Edit - Feld tippe ich das gewünschte Datum ein.

Ich weiß jetzt nicht, wie ich den edit - Text in das SQL-Statement einbauen muss, und die Klammern setzen muss.
Ich steh wie vor einer Wand. :wall: Mein Kopf raucht und alles grübeln :gruebel: hilft nix.
Könnt ihr mir bitte helfen.



Code:
dm.qry_akti2_selektieren.sql.clear;
dm.qry_akti2_selektieren.sql.add ('SELECT Dbadmin_person.ID ');
dm.qry_akti2_selektieren.sql.add (' FROM DBADMIN.PERSON Dbadmin_person, DBADMIN.BOGEN Dbadmin_bogen');
dm.qry_akti2_selektieren.sql.add (' WHERE (Dbadmin_person.ID = Dbadmin_bogen.PER_ID)');
dm.qry_akti2_selektieren.sql.add (' and dbadmin_bogen.status = 1');
dm.qry_akti2_selektieren.sql.add (' and dbadmin_person.sperre not in (''1'',''02'',''03'',''04'',''05'',''06'')');
dm.qry_akti2_selektieren.sql.add (' and dbadmin_person.id not in ');
dm.qry_akti2_selektieren.sql.add ('(select ID FROM DBADMIN.PERSON Dbadmin_person, DBADMIN.MERKMALE Dbadmin_merkmale where dbadmin_person.id = dbadmin_merkmale.mer_pad_id and dbadmin_merkmale.mer_merkmal = ''002'' and dbadmin_merkmale.mer_dat = [b][u][color=red]''2004-03-05''[/color][/u][/b])'); [b][color=red] <------ Dieses Datum soll durch den Edit.text ersetzt werden. [/color][/b]
dm.qry_akti2_selektieren.open;

Ist doch echt zum :kotz:

Dank euch

[edit=Sharky]Tags gesetzt Mfg, Sharky[/edit]

Robert_G 26. Mär 2004 14:50

Re: Hilfe, ich ahb ein Problem mit einer Query und Edit-Feld
 
Also ersteinmal...
Zitat:

Zitat von tylix
Ist doch echt zum :kotz:

... sowas gehört hier nun wirklich nicht hin :warn:

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;

tylix 26. Mär 2004 15:00

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

schon klar, bischen im wort vergriffen.

Gibts da nicht noch ne andere möglichkeit?

Gruß


Robert

Robert_G 26. Mär 2004 16:27

Re: Hilfe, ich ahb ein Problem mit einer Query und Edit-Feld
 
Was gefällt dir daran nicht?
Ich werde das Datumsproblem nicht 2 mal im gleichen Thread erklären. Der einzige vernünftige Weg ist ein Parameter (der EINZIGE! ).

Das SELECT-Statement habe ich noch etwas bereinigt, ich hatte beim ersten Post nur per search 'n replace die überlangen Tabellenaliase verändert und das Ganze durch einen Source formatter gejagt.
Die Personentabelle ist in deinem SubSELECT völlig unnütz, denn Mer_Pad_ID = Person.ID.
Außerdem glaube ich nicht, dass Person.Sperre ein Stringfeld ist (wenn sie nicht numerisch ist hapert es gewaltig am DB Design).

Das veränderte Statement:
Delphi-Quellcode:
    ...
    SQL.Text :=
      'SELECT Person.ID' + #10 +
      'FROM  DBAdmin.Person Person, DBAdmin.Bogen Bogen' + #10 +
      'WHERE (Person.ID = Bogen.PER_ID) And Bogen.status = 1 And' + #10 +
      '       Person.Sperre Not In (1, 2, 3, 4, 5, 6) And' + #10 +
      '       Person.ID Not In' + #10 +
      '       SELECT Mer_Pad_ID' + #10 +
      '       FROM  DBAdmin.Merkmale Merkm' + #10 +
      '       WHERE Merkm.mer_merkmal = :i_MerkMal And' + #10 +
      '              Merkm.Mer_Dat = :i_MerkDat)';
      ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz