Hi
Wie es aussieht klappt es doch noch nicht so recht. Insbesondere mit der
GroupList_Fill Funktion
Und ich finde den feiler nicht, ich arbeite mit der
Absolute Database 7.0x
Wie es scheint wird alles richtig in die
DB gespeichert aber beim Auslesen werden einige Einträge
Falsch dargestellt
Ich habe auch drei Bilder im Anhang.
Bild1. wenn ich das erste mall in eine Lehre
DB Schreibe, alles OK
Bild2. Wen ich das Programm neu starte und die
DB Lade dann noch einige eintrage mach, die zuletzt gemachten Einträge werden beim nächstem laden der
DB falsch angezeigt.
Delphi-Quellcode:
(* Folder Table *)
with Folder_Table do
begin
DatabaseName:= 'MyDBv2';
TableName:= 'FolderList';
with AdvFieldDefs do
begin
Clear;
Add('ID', aftAutoIncLargeint, 0, false);
Add('ParentID', aftLargeint);
Add('Title', aftWidestring, 255);
// Add('IconID', aftLargeint);
Add('Image', aftGraphic, 0, false, caZLIB, 4);
end;
with IndexDefs do
begin
Clear;
Add('ID', 'ID', [ixPrimary]);
Add('ByParentID', 'ParentID', []);
Add('Title', 'Title', []);
end
end;
(******************************* Fill Folder-List *****************************)
function TMain_Form.FolderList_Fill(ExpandedNood : Boolean) : boolean;
procedure FillTreeNode(Parent: PVirtualNode);
var Node: PVirtualNode;
Data: PNodeData;
begin
if Assigned(Parent) then
begin
Data:= FolderTree.GetNodeData(Parent);
Folder_Table.Filter:= 'ParentID = ' + IntToStr(Data^.ID);
Folder_Table.Filtered:= true;
Folder_Table.First;
while not Folder_Table.Eof do
begin
Node:= FolderTree.AddChild(Parent);
Data:= FolderTree.GetNodeData(Node);
Data^.ID:= Folder_Table.FieldByName('ID').AsLargeInt;
Data^.Caption:= Folder_Table.FieldByName('Title').AsWideString;
Folder_Table.Next;
end;
Node:= Parent.FirstChild;
while Assigned(Node) do
begin
FillTreeNode(Node);
FolderTree.Expanded[Node]:= true;
Node:= Node.NextSibling;
end;
end;
end;
var Node: PVirtualNode;
Data: PNodeData;
begin
Result:= False;
FolderTree.BeginUpdate;
try
FolderTree.Clear;
Node:= FolderTree.AddChild(Nil);
Data:= FolderTree.GetNodeData(Node);
Data^.ID:= 0;
Data^.Caption:= 'My Data';
FillTreeNode(Node);
FolderTree.Expanded[Node]:= ExpandedNood;
finally
FolderTree.EndUpdate;
RecordGrid_Fill(0);
Result:= True;
end;
end;
(******************************* Add New Folder *******************************)
function TMain_Form.FolderList_Add(Title : Widestring) : Boolean;
var Node : PVirtualNode;
NodeData : PNodeData;
ParentID : Int64;
begin
Result:= False;
Node:= FolderTree.FocusedNode;
try
if Assigned(Node) then
begin
{
if FolderTree.AbsoluteIndex(Node) = 0 then
ParentID:= 0;
if FolderTree.AbsoluteIndex(Node) > 0 then
}
ParentID:= Int64(FolderTree.AbsoluteIndex(Node));
Folder_Table.Filtered:= False;
Folder_Table.Append;
Folder_Table.FieldByName('ParentID').AsLargeInt:= ParentID;
Folder_Table.FieldByName('Title').AsWideString:= Title;
Node:= FolderTree.AddChild(Node);
NodeData:= FolderTree.GetNodeData(Node);
NodeData^.ID:= Folder_Table.FieldByName('ID').AsLargeInt;
NodeData^.Caption:= Folder_Table.FieldByName('Title').AsWideString;
Folder_Table.Post;
FolderTree.GetLast();
FolderTree.Selected[Node]:= true;
// FolderTree.EditNode(Node, -1);
end;
finally
Result:= True;
end;
end;
(******************************* Reaname Folder *******************************)
function TMain_Form.FolderList_Rename(Title : Widestring) : Boolean;
var Node: PVirtualNode;
NodeData: PNodeData;
FolderData : TFolderData;
FolderID : Int64;
begin
Result:= false;
Node:= FolderTree.FocusedNode;
try
if Assigned(Node) then
begin
FolderID:= FolderTree.AbsoluteIndex(Node);
Folder_Table.Filtered:= False;
Folder_Table.IndexName:= 'ID';
if Folder_Table.FindKey([FolderID]) then
begin
FolderData.Title:= Title;
Folder_Table.Edit;
Folder_Table.FieldByName('Title').AsWideString:= Title;
Folder_Table.Post;
NodeData:= FolderTree.GetNodeData(Node);
NodeData.Caption:= Title;
end;
end;
finally
Result:= True;
end;
end;
thx