Article ID: 161735
Article Last Modified on 7/13/2004
SET DEFAULT TO SYS(2004)+'SAMPLES\SOLUTION\OLE'
SET DEFAULT TO HOME(2)+'SOLUTION\OLE'
o = THISFORM.oleTree
IF !ISNULL(o.SelectedItem)
o.Nodes.Add(o.SelectedItem.Key, 3, THISFORM.NewKey(), "previous",0)
ENDIF
LOCAL loNodes, lcParent, lcDBFName, lcOldAlias, lcOldSafety, liIndex
LOCAL liTmp
#DEFINE WARNING_LOC "Continuing will destroy all data in the " + ;
"table and create a new table with three fields." + CHR(13) + ;
"Do you want to continue?"
#DEFINE WARN_LOC "Warning"
lcOldAlias = ALIAS()
lcOldSafety = SET("SAFETY")
lcDBFName = GETFILE("dbf")
IF EMPTY(lcDBFName) && User chose Cancel
RETURN
ENDIF
IF FILE(lcDBFName)
IF THISFORM.OpenDBF(lcDBFName, .T.) AND ;
THISFORM.VerifyTableStructure() AND ;
MESSAGEBOX(WARNING_LOC,48+256+4,WARN_LOC) = 6
SET SAFETY OFF
ZAP
SET SAFETY &lcOldSafety
ELSE
RETURN
ENDIF
ELSE
CREATE TABLE (lcDBFName) ;
(Key c(4), Parent c(4), Text c(60))
ENDIF
loNodes = THISFORM.oleTree.Nodes
FOR i = 1 to loNodes.Count
IF ISNULL(loNodes.Item(i).Parent)
liIndex = loNodes.Item(i).FirstSibling.Index
liTmp = liIndex
EXIT
ENDIF
NEXT
lcParent = "0_" &&Root
INSERT INTO (lcDBFName) VALUES ;
(loNodes.Item(liIndex).key, ;
lcParent, ;
loNodes.Item(liIndex).Text)
DO WHILE liIndex <> loNodes.Item(liTmp).LastSibling.Index
INSERT INTO (lcDBFName) VALUES ;
(loNodes.Item(liIndex).Next.key, ;
lcParent, ;
loNodes.Item(liIndex).Next.Text)
liIndex = loNodes.Item(liIndex).Next.Index
ENDDO
FOR i = 1 TO loNodes.Count
IF loNodes.Item(i).Children > 0
liIndex = loNodes.Item(i).Child.Index
liTmp = liIndex
INSERT INTO (lcDBFName) VALUES ;
(loNodes.Item(liIndex).key, ;
loNodes.Item(liIndex).Parent.Key, ;
loNodes.Item(liIndex).Text)
DO WHILE liIndex <> loNodes.Item(liTmp).LastSibling.Index
INSERT INTO (lcDBFName) VALUES ;
(loNodes.Item(liIndex).Next.key, ;
loNodes.Item(liIndex).Next.Parent.Key, ;
loNodes.Item(liIndex).Next.Text)
liIndex = loNodes.Item(liIndex).Next.Index
ENDDO
ENDIF
NEXT
USE
Keywords: kbhowto kbctrl kbcode KB161735