Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Problem mit neuen Nodes in QuantumTreelist (https://www.delphipraxis.net/117577-problem-mit-neuen-nodes-quantumtreelist.html)

Corristo 21. Jul 2008 10:35

Datenbank: Access • Version: 2002/2003 • Zugriff über: ADO

Problem mit neuen Nodes in QuantumTreelist
 
Guten Morgen,

Ich benutze eine cxDbTreelist-Komponente um eine Access-Datenbank strukturiert darzustellen. Die Aufgabe erfordert nun das auch neue Nodes im laufenden Programm erzeugt werden können. Aus der beiliegenden Demo werde ich nicht schlau. Wenn ich eine neue Node erzeuge mit dem Programm text den ich bereits habe erscheint folgender Fehler:

Im Projekt PPlaner.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 00412F21 in Modul 'PPlaner.exe'. Lesen von Adresse 00000058' aufgetreten.

Delphi-Quellcode:
Procedure Tform1.InsertNode(ParentId: Integer);
Var Feld : TField;
    Dataset : TDataset;
begin
  Dataset := cxDbtreelist1.DataController.DataSet;
  dataset.DisableControls;
   try
   Feld := Dataset.FindField(cxdbTreelist1.datacontroller.ParentField);
   if Assigned(Feld) then
     begin
      Dataset.Insert;
      Feld.Value := ParentID;
     end;
   finally
    Dataset.EnableControls;
   end;
end;
Delphi-Quellcode:
procedure TForm1.NeueAufgabe1Click(Sender: TObject);
begin
 InsertNode (FHitnode.ParentValue);
end;
Was habe ich vergessen/übersehen? Werde seit einer Stunde nicht schlauer.
Grüße Christian

dataspider 21. Jul 2008 11:22

Re: Problem mit neuen Nodes in QuantumTreelist
 
Hi,

ich füge Datensätze wie folgt ein:

Delphi-Quellcode:
...
// Ereignis der Treelist
TreeList.OnInitInsertingRecord    := TreeViewInitInsertingRecord;
...
// 
procedure TFRMBaseTreeList.TreeViewInitInsertingRecord(Sender: TObject;
    AFocusedNode: TcxTreeListDataNode; var AHandled: Boolean);
Var
  ADataSet: TDataSet;
  AFieldName: String;
begin
  if AFocusedNode <> nil then
  begin
    ADataSet := TcxDBTreeList(Sender).DataController.DataSet;
    if ADataSet.State in [dsEdit, dsInsert] then
    begin
      AFieldName := TcxDBTreeList(Sender).DataController.ParentField;
      if (GetKeyState(VK_SHIFT) < 0) then
        ADataSet.FieldByName(AFieldName).AsInteger := AFocusedNode.KeyValue
      else
        ADataSet.FieldByName(AFieldName).AsInteger := AFocusedNode.ParentValue;
    end;
  end;
end;
...
// Neuen Node erzeugen
TreeList.DataController.Insert;
Vielleich kommst du ja damit weiter.

Cu, Frank

Corristo 21. Jul 2008 11:48

Re: Problem mit neuen Nodes in QuantumTreelist
 
Vielen herzlichen Dank. Es funktiobniert bis auf einen kleinen Schönheitsfehler. Bei jeder neu erstellten Node gibt er einen Fehler an: Wert ID kann nicht verändert werden. Eine Idee woran das liegt?

dataspider 21. Jul 2008 12:25

Re: Problem mit neuen Nodes in QuantumTreelist
 
Hi,

ich tippe auf OptionsData.AutoCalcKeyValue.

Hast du das evtll. auf True, verwendest aber ein AutoIncrement Field?

Frank

Corristo 21. Jul 2008 12:32

Re: Problem mit neuen Nodes in QuantumTreelist
 
Wunderbar es Funktioniert

Großes Dankeschön an dich :D wieder was gelernt


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:51 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