Also erstmal vielen Dank für die Antwort, ich werde mal den Quellcode posten, vielleicht läßt sich der Fehler so erkennen.
Wichtige Procedures meiner Hauptunit
Delphi-Quellcode:
procedure TForm1.InitListView;
var
AktStrasse : Tstrasse;
AktNode: TTreeNode;
begin
TreeView1.Items.Clear;
TreeView1.Items.Add(NIL,'Strassen');
while DataModule1.GetAdresse(AktStrasse) = TRUE do
begin
AktNode:= TreeView1.Items.AddChild(TreeView1.Items[0], AktStrasse.strassen);
TreeView1.Items.AddChild(AktNode,'Dummy');
end;
TreeView1.Items[0].Expand(False);
end;
procedure TForm1.TreeView1Expanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
var
AktGeb: Tgeb;
AktWoh: Twoh;
AktNode: TTreeNode;
begin
if node.Parent <> nil then
begin
statusbar1.SimpleText:=node.Parent.Text;
if node.Text <> 'Strassen' then
node.DeleteChildren;
if node.parent.Text = 'Strassen' then
begin
while DataModule1.GetGebaude(node.Text,AktGeb) = true do
begin
aktnode:=Treeview1.Items.AddChild(node , inttostr(aktgeb.HNR));
treeview1.items.AddChild(aktnode, 'Dummy');
end;
end
else
begin
aktgeb.GName:=node.Text;
aktgeb.str.strassen:=node.Parent.Text;
while
datamodule1.GetWohnung(node.Text, aktwoh) = true do
begin
Treeview1.Items.AddChild(node, inttostr(aktwoh.ZI));
end;
end;
end;
end;
Funktionen meiner Zweitunit
Delphi-Quellcode:
function TDataModule1.GetAdressePK (strasse: string): integer;
begin
GetAdressePK:=-1;
ADOQuery3.Parameters.ParamByName('Int').Value:=strasse;
ADOQuery3.Open;
if ADOQuery3.RecordCount <> 0 then
GetAdressePK := ADOQuery3.FieldByName('EADR').AsInteger;
ADOQuery3.Close;
end;
function TDataModule1.GetGebaudePK(HNR: string): integer;
begin
GetGebaudePK:=-1;
ADOQuery6.Parameters.ParamByName('Ext').Value:=HNR;
ADOQuery6.Open;
if ADOQuery6.RecordCount <> 0 then
GetGebaudePK:= ADOQuery6.FieldByName('EGID').AsInteger;
ADOQuery6.Close;
end;
function TDataModule1.GetAdresse (var strasse: Tstrasse): Boolean;
begin
GetAdresse := TRUE;
if ADOQuery1.Active = FALSE then
ADOQuery1.Open;
if ADOQuery1.Eof =false then
begin
with strasse do
begin
strassen:= ADOQuery1.FieldByName( 'strasse').AsString;
end;
ADOQuery1.Next;
end
else
begin
GetAdresse:= False;
ADOQuery1.Close;
end;
end;
function TDataModule1.GetGebaude (Strasse: String; var Geb: Tgeb): Boolean;
var
AdressePK: integer;
begin
GetGebaude:= true;
AdressePK:= GetAdressePK(strasse);
if AdressePK <> -1 then
begin
if ADOQuery2.Active = false then
begin
ADOQuery2.Parameters.ParamByName('GebPK').Value:= AdressePK;
ADOQuery2.Open;
end;
if ADOQuery2.Eof = false then
begin
with Geb do
begin
EGID:=ADOQuery2.FieldByName( 'EGID').Asinteger;
san:= ADOQuery2.FieldByName( 'san').AsString;
HNR:= ADOQuery2.FieldByName( 'HNR').AsInteger;
GName:=ADOQuery2.FieldByName( 'GName').AsString;
HNRZ:= ADOQuery2.FieldByName( 'HNRZ').AsString;
end;
ADOQuery2.Next;
end
else
begin
GetGebaude:= false;
ADOQuery2.Close;
end;
end
else
GetGebaude :=false;
end;
function TDataModule1.GetWohnung (HNR: string; var Woh: Twoh): Boolean;
var
GebaudePK: integer;
begin
GetWohnung:= true;
GebaudePK:=GetGebaudePK(HNR);
if GebaudePK <> -1 then
begin
if ADOQuery5.Active = false then
begin
ADOQuery5.Parameters.ParamByName('WohPK').Value:= GebaudePK;
ADOQuery5.Open;
end;
if ADOQuery5.Eof = false then
begin
with Woh do
begin
EGID:=ADOQuery5.FieldByName( 'EGID').Asinteger;
ZI:= ADOQuery5.FieldByName( 'Zimmerzahl').AsInteger;
NA:= ADOQuery5.FieldByName( 'Nutzungsart').AsString;
WName:= ADOQuery5.FieldByName( 'WName').AsString;
end;
ADOQuery5.Next;
end
else
begin
GetWohnung:= false;
ADOQuery5.Close;
end;
end
else
GetWohnung:=false;
end;
In den ADOQuery's steht folgendes:
ADOQuery1: Select * from Adresse order by strasse
ADOQuery2: Select * from Gebaeude where EADR=: GebPK
ADOQuery3: Select * from Adresse where strasse=: int
ADOquery5: Select * from Wohnung where EGID=: WohPK
ADOQuery6: Select * from Gebaeude where HNR=: ext