DataSet auslesen...<-Bitte Helfen :(
-
Hallo!!
Ich möchte ein DataSet auslesen und jeden Datensatz einem anderem DBLabel zuweisen und ein bestimtes Feld des Datensatzes einem DBEdit zuweisen. ´Hat jemand eine Idee???
Habe folgendes versucht glaube aber das ich da auf dem Holzweg bin.
DataSource1->DataSet->First(); DataSource1->DataSet->Fields[0]->DBLabel1Hab noch was gefunden um ein DataSet auszulesen, verstehe das aber nicht richtig.
int n = 0; while (!grid_Anz->DataSource->DataSet->Eof) { felddata = grid_Anz->Fields[n]->AsInteger; grid_Anz->DataSource->DataSet->Next(); n++; }
-
Hallo
Dir fehlt offenbar noch grundlegendes Verständnis für die DB-Komponenten.
Wenn du ein TDBLabel mit einem TTable/TQuery verbinden willst, brauchst du dazwischen noch ein TDataSource. Also setzt du noch eine solche Komponente auf das Form, setzt DataSource::DataSet auf das TTable/TQuery und in dem TDBLabel setzt du TDBLabel::DataSource auf die DataSource, und danach (Wenn das DataSet geöffnet ist) wählt du in TDBLabel::Field das Feld aus, das dargestellt werden soll.Weiteres findest du in den Builder-Beispielen und der Builder-Hilfe.
bis bald
akari
-
Hallo.
Ich denke Du hast meine Frage nicht richtig verstanden. Ich kann sehr wohl ein Feld einer DB einem DBLabel zuweisen. Das Problem ist nur, dass ich das wären der Laufzeit machen will und auf Knopfdruck auch in zufälliger anordnung. Also wenn ich 10 Datensätze und 10 Label habe sollen die Datensätze zufällig auf die Label verteilt werden. Aber nur ein bestimmtes Feld des Datensatzes.
-
Hallo
dann ist TDBLabel das falsche Control dafür. Denn wie bereits gesagt basiert es auf DataSource, und mit Datasource kannst du nur genau einen Datensatz aus einem DataSet gleichzeitig anzeigen.
Du must also selber die Werte der Felder in den Datensätzen auslesen und in gewöhnliche TLabel eintragen
while (!grid_Anz->DataSource->DataSet->Eof) { felddata = grid_Anz->Fields->AsInteger; // Liest aus aktuellem Datensatz aus // Hier etwas mit felddata machen, zum Beispiel in ein Label eintragen grid_Anz->DataSource->DataSet->Next(); // Schaltet auf den nächsten Datensatz weiter }bis bald
akari
-
Also ich habe folgendes Versucht:
DataSource1->DataSet->First(); int n=0; int m=0; //DataSource1->DataSet->Fields[0]->DBLabel1 while (!DataSource1->DataSet->Eof) { Label1 = DataSource1->DataSet->Fields; DataSource1->DataSet->Next(); n++; } }Leider ist Fields ein const und ich komme nicht dahinter, wie ich das in AniString wandeln kann.
Eine frage bleibt aber noch. Wie kann ich meine Label von 1-48 in einer Schleife hochzählen kann, denn mit Label[n] geht das nicht.
-
Versuchs mal mit:
Label1->Text = DataSource1->DataSet->FieldByName("Feldname")->AsString;Mit den Labels kann ich Dir leider net helfen.
-
oder
Label1->Text = DataSource1->DataSet->Fields->Fields[n]->AsString;zu den Labels -> dynamische Array von Komponenten und Zugriff, aber nicht durch Namen und zur Laufzeit erstellen, ...
die FAQ ist immer wieder interessant ...
-
Danke, aber bei Label1->Text gibt es ne Fehlermeldung.[C++ Error] Unit2.cpp(29): E2247 'TControl::Text' is not accessible
-
Hallo
Die fehlermeldung ist doch aussagekräftig genug. Du willst die falsche Eigenschaft benutzen.
bis bald
akari
-
Joo, TLable verfügt über keine Eigenschaft Text.
Versuch mal Caption.gruß
Arno
-
Danke, so habe ich es jetzt gemacht:
DataSource1->DataSet->First(); TSpeedButton *Knopf; AnsiString ButtonBez = "SpeedButton"; int z = 0; for (int x=0;x<49;x++) { z++; ButtonBez +=z; Knopf = dynamic_cast<TSpeedButton*>(FindComponent(ButtonBez)); Knopf->Caption = DataSource1->DataSet->FieldByName("nick")->AsString; DataSource1->DataSet->Next(); ButtonBez = "SpeedButton"; }Ich habe die Label dur SpeedButton ersetzt, so habe ich auf meiner Form platz gespaart, da ich keine weiteren Buttons mehr brauch.