Autor Beitrag
D. Annies
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Mo 01.02.10 22:47 
Hi, Delpher,

ich klicke eine Combobox an, in der sich Tabellennamen befinden. Wie bekomme ich aus dem
Item das Dataset?
Ich habe folgenden Code: (viel kann wohl nicht mehr fehlen)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
showmessage('bitte auf <Tabelle sehen> (Combobox) klicken');
  assignfile (t2, form1.label30.caption+'OUTTXT\'+combobox2.Items[combobox2.itemindex]+datetostr(date)+'.csv');
  rewrite(t2);
  while not combobox2.Items[combobox2.ItemIndex].eof do
  begin
    for k := 0 to combobox2.Items[combobox2.ItemIndex].FieldCount-2 do
      write(t2, combobox2.Items[combobox2.ItemIndex].fields[k].asstring, ',');
    write(t2, combobox2.Items[combobox2.ItemIndex].fields[QSchueler.FieldCount-1].asstring);
    writeln(t2);
    combobox2.Items[combobox2.ItemIndex].next;
  end;
  closefile(t2);


Danke für ausse Klemme,
Detlef

_________________
ut vires desint, tamen est laudanda voluntas
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mo 01.02.10 22:59 
*grübel*
Suchst du FindComponent?

_________________
PROGRAMMER: A device for converting coffee into software.
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Mo 01.02.10 23:10 
Gute Idee, aber an dieser Stelle: nein.
Ich habe jetzt eingefügt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
var ds : TDataset;
// ...
ds.name := combobox2.items[combobox2.itemindex];
// ...
while not ds.eof do


das klappt, eigentlich wäre mein Prob also damit gelöst.
Aber es klappt trotzdem noch nicht, zur Laufzeit gibt es noch einen Error, weil ich ja den Klick (bzw. Doppelklick, weil Combobox2.OnClick belegt ist) nicht nach dem showmessage machen kann ...

Mal sehen,
Det

_________________
ut vires desint, tamen est laudanda voluntas
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Di 02.02.10 00:29 
Und du meinst, wenn du einer Klasse einfach den Namen zuweist, zaubert sich die entsprechende Instanz da von ganz alleine rein?

Du suchst FindComponent..

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
ds := FindComponent(combobox2.items[combobox2.itemindex])
if ds <> nil then
begin
  while not ds.eof do
  begin
    Something;
  end;
end;


Hab nochmal nachgedacht.. eine Alternative wäre
ausblenden Delphi-Quelltext
1:
ds := Combobox2.Items.Objects[combobox2.itemindex] as TDataSet;					

falls du das Objekt mit den Listeneinträgen verknüpft hast.

_________________
PROGRAMMER: A device for converting coffee into software.
PeterPain
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 83



BeitragVerfasst: Di 02.02.10 03:57 
user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
Und du meinst, wenn du einer Klasse einfach den Namen zuweist, zaubert sich die entsprechende Instanz da von ganz alleine rein?

Du suchst FindComponent..

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
ds := FindComponent(combobox2.items[combobox2.itemindex])
if ds <> nil then
begin
  while not ds.eof do
  begin
    Something;
  end;
end;


Hab nochmal nachgedacht.. eine Alternative wäre
ausblenden Delphi-Quelltext
1:
ds := Combobox2.Items.Objects[combobox2.itemindex] as TDataSet;					

falls du das Objekt mit den Listeneinträgen verknüpft hast.


Das klingt nach brutalem Käse, dein nachdenken hätte dich dazu führen sollen hier entweder garnicht, oder wenn dann mit sinnvolleren tips zu antworten :)


gruß
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Di 02.02.10 08:34 
So, jetzt habe ich die Lösung:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.TabelleCSV(Sender: TObject);
var k  : smallint;
    ds : TDataset;
begin
  ds := TQuery(TDBGrid(TPopupMenu(TMenuItem(sender).GetParentComponent).popupComponent).Datasource.DataSet);
  showmessage(ds.name);
  assignfile (t2, form1.label30.caption+'OUTTXT\'+ds.Name+datetostr(date)+'.csv');
  rewrite(t2);
  if ds <> nil then
  begin
    while not ds.Eof do
    begin
      for k := 0 to ds.FieldCount-2 do
        write(t2, ds.fields[k].asstring, ',');
      write(t2, ds.fields[ds.FieldCount-1].asstring);
      writeln(t2);
      ds.next;
    end;
  end;
  closefile(t2);
end;


Vielen Dank für eure Hilfe-Ideen,
Detlef

_________________
ut vires desint, tamen est laudanda voluntas
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Di 02.02.10 10:04 
user profile iconPeterPain hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:

Hab nochmal nachgedacht.. eine Alternative wäre
ausblenden Delphi-Quelltext
1:
ds := Combobox2.Items.Objects[combobox2.itemindex] as TDataSet;					

falls du das Objekt mit den Listeneinträgen verknüpft hast.


Das klingt nach brutalem Käse, dein nachdenken hätte dich dazu führen sollen hier entweder garnicht, oder wenn dann mit sinnvolleren tips zu antworten :)

Ähm.. blah?
Zumindest an letzterem Vorschlag ist nicht mehr viel auszusetzen - jedem Eintrag ein Objekt zuzuweisen, und dann damit arbeiten. Was ist daran deiner Meinung nach Käse? Nun bin ich mal gespannt..
Natürlich könnte man auch mit case arbeiten, wenn das dem Herren genehmer ist.

@D.Annies: WAS tust du da??? Drei Typecasts ineinander, wtf? Nun erklär nochmal bitte genau, was du da vorhast. Eben war noch von ner ComboBox die Rede, jetzt auf einmal MenuItem?

_________________
PROGRAMMER: A device for converting coffee into software.
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Di 02.02.10 14:36 
Hi, Xentar,

ich habe mich entschlossen, die Combobox zu verwerfen und statt dessen den Dataset des zugehörigen DBGrids zu nehmen.
Geht prima! (ich wollte dich nicht schwindelig machen)

Gruß, Detlef

_________________
ut vires desint, tamen est laudanda voluntas