我用数据库表做了个商品分类的树型结构。
表结构如下 id name parentId level
每个treenode 的data属性放了id
结构如下:
type
PMyInt = ^TMyInt;
TMyInt = record
CurrentID: string;
end;
更改 name按钮的click事件如下:
procedure TInfo_frm.TreeViewEdited(Sender: TObject; Node: TTreeNode;
var S: String);
var
CurrentID,sqlStr:String;
begin CurrentID:=PMyInt(Node.Data)^.CurrentID;
//---------------更新结点信息----------------
with DataModule2 do
begin
sqlStr:='update 类别 set Name='+#39+S+#39+' where id='+#39+CurrentID+#39;
Query.SQL.Clear;
Query.SQL.Add(sqlStr);
Query.ExecSQL;
end;
end;
删除类型的按钮事件如下:
procedure TInfo_frm.DelTypeClick(Sender: TObject);
var
ID,sqlStr:String;
begin
if MessageDlg('删除类型将删除该类商品信息! 确认删除?',mtConfirmation,[mbYes,mbNo],0)=mrYes then
begin
ID:=PMyInt(TreeView.selected.Data)^.CurrentID;
With DataModule2 do
begin
sqlStr:='delete from 类别 where ID='+#39+ID+#39;
Query.SQL.Clear;
Query.SQL.Add(sqlStr);
Query.ExecSQL;
end;
Treeview.Items.Delete(Treeview.Selected);
end;
end;
当我新建结点后点击更改名称或删除结点时执行到下边
CurrentID:=PMyInt(Node.Data)^.CurrentID;
或
ID:=PMyInt(TreeView.selected.Data)^.CurrentID;
出现错误:access violation at address 0052CEAB in module 'Project1.exe' Read of
address 00000000
还有就是关掉程序第二次启动就行了
新建后马上删除就出现问题
这是什么问题
表结构如下 id name parentId level
每个treenode 的data属性放了id
结构如下:
type
PMyInt = ^TMyInt;
TMyInt = record
CurrentID: string;
end;
更改 name按钮的click事件如下:
procedure TInfo_frm.TreeViewEdited(Sender: TObject; Node: TTreeNode;
var S: String);
var
CurrentID,sqlStr:String;
begin CurrentID:=PMyInt(Node.Data)^.CurrentID;
//---------------更新结点信息----------------
with DataModule2 do
begin
sqlStr:='update 类别 set Name='+#39+S+#39+' where id='+#39+CurrentID+#39;
Query.SQL.Clear;
Query.SQL.Add(sqlStr);
Query.ExecSQL;
end;
end;
删除类型的按钮事件如下:
procedure TInfo_frm.DelTypeClick(Sender: TObject);
var
ID,sqlStr:String;
begin
if MessageDlg('删除类型将删除该类商品信息! 确认删除?',mtConfirmation,[mbYes,mbNo],0)=mrYes then
begin
ID:=PMyInt(TreeView.selected.Data)^.CurrentID;
With DataModule2 do
begin
sqlStr:='delete from 类别 where ID='+#39+ID+#39;
Query.SQL.Clear;
Query.SQL.Add(sqlStr);
Query.ExecSQL;
end;
Treeview.Items.Delete(Treeview.Selected);
end;
end;
当我新建结点后点击更改名称或删除结点时执行到下边
CurrentID:=PMyInt(Node.Data)^.CurrentID;
或
ID:=PMyInt(TreeView.selected.Data)^.CurrentID;
出现错误:access violation at address 0052CEAB in module 'Project1.exe' Read of
address 00000000
还有就是关掉程序第二次启动就行了
新建后马上删除就出现问题
这是什么问题
var
sqlStr,CurrentID:String;
tmpNode:TTreeNode;begin
with DataModule2 do
begin
sqlStr:='insert into 类别(name,ParentID,Level) Values('+#39+'新类型'+#39
+','+#39+'0'+#39+','+#39+'0'+#39+')';
//Edit1.Text:=sqlStr;
Query.SQL.Clear;
Query.SQL.Add(sqlStr);
Query.ExecSQL;
{ComType.Insert;
ComType.FieldByName('Name').AsString:='新类型';
ComType.FieldByName('ParentID').AsInteger:=0;
ComType.FieldByName('Level').AsInteger:=0;
ComType.Post; }
// Edit1.Text:=Query.fieldByName('ID').AsString;//----------取得插入结点的ID--------------
sqlStr:='select max(id) as ID from 类别';
Query.SQL.Clear;
Query.sql.Add(sqlStr);
Query.Open;
CurrentID:=Query.fieldByName('ID').AsString;
//--------当前id赋予结点中--------------------
new(DataPtr[Nodes]);
DataPtr[Nodes]^.CurrentID:=CurrentID;
Nodes:=Nodes+1;
//------------加入treeView中显示-----------------------------
tmpNode:=Treeview.Items.AddObject(nil,'新类型',DataPtr[Nodes]);
tmpNode.ImageIndex:=0;
tmpNode.SelectedIndex:=1;
TreeView.Refresh;
end;
end;以上是新建结点的程序