Autor |
Beitrag |
HenryHux
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Do 11.11.10 22:27
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
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 11.11.10 22:41
Moment mal, was willst du denn jetzt eigentlich machen? Daten anzeigen oder Daten im Programm auslesen und verarbeiten?
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 
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Do 11.11.10 22:46
 Ok verstehe, hatte mir die Tabelle nur angelegt um die Connection zu überprüfen.
Ich will die Datenbank direkt auslesen.
Lg
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Do 11.11.10 23:09
@jaenike
for i := 0 to......
habe ich im Zusammenhang mit Datasets noch nie gesehen
wieso nicht while not EOF ?
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
HenryHux 
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Do 11.11.10 23:11
Hmm habe davon leider kein Wort verstanden, bin noch dabei mich damit auseinanderzusetzen.
Alles was ich sagen kann ist, dass ich es eig genauso wie hier hab : www.tutorials.de/son...atenbank-3-23-a.html .
Vlt hilft das ja. Kannst du mir vlt erklären was der Quelltext bedeutet? =)
Lg
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: 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; |
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Zuletzt bearbeitet von Xion am Do 11.11.10 23:22, insgesamt 1-mal bearbeitet
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 11.11.10 23:22
bummi hat folgendes geschrieben : | habe ich im Zusammenhang mit Datasets noch nie gesehen
wieso nicht while not EOF ? |
Macht doch keinen Unterschied. Die Abfrage wird ohnehin zuerst komplett ausgeführt.
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 
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: 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
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: 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 
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: 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
|
|