请问delphi的treeview组件如何与sqlserver数据库相连? 谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //BDE{$R *.dfm}procedure TfrmDemoTree.ConnectDB;begin //判定数据模块是否已经存在, sbDemo.SimpleText := ' 正在连接数据库,请稍候...... '; if not Assigned(dmDemoTree) then dmDemoTree := TdmDemoTree.create(Application);// showmessage(BoolToStr(dmDemoTree.dbDBETree.Connected)); if dmDemoTree.dbDBETree.connected = false then begin //连接数据库 try with dmDemoTree.dbDBETree do begin DatabaseName := name; Params.Clear; Params.Add('USER NAME=Test'); Params.Add('PASSWORD='); AliasName := 'MyTest'; LoginPrompt := false; Connected := true; //连接 mem_strDBName := AliasName; toolbtnBuildTree.Enabled := true; toolbtnDiscnDB.Enabled := true; mmOperate_BuildTree.Enabled := true; mmOperate_DiscnDB.Enabled := true; end; Except on Exception do //错误处理 begin ShowMessage('连接数据库失败,请检查网络是否通路!'); end; end; end; sbDemo.SimpleText := ' ';end;procedure TfrmDemoTree.DisConnectDb;begin mem_strDBName := ''; //清空数据库名及一些环境设置 toolbtnBuildTree.Enabled := false; toolbtnDiscnDB.Enabled := false; mmOperate_BuildTree.Enabled := false; mmOperate_DiscnDB.Enabled := false; dmDemoTree.dbDBETree.Connected := false;end;procedure TfrmDemoTree.ExecQry(mSQL: string; mQry: tquery; mIsSelect: Boolean);begin //执行SQL语句 mQry.Close; mQry.SQL.Clear; mQry.SQL.Add(mSQL); mQry.DatabaseName := mem_strDBName; if mIsSelect then mQry.Open else mQry.ExecSQL;end;procedure TfrmDemoTree.FormShow(Sender: TObject);//初始化环境设置begin toolbtnBuildTree.Enabled := False; mmOperate_BuildTree.Enabled := False; toolbtnDiscnDB.Enabled := false; mmOperate_DiscnDB.Enabled := false;end;procedure TfrmDemoTree.toolbtnCnDBClick(Sender: TObject);begin ConnectDB;end;procedure TfrmDemoTree.toolbtnDiscnDBClick(Sender: TObject);begin DisConnectDb; //清空树、ListViwe if tvDemoTree.Items.Count <> 0 then tvDemoTree.Items.Clear; if lvDemoTree.Items.Count <> 0 then lvDemoTree.Items.Clear;end;procedure TfrmDemoTree.mmOperate_DiscnDBClick(Sender: TObject);begin DisConnectDb; //清空树、ListViwe if tvDemoTree.Items.Count <> 0 then tvDemoTree.Items.Clear; if lvDemoTree.Items.Count <> 0 then lvDemoTree.Items.Clear;end;procedure TfrmDemoTree.mmOperate_CnDBClick(Sender: TObject);begin ConnectDB;end;procedure TfrmDemoTree.BuildTree(mP_TreeNode: TTreeNode; mPid: integer);//用递归一次性生成所有树节点var idTemp:integer; strSQL:string; qryTemp:TQuery; TrNodeTemp:TTreeNode;begin TrNodeTemp := mP_TreeNode; qryTemp := TQuery.Create(self); try strSQL := ' select id,name ' + ' from Tcity ' + ' where Parentid='+inttostr(mpid); ExecQry(strSQL,qryTemp,true); while not qryTemp.Eof do begin idTemp := qryTemp.fieldbyname('id').AsInteger; tvDemoTree.Selected := tvDemoTree.Items.AddChild(TrNodeTemp,qryTemp.fieldbyname('name').AsString); BuildTree(tvDemoTree.Selected,idTemp); qryTemp.Next; end; finally qryTemp.Free; //释放资源 end;end;procedure TfrmDemoTree.InitListView;//初始化ListViewvar name,strSQL:string; lvItem:TListItem; Tempqry:TQuery;begin Tempqry := TQuery.Create(self); try lvDemoTree.Items.Clear; //清空 name := tvDemoTree.Selected.Text; strSQL := ' select id ' + ' from Tcity ' + ' where name='''+name+''''; ExecQry(strSQL,dmDemoTree.qryLV,true); if not dmDemoTree.qryLV.Eof then begin strSQL := ' select * ' + ' from Tcity where parentid=' + inttostr(dmDemoTree.qryLV.fieldbyname('id').asinteger); ExecQry(strSQL,dmDemoTree.qryLV,true); while not dmDemoTree.qryLV.Eof do begin lvItem := lvDemoTree.Items.Add; lvItem.Caption := inttostr(dmDemoTree.qryLV.fieldbyname('id').AsInteger); lvItem.SubItems.Add(dmDemoTree.qryLV.fieldbyname('name').AsString); strSQL := ' select name ' + ' from Tcity ' + ' where id=' + inttostr(dmDemoTree.qryLV.fieldbyname('parentid').AsInteger); ExecQry(strSQL,Tempqry,true); lvItem.SubItems.Add(Tempqry.fieldbyname('name').AsString); dmDemoTree.qryLV.Next; end; end; finally Tempqry.Free; end;end;procedure TfrmDemoTree.InitTree;begin tvDemoTree.Items.BeginUpdate; tvDemoTree.Items.Clear; BuildTree(nil,0); tvDemoTree.Items.EndUpdate;end;procedure TfrmDemoTree.mmFile_ExitClick(Sender: TObject);begin close;end;procedure TfrmDemoTree.toolbtnExitClick(Sender: TObject);begin close;end;procedure TfrmDemoTree.tvDemoTreeClick(Sender: TObject);begin if tvDemoTree.Items.Count <> 0 then //对数为空进行特殊处理 begin lvDemoTree.Items.BeginUpdate; InitListView; lvDemoTree.Items.EndUpdate; end;end;procedure TfrmDemoTree.toolbtnBuildTreeClick(Sender: TObject);begin InitTree;end;procedure TfrmDemoTree.mmOperate_BuildTreeClick(Sender: TObject);begin InitTree;end;procedure TfrmDemoTree.tvDemoTreeMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin sbDemo.SimpleText := ' This is a TreeView!';end;procedure TfrmDemoTree.lvDemoTreeMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin sbDemo.SimpleText := ' This is a ListView!';end;procedure TfrmDemoTree.toolbtnExitMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin sbDemo.SimpleText := ' 关闭按钮,退出请点击!';end;procedure TfrmDemoTree.toolbtnCnDBMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin sbDemo.SimpleText := ' 连接数据库按钮,需要连接数据库请点击!';end;procedure TfrmDemoTree.toolbtnDiscnDBMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin sbDemo.SimpleText := ' 断开数据连接按钮,需要断开数据库请点击!';end;procedure TfrmDemoTree.toolbtnBuildTreeMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin sbDemo.SimpleText := ' 树生成按钮,需要生成树节点请点击!';end;procedure TfrmDemoTree.toolbDemoTreeMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin sbDemo.SimpleText := '';end;procedure TfrmDemoTree.sbDemoMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin sbDemo.SimpleText := '';end;end. //ADO{$R *.dfm}{ TfrmTreeTest }procedure TfrmTreeTest.ExecADOQry(strSQL: String; adoqry: TADOQuery; IsSelect: Boolean);begin adoqry.Close; if adocnTreeTest.Connected = False then adocnTreeTest.Connected := True; adoqry.Connection := adocnTreeTest; adoqry.SQL.Clear; adoqry.SQL.Add(strSQL); if IsSelect then adoqry.Open else adoqry.ExecSQL;end;procedure TfrmTreeTest.BuildTree(P_TreeNode: TTreeNode; Pid: integer);var idTemp:integer; strSQL:string; adoqryTemp:TADOQuery; TrNodeTemp:TTreeNode;begin TrNodeTemp := P_TreeNode; adoqryTemp := TADOQuery.Create(self); try{ if P_TreeNode = nil then begin } strSQL := ' select id,name ' + ' from Tcity ' + ' where Parentid='+inttostr(pid); ExecADOQry(strSQL,adoqryTemp,true); while not adoqryTemp.Eof do begin idTemp := adoqryTemp.fieldbyname('id').AsInteger; tvTest.Selected := tvTest.Items.AddChild(TrNodeTemp,adoqryTemp.fieldbyname('name').AsString); BuildTree(tvTest.Selected,idTemp); adoqryTemp.Next; end; finally adoqryTemp.Free; end;end; 关于线程终止的问题! TGraphicControl TLabel 之间的类型转换 TWordApplication操作word如何禁用工具栏按钮,如打印按钮? 请问一个有趣的数学算法问题!答者有分!!! 有谁写过数据库登陆参数设置的窗口啊 delphi中如何处理哈希表的功能 sdwtao进来看 编程怎样知道计算机上安装了哪些软件? delphi6.0在98下面运行是否容易死机? 一个Delphi大Bug?!请给予回答 否则我拆了Delphi 经举报发现 tgmgj SQL5560 间存在严重的倒分现象,现作出处理如下: 如何用listview实现类资源管理器的功能
begin
//判定数据模块是否已经存在,
sbDemo.SimpleText := ' 正在连接数据库,请稍候...... ';
if not Assigned(dmDemoTree) then
dmDemoTree := TdmDemoTree.create(Application);
// showmessage(BoolToStr(dmDemoTree.dbDBETree.Connected));
if dmDemoTree.dbDBETree.connected = false then
begin
//连接数据库
try
with dmDemoTree.dbDBETree do
begin
DatabaseName := name;
Params.Clear;
Params.Add('USER NAME=Test');
Params.Add('PASSWORD=');
AliasName := 'MyTest';
LoginPrompt := false;
Connected := true; //连接
mem_strDBName := AliasName;
toolbtnBuildTree.Enabled := true;
toolbtnDiscnDB.Enabled := true;
mmOperate_BuildTree.Enabled := true;
mmOperate_DiscnDB.Enabled := true;
end;
Except
on Exception do //错误处理
begin
ShowMessage('连接数据库失败,请检查网络是否通路!');
end;
end;
end;
sbDemo.SimpleText := ' ';
end;procedure TfrmDemoTree.DisConnectDb;
begin
mem_strDBName := ''; //清空数据库名及一些环境设置
toolbtnBuildTree.Enabled := false;
toolbtnDiscnDB.Enabled := false;
mmOperate_BuildTree.Enabled := false;
mmOperate_DiscnDB.Enabled := false;
dmDemoTree.dbDBETree.Connected := false;
end;procedure TfrmDemoTree.ExecQry(mSQL: string; mQry: tquery; mIsSelect: Boolean);
begin
//执行SQL语句
mQry.Close;
mQry.SQL.Clear;
mQry.SQL.Add(mSQL);
mQry.DatabaseName := mem_strDBName;
if mIsSelect then
mQry.Open
else
mQry.ExecSQL;
end;procedure TfrmDemoTree.FormShow(Sender: TObject);
//初始化环境设置
begin
toolbtnBuildTree.Enabled := False;
mmOperate_BuildTree.Enabled := False;
toolbtnDiscnDB.Enabled := false;
mmOperate_DiscnDB.Enabled := false;
end;procedure TfrmDemoTree.toolbtnCnDBClick(Sender: TObject);
begin
ConnectDB;
end;procedure TfrmDemoTree.toolbtnDiscnDBClick(Sender: TObject);
begin
DisConnectDb;
//清空树、ListViwe
if tvDemoTree.Items.Count <> 0 then
tvDemoTree.Items.Clear;
if lvDemoTree.Items.Count <> 0 then
lvDemoTree.Items.Clear;
end;procedure TfrmDemoTree.mmOperate_DiscnDBClick(Sender: TObject);
begin
DisConnectDb;
//清空树、ListViwe
if tvDemoTree.Items.Count <> 0 then
tvDemoTree.Items.Clear;
if lvDemoTree.Items.Count <> 0 then
lvDemoTree.Items.Clear;
end;procedure TfrmDemoTree.mmOperate_CnDBClick(Sender: TObject);
begin
ConnectDB;
end;procedure TfrmDemoTree.BuildTree(mP_TreeNode: TTreeNode; mPid: integer);
//用递归一次性生成所有树节点
var
idTemp:integer;
strSQL:string;
qryTemp:TQuery;
TrNodeTemp:TTreeNode;
begin
TrNodeTemp := mP_TreeNode;
qryTemp := TQuery.Create(self);
try
strSQL := ' select id,name '
+ ' from Tcity '
+ ' where Parentid='+inttostr(mpid);
ExecQry(strSQL,qryTemp,true);
while not qryTemp.Eof do
begin
idTemp := qryTemp.fieldbyname('id').AsInteger;
tvDemoTree.Selected := tvDemoTree.Items.AddChild(TrNodeTemp,qryTemp.fieldbyname('name').AsString);
BuildTree(tvDemoTree.Selected,idTemp);
qryTemp.Next;
end;
finally
qryTemp.Free; //释放资源
end;
end;procedure TfrmDemoTree.InitListView;
//初始化ListView
var
name,strSQL:string;
lvItem:TListItem;
Tempqry:TQuery;
begin
Tempqry := TQuery.Create(self);
try
lvDemoTree.Items.Clear; //清空
name := tvDemoTree.Selected.Text;
strSQL := ' select id '
+ ' from Tcity '
+ ' where name='''+name+'''';
ExecQry(strSQL,dmDemoTree.qryLV,true);
if not dmDemoTree.qryLV.Eof then
begin
strSQL := ' select * '
+ ' from Tcity where parentid='
+ inttostr(dmDemoTree.qryLV.fieldbyname('id').asinteger);
ExecQry(strSQL,dmDemoTree.qryLV,true);
while not dmDemoTree.qryLV.Eof do
begin
lvItem := lvDemoTree.Items.Add;
lvItem.Caption := inttostr(dmDemoTree.qryLV.fieldbyname('id').AsInteger);
lvItem.SubItems.Add(dmDemoTree.qryLV.fieldbyname('name').AsString);
strSQL := ' select name '
+ ' from Tcity '
+ ' where id='
+ inttostr(dmDemoTree.qryLV.fieldbyname('parentid').AsInteger);
ExecQry(strSQL,Tempqry,true);
lvItem.SubItems.Add(Tempqry.fieldbyname('name').AsString);
dmDemoTree.qryLV.Next;
end;
end;
finally
Tempqry.Free;
end;
end;procedure TfrmDemoTree.InitTree;
begin
tvDemoTree.Items.BeginUpdate;
tvDemoTree.Items.Clear;
BuildTree(nil,0);
tvDemoTree.Items.EndUpdate;
end;procedure TfrmDemoTree.mmFile_ExitClick(Sender: TObject);
begin
close;
end;procedure TfrmDemoTree.toolbtnExitClick(Sender: TObject);
begin
close;
end;procedure TfrmDemoTree.tvDemoTreeClick(Sender: TObject);
begin
if tvDemoTree.Items.Count <> 0 then //对数为空进行特殊处理
begin
lvDemoTree.Items.BeginUpdate;
InitListView;
lvDemoTree.Items.EndUpdate;
end;
end;procedure TfrmDemoTree.toolbtnBuildTreeClick(Sender: TObject);
begin
InitTree;
end;procedure TfrmDemoTree.mmOperate_BuildTreeClick(Sender: TObject);
begin
InitTree;
end;procedure TfrmDemoTree.tvDemoTreeMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
sbDemo.SimpleText := ' This is a TreeView!';
end;procedure TfrmDemoTree.lvDemoTreeMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
sbDemo.SimpleText := ' This is a ListView!';
end;procedure TfrmDemoTree.toolbtnExitMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
sbDemo.SimpleText := ' 关闭按钮,退出请点击!';
end;procedure TfrmDemoTree.toolbtnCnDBMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
sbDemo.SimpleText := ' 连接数据库按钮,需要连接数据库请点击!';
end;procedure TfrmDemoTree.toolbtnDiscnDBMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
sbDemo.SimpleText := ' 断开数据连接按钮,需要断开数据库请点击!';
end;procedure TfrmDemoTree.toolbtnBuildTreeMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
sbDemo.SimpleText := ' 树生成按钮,需要生成树节点请点击!';
end;procedure TfrmDemoTree.toolbDemoTreeMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
sbDemo.SimpleText := '';
end;procedure TfrmDemoTree.sbDemoMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
sbDemo.SimpleText := '';
end;end.
IsSelect: Boolean);
begin
adoqry.Close;
if adocnTreeTest.Connected = False then
adocnTreeTest.Connected := True;
adoqry.Connection := adocnTreeTest;
adoqry.SQL.Clear;
adoqry.SQL.Add(strSQL);
if IsSelect then
adoqry.Open
else
adoqry.ExecSQL;
end;procedure TfrmTreeTest.BuildTree(P_TreeNode: TTreeNode; Pid: integer);
var
idTemp:integer;
strSQL:string;
adoqryTemp:TADOQuery;
TrNodeTemp:TTreeNode;
begin
TrNodeTemp := P_TreeNode;
adoqryTemp := TADOQuery.Create(self);
try
{ if P_TreeNode = nil then
begin }
strSQL := ' select id,name '
+ ' from Tcity '
+ ' where Parentid='+inttostr(pid);
ExecADOQry(strSQL,adoqryTemp,true);
while not adoqryTemp.Eof do
begin
idTemp := adoqryTemp.fieldbyname('id').AsInteger;
tvTest.Selected := tvTest.Items.AddChild(TrNodeTemp,adoqryTemp.fieldbyname('name').AsString);
BuildTree(tvTest.Selected,idTemp);
adoqryTemp.Next;
end;
finally
adoqryTemp.Free;
end;
end;