Entwickler-Ecke
Datenbanken - Datenbank mit DataSourceund DataSet auslese
HenryHux - Do 11.11.10 22:27
Titel: Datenbank mit DataSourceund DataSet auslese
Hi,
ich finde leider keine Informationen über das Auslesen von TDBGrids, mit denen ich was anfangen kann.
Aber soweit ich es verstanden hab, kann ich die nicht einfach wie ein TStringGrid auslesen.
Habe gefunden, dass ich
DBGrid.DataSource.DataSet nehmen soll, doch kann ich damit auch nichts genaueres anfangen.
Angenommen ich will aus einer Datenbak den Wert Vornamen beim ersten Datensatz auslese, wie mache ich das?
Delphi-Quelltext
1:
| vorname:=datenbank.DBGrid1.DataSource.DataSet.cells[1,1]; |
Lg
Henry
Moderiert von
Martok: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 11.11.2010 um 21:29
jaenicke - Do 11.11.10 22:41
Moment mal, was willst du denn jetzt eigentlich machen? Daten anzeigen oder Daten im Programm auslesen und verarbeiten? :gruebel:
Denn Daten über ein DBGrid zur Verarbeitung auszulesen ist als ob du einen Film mit einem Beamer an eine Leinwand strahlst und dann mit einer Webcam die Pixel ausliest (statt direkt aus den Daten zu lesen).
Also was hast du denn vor?
HenryHux - Do 11.11.10 22:46
:D Ok verstehe, hatte mir die Tabelle nur angelegt um die Connection zu überprüfen.
Ich will die Datenbank direkt auslesen.
Lg
jaenicke - Do 11.11.10 23:02
Das kommt dann noch ganz darauf an wie du wo drauf zugreifst. Ein Beispiel mit ADO und einer Query (ohne Fehlerbehandlung, die fehlt noch!):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| MyADOQuery.SQL.Text := 'select col from test where a=true'; MyADOQuery.Open; for i := 0 to MyADOQuery.RecordCount - 1 do begin ShowMessage(MyADOQuery.FieldByName('col').AsString); MyADOQuery.Next; end; |
bummi - Do 11.11.10 23:09
@jaenike
for i := 0 to......
habe ich im Zusammenhang mit Datasets noch nie gesehen :shock:
wieso nicht while not EOF ?
Xion - Do 11.11.10 23:19
Das Tutorial da ist ja nur so ne Angabe von Delphi, wie du ohne Programmieren an die Datenbank ran kommst. Das ist aber größtenteils ungeeignet, wenn du wirklich programmieren willst.
Access -> Du musst die ADO Komponenten verwenden.
Mit einer Query Komponente (TADOQuery?) kannst du dann SQL-Befehle an die Datenbank senden und kriegst eine Tabelle zurück.
Das macht
jaenicke in seinem Code oben.
Du kannst einfacher erstmal die ADOTable ansprechen. Dort gibt es auch eine Filter (und eine Locate?) Operation.
Die ADOTable kannst du auch in etwa wie
jaenicke geschrieben hat ansprechen, nur ohne der ersten Zeile natürlich.
//Edit:
Alle Werte einer Spalte in ein Memo schreiben müsste per Table in etwa so aussehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| Table.Active:=True; Table.First; while not Table.EoF do begin Memo1.Lines.Add( Table.FieldByName('MeineDatenbankspalte').AsString); Table.Next; end; Table.Close; |
jaenicke - Do 11.11.10 23:22
bummi hat folgendes geschrieben : |
habe ich im Zusammenhang mit Datasets noch nie gesehen :shock:
wieso nicht while not EOF ? |
Macht doch keinen Unterschied. Die Abfrage wird ohnehin zuerst komplett ausgeführt. :nixweiss:
HenryHux hat folgendes geschrieben : |
Hmm habe davon leider kein Wort verstanden, bin noch dabei mich damit auseinanderzusetzen. |
Kein Wunder, wenn du nur so ein Video anschaust. Wie soll man davon etwas lernen?
Du musst schon lesen. Zum Beispiel die Hilfe zu den Komponenten.
Xion hat folgendes geschrieben : |
Du kannst einfacher erstmal die ADOTable ansprechen. Dort gibt es auch eine Filter (und eine Locate?) Operation. |
Dafür ist die aber wohl auch langsamer als die Query. Dass die Table mehr kann, ist klar.
// EDIT:
Du kannst sowohl bei einer Query als auch bei einer Table mit Open
und Active arbeiten, ganz wie du willst. Mein Code oben geht für beide, sind ja beides TDataSet Nachkommen. ;-)
HenryHux - Do 11.11.10 23:30
Ok, danke, habe es so jetzt hinbekommen, dass er mir alle Werte einer bestimmten Spalte ausgibt.
Ungefähr so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TDatenbank.Button1Click(Sender: TObject); var i : integer; begin adotable1.Open; for i := 0 to adotable1.RecordCount - 1 do begin ShowMessage(adotable1.FieldByName('Name').AsString); adotable1.Next; end; end; |
Habe die Tabelle so angeordnet, dass jede Zeile eine ID hat. Wie kriege ich denn einen Wert aus einer Zeile, deren ID ich kenne?
Lg
jaenicke - Do 11.11.10 23:42
Siehe oben in meinem Quelltext, das kannst du in die SQL Abfrage stecken.
Alternativ kannst du in einer Table, wie du sie ja nutzt, auch direkt einen Filter setzen.
HenryHux - Fr 12.11.10 14:11
Hmm sry, aber ich blick gar nicht durch.
Bei mir sagt er [DCC Fehler] Database.pas(36): E2003 Undeklarierter Bezeichner: 'SQL'.
Muss ich da noch irgendwas einbinden?
Könnte mir evlt jemand ein Beispiel zeigen, an dem ich einfach nur anhand von der Nummerierung in der DB eine Zelle aus dieser Zeile auslesen kann?
Habe viel im Internet gesucht, aber nicht gefunden, was mir helfen würde...
Und die Delphi Hilfe sagt mir auch nicht gerade viel.
Lg
Henry
EDIT:
Habe das hier gefunden, klappt auch ganz gut, aber bräuchte jetzt mehr Ergebnisse, als nur nen Bool-Wert.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TDatenbank.Button1Click(Sender: TObject); var LocateSuccess: Boolean; SearchOptions: TLocateOptions; begin SearchOptions := [loPartialKey]; LocateSuccess := adotable1.Locate('ID', '7', SearchOptions); if locatesuccess then showmessage('TRUE') else showmessage('False'); end; end. |
HenryHux - Fr 12.11.10 14:33
So, habs jetzt hinbekommen.
Habe dafür Lookup benutzt.
Vlt brauchs ja nochmal jemand =)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TDatenbank.Button1Click(Sender: TObject); var erg:variant; begin erg:=adotable1.Lookup('ID', 1, 'Nickname'); showmessage(erg); end; |
Lg
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!