Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - DataSet Zuweisungsproblem


Morpheus1572 - Mi 17.09.08 10:04
Titel: DataSet Zuweisungsproblem
Moin,

ich habe nen problem dessen lösung ich hier schon mal bekommen habe. Es funktioniert soweit aber nur für einen durchlauf...

Das Problem:

Bevor ich in die IF- gehe prüfe ich via COUNT die Menge der Einträge in der Tabelle ErstellDat. Dort sind derzeit 2 Einträge. Die Schleife wird ordnungsgemäß 2 mal durchlaufen aber das ergebnis - nämlich die gefundenen Daten in die Combobox einzutragen - ist immer das gleiche. ich habe 2 einträge mit dem ersten Datum (ErstID = 1).

Wo liegt mein Denktfehler???


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
  If x > 0 then
    begin
      While x > i do
      begin
      i:=i+1;
      y:=IntToStr(i);
      ShowMessage('y: '+y);
//      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Text:='SELECT Datum FROM ErstellDat WHERE ErstID = :apptype';
      ADOQuery1.Prepared := true;
      ADOQuery1.Parameters.ParamByName('apptype').Value:=y;
      ADOQuery1.Active:=true;
      ds := DataSource1.DataSet;
      Datum := ds['Datum'];
      ShowMessage('Gefundenes Datum: '+ds['Datum']);
      ComboBox1.Items.Add(Datum);
      end
    end
  else
    begin
      ComboBox1.Text:='Keine Daten...'
    end;


delphiprogrammierer - Mi 17.09.08 11:07

Wieso verwendest du die Datasource ? Nur um Daten auszulesen und in die ComboBox zu schreiben ?

Erzähl halt mal genauer, was du machen möchtest, dann kann dir sicher geholfen werden.

LG

DelphiProgrammierer


Morpheus1572 - Mi 17.09.08 11:19

moin,

naja das mit der DataSource habe ich damals schon nicht so recht verstanden. ich denke damit kann man nur das bestimmte feld dann via showmessage anzeigen lassen.... ???

ich muss wie schon oben erwähnt bestimmte felder einer DBTabelle in die combobox reinbekommen und brechh mir einen ab, da in meinem beispiel der variablen :apptype KEIN anderer Wert als 1 zugewiesen wird. und das verstehe ich nicht.

beispiel: ich habe es mit einer anderen Tabelle mit 59 einträgen probiert. ich erhalten 59 einträge in der ComboBox mit dem ersten wert der tabelle...

ich raff es nicht. wie kann ich das lösen und warum funzt meins nicht???


delphiprogrammierer - Mi 17.09.08 12:29

user profile iconMorpheus1572 hat folgendes geschrieben:
moin,

naja das mit der DataSource habe ich damals schon nicht so recht verstanden. ich denke damit kann man nur das bestimmte feld dann via showmessage anzeigen lassen.... ???

ich muss wie schon oben erwähnt bestimmte felder einer DBTabelle in die combobox reinbekommen und brechh mir einen ab, da in meinem beispiel der variablen :apptype KEIN anderer Wert als 1 zugewiesen wird. und das verstehe ich nicht.

beispiel: ich habe es mit einer anderen Tabelle mit 59 einträgen probiert. ich erhalten 59 einträge in der ComboBox mit dem ersten wert der tabelle...

ich raff es nicht. wie kann ich das lösen und warum funzt meins nicht???



Was mir aufgefallen ist, du machst setzt adoquery1.activ in deiner schleife nicht auf false, d.h. die datenquelle wird nicht mit dem neuen parameter aktuallisiert. eigentlich sollte schon ein fehler kommen, wenn du in der while schleife die eigenschaft AdoQuery1.Sql.Text setzt, daber vorher nicht die adoquery.activ auf false setzt.

mach doch mal

ADOQuery1.Active := False;

vor die Zeile

ADOQuery1.SQL.Text:='SELECT Datum FROM ErstellDat WHERE ErstID = :apptype';

Ausserdem solltest du überprüfen, ob überhaupt datensätze gefunden worden sind, also

if ( Not AdoQuery1.EOF ) Then
Begin
ComboBox1.Items.Add( AdoQuery1.FieldByName ( 'datum' ).AsString );
End;


Delphiprogrammierer


Morpheus1572 - Mi 17.09.08 12:39

nein am active liegt es nicht.

ich schließe es ja am ende der schleife. ich habs dennoch mal nach oben gesetzt, gleiches ergebnis.

es funzt alles wunderbar nur das :apptype keinen anderen wert als 1 zugewiesen bekommt. i und y bekommen auch die richtigen werte... ich könnte :cry:


delphiprogrammierer - Mi 17.09.08 12:57

user profile iconMorpheus1572 hat folgendes geschrieben:
nein am active liegt es nicht.

ich schließe es ja am ende der schleife. ich habs dennoch mal nach oben gesetzt, gleiches ergebnis.

es funzt alles wunderbar nur das :apptype keinen anderen wert als 1 zugewiesen bekommt. i und y bekommen auch die richtigen werte... ich könnte :cry:



dann nutz einfach mal den debugger und schau nach, was in Y bzw. I drin steht, wenn der Parameter zugewiesen wird. Wenn das richtig ist, dann ist der fehler in der DB


Morpheus1572 - Mi 17.09.08 13:36

warum in der DB???? die ist i.o.

die zuweisung von y oder i zu :apptype funzt nicht!!! was hat das mit der DB zu tun?


Morpheus1572 - Mi 17.09.08 16:43

Okay, problem ist gefunden. die zuweisung hat nicht geklappt weil ich im tran das dataset an eine ADOTable und NICHT an das Query gebunden habe. dann kann es natürlich nicht klappen... :oops:

Sorry und danke für die hilfe.