Autor Beitrag
HenryHux
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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?
ausblenden Delphi-Quelltext
1:
vorname:=datenbank.DBGrid1.DataSource.DataSet.cells[1,1];   //So würde ich es machen, aber leider ist da der Compiler nicht meiner Meinung :D					


Lg

Henry


Moderiert von user profile iconMartok: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 11.11.2010 um 21:29
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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!):
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: 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 ?

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
HenryHux Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
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)
BeitragVerfasst: 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 user profile iconjaenicke 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 user profile iconjaenicke 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:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
Table.Active:=True; //Mit Datenbank verbinden
Table.First; //ersten Eintrag wählen
while not Table.EoF do
  begin
     Memo1.Lines.Add( Table.FieldByName('MeineDatenbankspalte').AsString);
     Table.Next; //nächsten Eintrag wählen
  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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 11.11.10 23:22 
user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
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:

user profile iconHenryHux hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconXion hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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.
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Fr 12.11.10 14:33 
So, habs jetzt hinbekommen.
Habe dafür Lookup benutzt.
Vlt brauchs ja nochmal jemand =)
ausblenden 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