我已经能在数据库中动态加载数了,因为值分了2个大的节点,所以主数(最外面的)相当于写死了,里面的内容是数据库读的,
现在想获取数中的值,(选中数)然后作为查询条件查询,
请问:怎么可取到数中的值(条件查询),注:选主数子数就全选了,我的数就2层(第二层是数据库读的)
谢谢 代码如下:
procedure Tform1.pdLoadBumen;
var
str:String;
i:Integer;
TNode:TTreenode;
begin
RzCheckTree1.Items.Clear;
with qryTree do
begin
close;
sql.Text:='select * from bumen where bm<80 order by bms';
open;
for i:=0 to 1 do
begin
if i=0 then
begin
str:='商场部';
end
else
begin
str:='天地部';
end;
TNode:=RzCheckTree1.Items.AddChild(nil,str);
TNode.ImageIndex :=0;
TNode.SelectedIndex:=0;
pdLoadFenBu(TNode);
end;
end;
end;procedure Tform1.pdLoadFenBu(aTvNode:TTreeNode);
var
str:string;
i:integer;
begin
str:=aTvNode.text;
//i:=Pos('[',str);
//if i=0 then Exit;
//str:=Copy(str,i+1,2);
with qrytree1 do
begin
Close;
if str='商场部' then
begin
sql.Text:='Select * from bumen where bm='+Quotedstr(str)+' or bm<80 order by bms ';
end
else
begin
sql.Text:='Select * from bumen where bm='+Quotedstr(str)+' or bm>=80 order by bms ';
end;
open;
while not eof do
begin
str:=qrytree1.fieldbyName('bms').AsString+'['+qrytree1.fieldbyName('bm').AsString+']';
(RzCheckTree1.Items.AddChild(aTvNode,str)).ImageIndex:=0 ;
Next;
end;
Close;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
form1:=nil;
end;procedure TForm1.FormShow(Sender: TObject);
begin
Form1.FormInit;
end;
现在想获取数中的值,(选中数)然后作为查询条件查询,
请问:怎么可取到数中的值(条件查询),注:选主数子数就全选了,我的数就2层(第二层是数据库读的)
谢谢 代码如下:
procedure Tform1.pdLoadBumen;
var
str:String;
i:Integer;
TNode:TTreenode;
begin
RzCheckTree1.Items.Clear;
with qryTree do
begin
close;
sql.Text:='select * from bumen where bm<80 order by bms';
open;
for i:=0 to 1 do
begin
if i=0 then
begin
str:='商场部';
end
else
begin
str:='天地部';
end;
TNode:=RzCheckTree1.Items.AddChild(nil,str);
TNode.ImageIndex :=0;
TNode.SelectedIndex:=0;
pdLoadFenBu(TNode);
end;
end;
end;procedure Tform1.pdLoadFenBu(aTvNode:TTreeNode);
var
str:string;
i:integer;
begin
str:=aTvNode.text;
//i:=Pos('[',str);
//if i=0 then Exit;
//str:=Copy(str,i+1,2);
with qrytree1 do
begin
Close;
if str='商场部' then
begin
sql.Text:='Select * from bumen where bm='+Quotedstr(str)+' or bm<80 order by bms ';
end
else
begin
sql.Text:='Select * from bumen where bm='+Quotedstr(str)+' or bm>=80 order by bms ';
end;
open;
while not eof do
begin
str:=qrytree1.fieldbyName('bms').AsString+'['+qrytree1.fieldbyName('bm').AsString+']';
(RzCheckTree1.Items.AddChild(aTvNode,str)).ImageIndex:=0 ;
Next;
end;
Close;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
form1:=nil;
end;procedure TForm1.FormShow(Sender: TObject);
begin
Form1.FormInit;
end;
解决方案 »
- UrlDownloadToFile这个函数怎么用呢?
- 新手求助,如何使用动态链接库?
- 招聘Delphi工程师(深圳)12月15日前有效
- Socket写失败的解决方案
- EXCEL导入DBGRID,列单元格格式不一直出现的问题,急!!!!!
- 『高分求教』如何创建最底层的窗体
- 请问HTTP协议下载文件???
- 怎样用API实现对窗体标题栏的控制?
- 我从Ahm网站下载的Ahm2002控件只能使几次就出错。
- 如何将串中的所有#13 #10(回车,换行)变成仅有#10(换行),有没有直接的转换方法?
- ListBox控件中一行中使用,如何象RICHTXT一样,每个字都能改变不同字体和颜色啊?在线等啊
- 新手要做B/S结构的管理系统,请大家给点建议
+A部门 ----相当于写死了
-B部门 ----相当于写死了
-B1部门 ----从数据库读的
-B2部门 ----从数据库读的
-B3部门 ----从数据库读的
-B4部门 ----从数据库读的
-B5部门 ----从数据库读的
-B6部门 ----从数据库读的
勾选完,就判断那个node被选中了,然后组织查找条件
这是人家原来写的 ,我有点看不明白请高人指点下! 最好写点注释,谢谢(我刚学DELPHI,这个是公司让做的面试题目)procedure TForm1.SpeedButton2Click(Sender: TObject);
//beginvar
I: INteger;
sBM,sFBM: string;
sStr: string;
begin
sBM:='';
sFBM:=''; for i:=0 to RzCheckTree1.Items.Count -1 do
begin
if RzCheckTree1.ItemState[i]=csunchecked then continue; if (RzCheckTree1.Items[i].Level=1) and
(RzCheckTree1.ItemState[(RzCheckTree1.Items[i].Parent).AbsoluteIndex]=csChecked) then Continue; if RzCheckTree1.ItemState[i]=cschecked then
begin
if RzCheckTree1.Items[i].Level=0 then
begin
sBM := Copy(RzCheckTree1.Items[i].Text,pos('[',RzCheckTree1.Items[i].Text)+1,2);
if sStr = '' then
sStr := '(DOC.BM='''+sBM+''')'
else
sStr := sStr+ ' or (DOC.BM='''+sBM+''')';
end
else
begin
sBM := Copy((RzCheckTree1.Items[i].Parent).Text,pos('[',(RzCheckTree1.Items[i].Parent).Text)+1,2);
sFBM := Copy((RzCheckTree1.Items[i]).Text,pos('[',(RzCheckTree1.Items[i]).Text)+1,2);
if sStr = '' then
sStr := '(DOC.BM='''+sBM+''' and DOC.FB='''+sFBM+''')'
else
sStr := sStr+ ' or (C.BM='''+sBM+''' and DOC.FB='''+sFBM+''')';
end;
end;
end;
// }
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select c.bms as 部门名称,count(*) as 数量,abs(sum(je)/100) as 金额,b.rq as 日期 from doc a join sfdata b on a.bh=b.bh join bumen c on a.bm=c.bm where a.bm<80 and b.jh>=20 ');
ADOQuery1.SQL.Add(' and b.rq >='+formatdateTime('YYYYMMDD',s_date.date)+' and b.rq <='+formatdateTime('YYYYMMDD',e_date.date)+' ');
if sStr <> '' then
ADOQuery1.SQL.Add('and ('+sStr+')');
ADOQuery1.SQL.Add(' group by c.bms,b.rq '); ADOQuery1.Active:=true;
dbgFrame.DataSource:=DataSource1;
end;
var
I: INteger;
sBM,sFBM: string;
sStr: string;
begin
sBM:='';
sFBM:=''; for i:=0 to RzCheckTree1.Items.Count -1 do//循环节点
begin
if RzCheckTree1.ItemState[i]=csunchecked then continue;//如果没有选中返回,继续执行for if (RzCheckTree1.Items[i].Level=1) and
(RzCheckTree1.ItemState[(RzCheckTree1.Items[i].Parent).AbsoluteIndex]=csChecked) then Continue;//如果是第二层并且父节点被选中,返回执行for if RzCheckTree1.ItemState[i]=cschecked then//节点被选中
begin
if RzCheckTree1.Items[i].Level=0 then//如果是最上级,下面就是开始拼查询条件了
begin
sBM := Copy(RzCheckTree1.Items[i].Text,pos('[',RzCheckTree1.Items[i].Text)+1,2);
if sStr = '' then
sStr := '(DOC.BM='''+sBM+''')'
else
sStr := sStr+ ' or (DOC.BM='''+sBM+''')';
end
else
begin
sBM := Copy((RzCheckTree1.Items[i].Parent).Text,pos('[',(RzCheckTree1.Items[i].Parent).Text)+1,2);
sFBM := Copy((RzCheckTree1.Items[i]).Text,pos('[',(RzCheckTree1.Items[i]).Text)+1,2);
if sStr = '' then
sStr := '(DOC.BM='''+sBM+''' and DOC.FB='''+sFBM+''')'
else
sStr := sStr+ ' or (C.BM='''+sBM+''' and DOC.FB='''+sFBM+''')';
end;
end;
end;
// }
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select c.bms as 部门名称,count(*) as 数量,abs(sum(je)/100) as 金额,b.rq as 日期 from doc a join sfdata b on a.bh=b.bh join bumen c on a.bm=c.bm where a.bm<80 and b.jh>=20 ');
ADOQuery1.SQL.Add(' and b.rq >='+formatdateTime('YYYYMMDD',s_date.date)+' and b.rq <='+formatdateTime('YYYYMMDD',e_date.date)+' ');
if sStr <> '' then
ADOQuery1.SQL.Add('and ('+sStr+')');
ADOQuery1.SQL.Add(' group by c.bms,b.rq '); ADOQuery1.Active:=true;
dbgFrame.DataSource:=DataSource1;
end;