Entwickler-Ecke
Datenbanken - VST und TBookmark
Coder - Fr 16.11.07 00:02
Titel: VST und TBookmark
Hi
Hab in der VirtualTreeView-Hilfe folgendes gefunden:
| Zitat: |
You could connect a TBookmark to the data. To display the name of your customer in a VT :
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TFRM_WWW_main.vFavTreeGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: Integer; TextType: TVSTTextType; var Text: WideString); begin if Column < 0 then Exit; if TVirtualStringTree(Sender).Header.Columns[Column].Text = 'Customer Name' then begin Table.GotoBookmark(TBookmark(Sender.GetNodeData(Node))); Text := Table.FieldByName('Name').asString; end; end; |
|
Das is schonmal sehr schön.
Doch leider steht nicht da wie ich das TBookmark vorher in den Pointer des Nodes reinkriege.
Hab es so versucht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| function TForm1.LoadFromDB: Boolean; var Node: PVirtualNode; NodeData: Pointer; begin ... Node := VSTAddNode(nil); NodeData := VST.GetNodeData(Node); NodeData := Table.GetBookmark; end; |
Wenn er im oberen Quellcode nun Zeile 7 erreicht gibt er aus
| Zitat: |
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt *.exe ist eine Exception der Klasse EDatabaseError mit der Meldung 'Table: Datensatz nicht gefunden' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
|
Ich hab keine Ahnung wies gehn soll. :?!?:
MfG
CenBells - Sa 17.11.07 13:53
Hallo Coder,
ich glaube du musst den Bookmark anders in die NodeData schreiben.
Ich weise objekte immer so zu:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| var Node: PVirtualNode; NodeData: Pointer; begin ... Node := VSTAddNode(nil); NodeData := VST.GetNodeData(Node); TObject(NodeData^) := ClientDataSet.GetBookmark; end; |
Viele Grüße
Ken
Coder - So 18.11.07 21:07
Sorry das funktioniert auch nicht.
Gleiche Fehlermeldung.
Hab auch schon viel mit Pointern rumprobiert etc. ...
CenBells - Mo 19.11.07 13:28
Hi,
was machst du denn mit deinem ClientDataset und dem Table in der Zwischenzeit? Mal nen open und nen close? In deinem ersten Code-Schnippsel ist von Table.GotoBookmark die rede, in dem zweiten versuchst du aber den Bookmark von einer ClientDataset in den Node zu packen.
Sind das nur zwei namen für das selbe objekt? Ich bin mir nämlich nicht sicher, ob du nen bookmark zwischen unterschiedlichen instanzen bedenkenlos austauschen kannst.
Hast du mal geschaut, ob du überhaupt nen bookmark aus dem Node bekommst?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| begin if Column < 0 then Exit; if TVirtualStringTree(Sender).Header.Columns[Column].Text = 'Customer Name' then begin LBookMark := TBookmark(Sender.GetNodeData(Node)); if assigned(LBookmark) then begin Table.GotoBookmark(LBookMark); Text := Table.FieldByName('Name').asString; end else MessageDlg('Kein Bookmark', mtInformation, [mbOk]); |
Viele Grüße
Ken
Coder - Mo 19.11.07 21:41
Der erste CodeBlock ist aus der VirtualTreeView-Hilfe.
Sollte also funktionieren.
Den zweiten hab ich geschrieben und die Komponente nur anders genannt.
Habs mal verbessert.
CenBells - Di 20.11.07 01:27
hi,
schließt du die komponente zwischenzeitlich oder machst du nen refresh? Generell hast du recht, der code sollte funktionieren, aber 100% sicher ist das nicht.
Ich arbeite zwar seit jahren mit der TVirtualStringTree Komponente aber mit TBookmark habe ich in dem Zshg noch nicht gearbeitet. Einfach mal schauen, was mit den DB komponenten zwischenzeitlich passiert wäre ein erster Schritt.
Viele Grüße
Ken
Coder - Di 20.11.07 14:41
CenBells hat folgendes geschrieben: |
hi,
schließt du die komponente zwischenzeitlich oder machst du nen refresh? Generell hast du recht, der code sollte funktionieren, aber 100% sicher ist das nicht.
Ich arbeite zwar seit jahren mit der TVirtualStringTree Komponente aber mit TBookmark habe ich in dem Zshg noch nicht gearbeitet. Einfach mal schauen, was mit den DB komponenten zwischenzeitlich passiert wäre ein erster Schritt.
Viele Grüße
Ken |
Ich schließe die Datenbank nicht.
Ich arbeite nur mit ein paar Datensätzen.
Naja, wenns nich klappt mach ich das einfach doch mit nem Record.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!