Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Fehler bei zugriff auf Access DB (https://www.delphipraxis.net/99145-fehler-bei-zugriff-auf-access-db.html)

Gehstock 7. Sep 2007 13:32

Datenbank: Access • Zugriff über: ADO

Fehler bei zugriff auf Access DB
 
Delphi-Quellcode:
ADOConnection1.open;
ADOConnection1.GetTableNames(st);
 for i := 0 to st.Count-1 do
   TreeView1.Items.Add(NIL,(st.Strings[i]))
versuche mir grad ne datenbank mit hilfe eines Treeviews darzustellen bekomme aber beim ausführen ein "Access Violation....."

mkinzler 7. Sep 2007 13:34

Re: Fehler bei zugriff auf Access DB
 
Hast du mal Count überprüft?

Gehstock 7. Sep 2007 13:38

Re: Fehler bei zugriff auf Access DB
 
da ist der wurm drin
Delphi-Quellcode:
ButtonOpen.Caption:=inttostr(st.count)
bringt selben fehler

Phoenix 7. Sep 2007 13:41

Re: Fehler bei zugriff auf Access DB
 
Dann würde ich mal grob schätzen, dass st nil ist.

Gehstock 7. Sep 2007 14:29

Re: Fehler bei zugriff auf Access DB
 
Delphi-Quellcode:
procedure TfrmMain.Button1Click(Sender: TObject);
var
st: TStringList;
i: integer;
begin
st:=TStringList.Create;
ADOConnection1.GetTableNames(st,False);
TreeView1.Items.Clear;
for i:=0 to st.Count - 1 do begin
    TreeView1.Items.Add(nil,st.Strings[i]);
    TreeView1.selected;
  ADOQuery1.Close;
while ADOQuery1.Active do
        ADOQuery1.Close;
        ADOQuery1.SQL.Text := 'select * from '+TreeView1.selected.text;
        ADOQuery1.Open;
        While Not ADOQuery1.Eof do begin
                TreeView1.Items.AddChild(TreeView1.Selected,ADOQuery1.FieldValues['Feld1']);
                ADOQuery1.Next;
end;
  end;
st.Free;
end;
erzeugt keine untereinträge

shmia 7. Sep 2007 15:29

Re: Fehler bei zugriff auf Access DB
 
So gehts das auch nicht.
Zunächst empfehle ich eine lokale Variable für die TreeNodes:
Delphi-Quellcode:
var
   tnodes : TTreeNode:
begin
  tnodes := TreeView1.Items;
Dann ist es so, dass tnodes.Add() ein TTreeNode-Objekt zurückgibt.
(man beachte den Unterschied zwischen TTreeNode und TreeNodes)
Dieser Knoten muss zwischengespeichert werden:
Delphi-Quellcode:
var
  node : TTreeNode;
...
begin
  ...
    node := tnodes.Add(nil,st.Strings[i]);
Das Property Selected wird hier überhaupt nicht benötigt.
Delphi-Quellcode:
  tnodes.AddChild(node, ADOQuery1.FieldByName('Feld1').AsString);

Gehstock 7. Sep 2007 15:38

Re: Fehler bei zugriff auf Access DB
 
Delphi-Quellcode:
Procedure OpenDB;
var
st: TStringList;
i: integer;
tnodes : TTreeNodes;
node : TTreeNode;
begin
tnodes := frmmain.TreeView1.Items;
st:=TStringList.Create;
frmmain.ADOConnection1.GetTableNames(st,False);
frmmain.TreeView1.Items.Clear;
for i:=0 to st.Count - 1 do begin
while frmmain.ADOQuery1.Active do
        frmmain.ADOQuery1.Close;
        frmmain.ADOQuery1.SQL.Text := 'select * from '+st.Strings[i];
        frmmain.ADOQuery1.Open;
        node := tnodes.Add(nil,st.Strings[i]+inttostr(frmmain.ADOQuery1.RecordCount));
        While Not frmmain.ADOQuery1.Eof do begin
          tnodes.AddChild(node, frmmain.ADOQuery1.FieldByName('Feld1').AsString);
          frmmain.ADOQuery1.Next;
  end;
    end;
st.Free;
end;

Danke klappt


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz