Autor Beitrag
WIng2005
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 49



BeitragVerfasst: Do 16.02.06 11:09 
Hallo,

bin eher ein Noop, was die Delphiprogrammierung angeht. Scheiter irgendwie schon an folgendem:

Ich schreibe einen "Geburtstagsreminder", der bei jedem Systemstart in seiner Datenbank schaut, ob heute +- 3 Tage jemand Geburtstag hat oder hatte.
Die Ergebnisse sollen in 3 Listbox-Komponenten angezeigt werden (hatte, heute , wird haben). Wenn ich in der DB die Geburtstage eingebe, enthalten diese
ja auch das Geburtsjahr (Typ: Datum). Die Suche nach dem Geburtstag, kann dieses jedoch nicht enthalten. Hat jemand von euch eine Idee, wieso

Form2.Table1.Locate('Geburtstag',datum2,[lopartialkey])

nicht funktioniert, wenn in 'Geburtstag' meine Daten und in Datum2 bspw. "16.02" (datum2:= formatdatetime('dd.mm',(now)) steht?
Vergebe ich Datum2 bspw. "16.02.85" wird dieser Eintrag in der DB gefunden.
Wäre euch echt dankbar.....sitz da schon ein paar Nächte dran.

MFG
Steffen
afk
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 102

Win 2K, Win XP
Delphi 2006 Arch., Delphi 6 Ent., MS-SQL 2005 & 2000
BeitragVerfasst: Do 16.02.06 11:44 
Wenn die Datenbankspalte für den Geburtstag ein Datumstyp ist, dann wird das Datum nicht im String-Format gespeichert, sondern normalerweise als Fließkammazahl, in die das Datum hineinkodiert ist. Daher kann so ein Vergleich gar kein vernünftiges Ergebnis bringen.

Wenn die Datenbank SQL beherscht, dann ist es in jedem Falle besser, das per SQL-Query zu lösen und die Arbeit vom DBMS machen zu lassen. Die sollte dann entsprechende Funktionen zur Verfügung stellen.

Gruß Axel

_________________
Man muß sparn wo mn knn !
WIng2005 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 49



BeitragVerfasst: Do 16.02.06 12:49 
Ich dachte an eine Art Platzhalter. Die Variable datum2 so umgewandelt, dass nach "16.02.****" gesucht wird.
Ansonsten, müßte ich die Spalte Geburtstag als String mit 10 Zeichen Umwandeln. Das Ausschnittsweise Suchen, sollte doch dann
mit [lopartialkey] funktionieren, oder?


MFG
Steffen
WIng2005 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 49



BeitragVerfasst: Do 16.02.06 14:36 
Mmmh, habe mal die String-Version getestet, funzt. Fraglich ist jedoch, wie man mehrfacheinträge finden, also weitersuchen kann.

Vielen Dank für die Hilfe.
MFG
Steffen
uwewo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 154



BeitragVerfasst: Do 16.02.06 20:56 
Hi,

Axel hat recht probiere es mit SQL

Bsp MySQL:

select Name, Datum
from Tabelle
where Datum between curdate()-3 and curdate()+3

sollte Dir die gewünschten Ergebnise bringen

Uwe
WIng2005 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 49



BeitragVerfasst: Do 16.02.06 23:08 
Na dann...
bin grad erst am Lernen. Hatte mir mal 3 Bücher gekauft und wollte mal was Eigenes machen.
MySQL kommt erst noch...
Aber vielen Dank für den Tip. Hatte es jetzt erstmal "provisorisch" gelöst:


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
Procedure Pruefung(Eintrag:integer);
var j :integer;
Begin
for j:=1 to form2.Table1.RecordCount do
begin
  form2.Table1.RecNo:=j;
  form2.dbgrid1.SelectedField:=form2.Table1.FieldByName('Geburtstag');
  datum2:=formatdatetime('dd.mm',(now)+Eintrag)  ;
  datum1:=copy(form2.DBEdit2.Text,1,5);
  if (( comparetext(datum1,datum2)))=0 then
    begin
      case Eintrag of
      -1: form1.ListBox1.Items.Add(form2.Table1.FieldByName('Name').AsString);
       0: form1.ListBox2.Items.Add(form2.Table1.FieldByName('Name').AsString);
       1: form1.ListBox3.Items.Add(form2.Table1.FieldByName('Name').AsString);
    end;
    end;
end;
end;


Eintrag wird jeweils mit -1,0,1 übergeben.DBEdit1 enthält den Namen und DBEdit2 das Datum.
Naja, wie gesagt....ma lernt halt noch....

MFG und vielen Dank
Steffen
Einloggen, um Attachments anzusehen!