简单的描述下:左边是TreeView,右边是DBGrid;现在通过ADOQuery、DataSource等控件把数据库(SQL)中的表d_Department和d_Employee(字段吧)放到TreeView和DBGrid中。TreeView中放的是部门(如财务部,研发部等),DBGrid中放的是其职员对应的信息。也就是点财务部,DBGrid就出现其对应的职员。明白吧?现在表d_Department和d_Employee中有字段id和Did,他们的关系是对应的。
求知道的帮帮忙,我是初学者啊,很多不是很了解的。这是截图,举个例子,大家应该懂的。
求知道的帮帮忙,我是初学者啊,很多不是很了解的。这是截图,举个例子,大家应该懂的。
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, ComCtrls, Grids, DBGrids, StdCtrls;type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
ADOQuery1: TADOQuery;
ADOQuery2: TADOQuery;
TreeView1: TTreeView;
DataSource1: TDataSource;
procedure FormCreate(Sender: TObject);
procedure TreeView1Click(Sender: TObject);
// procedure TreeView1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
var
str: String;
m: TTreeNode;
begin
with ADOQuery1 do
begin
close;
SQL.Clear;
SQL.Add('SELECT * FROM d_Department WHERE parid = ''00000'' ');
open; First;
m := TreeView1.Items.AddChild(nil, '所有部门');
while not Eof do
begin
str := FieldByName('FullName').AsString;
TreeView1.Items.AddChild(m, str);
Next;
end; end;
end;
procedure TForm1.TreeView1Click(Sender: TObject);
var
GetStr: TTreeNode;
begin
GetStr := TreeView1.Selected;
with ADOQuery2 do
begin
close;
SQL.Clear;
SQL.Add('SELECT * FROM d_Employee WHERE parid = ''00000'' ');
//SQL.Add('SELECT * FROM d_Employee WHERE Did = X');
//Parameters.ParamByName('X').Value := GetStr;
open;
end;
end;end.这是代码,写得很烂,没实现功能。
是这样的,以前我是用GetStr := TreeView1.Selected;这个来实现的,现在数据库里面没有对应的部门,而是改用Did和id,现在同过这个来建立关系。
真的不知道怎么下手哦,烦呐……
begin
str := FieldByName('FullName').AsString;
strID := FieldByName('部门id').AsString;
node := TreeView1.Items.AddChild(m, str);
node.tag := strID;
Next;
end;然后,当点击部门树的时候获取到‘部门id’
GetStr := TreeView1.Selected;
strID := TreeView1.Selected.tag;最后。搜索的时候用 部门id 搜索
SQL.text := 'SELECT * FROM d_Employee WHERE Did = '+strID;
1.创建一个部门类 TDeptClas = Class(TObject)
2.把部门数据从数据库中查出来,并把数据通过对象形式存到TreeView1中
3.然后每次点击部门节点时,就可以根据部门ID并联出相应的数据到DBGRID了。如:
Type
TDeptClas = Class(TObject)
private;
FDeptId: string;
FDeptName: string;
protected;
public;
published;
property DeptId: string write FDeptId read FDeptId;
property DeptName: string write FDeptName read FDeptName;
end;
取数据:
var
Obj: TDeptClas;
begin
Qry.First;
while not eof do
begin
Obj := TDept.Create;
Obj.DeptId := Qry.FieldByName('DeptId').AsString;
Obj.DeptName := Qry.FieldByName('DeptName').AsString;
Tv.Items.AddObject(Obj,Obj.DeptName);
Qry.Next;
end;
end;TV的onChange事件
var
Obj: TDeptClas;
sSql: string;
begin
if TV.Selected = nil then Exit;
if TV.Selected.data = nil then Exit;
Obj := TDeptClas(TV.Selected.Data);
sSql := 'Select * from d_Employee where parid ='+QuotedStr(Obj.DeptId);
Qry.Close;
Qry.SQL.Clear;
Qry.SQL.Add(sSql);
Qry.Open;
end;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, ComCtrls, Grids, DBGrids, StdCtrls;type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
ADOQuery1: TADOQuery;
ADOQuery2: TADOQuery;
TreeView1: TTreeView;
DataSource1: TDataSource;
ADOQuery3: TADOQuery;
procedure FormCreate(Sender: TObject);
procedure TreeView1Click(Sender: TObject);
private
{ Private declarations }
procedure InitChild(Node:TTreeNode);
public
{ Public declarations }
end;var
Form1: TForm1;implementation
{$R *.dfm}
procedure query(ado: TADOQuery; sql: string); //过程声明,查询语句
begin
ado.Close;
ado.SQL.Clear;
ado.SQL.Add(sql);
ado.Open;
end;procedure TForm1.FormCreate(Sender: TObject);
var
Node: TTreeNode;
begin
//InitTree(TreeView1, ADOQuery1, ADOQuery2, ''); //过程调用
Node := TreeView1.Items.AddChild(nil, '所有部门');
InitChild(Node);
end;procedure TForm1.InitChild(Node: TTreeNode);
var
strSQL: string;
qry: TADOQuery;
ANode: TTreeNode;
begin
strSQL := Format('SELECT * FROM d_Department WHERE ParID = ' +
'(SELECT ID FROM d_Department WHERE FullName = %s)', [QuotedStr(Node.Text)]);
qry := TADOQuery.Create(nil);
qry.ConnectionString := 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=金如意基础版开发;Data Source=FUCHUANG';
query(qry, strSQL);
qry.First;
while not qry.Eof do
begin
ANode := TreeView1.Items.AddChild(Node, qry.FieldByName('FullName').AsString);
InitChild(ANode);
qry.Next;
end;
end;procedure TForm1.TreeView1Click(Sender: TObject);
var
GetStr: string;
begin
GetStr := TreeView1.Selected.Text; //把值赋给GetStr
with ADOQuery3 do
begin
ADOQuery3.close;
ADOQuery3.SQL.Clear;
ADOQuery3.SQL.Add('SELECT * FROM d_Employee WHERE Did = (SELECT id FROM d_Department WHERE FullName = ''' + GetStr + ''')');
ADOQuery3.open;
end;
end;end.上面的GetStr就是通过text获取的,我现在要id。求解啊。