数据结构如下
表 inventory
cinvcode(存货编码) cinvname(产品名称) cinvccode(大类码)
1A001120 C03-1醇酸磁漆 1A001
1A002520 C03-1 1A002
表 inventoryclass
cinvccode(大类码) cinvcname(大类名称)
1A001 醇酸漆
1A002 C03-1
主要代码
with adoquery1 do
begin
close;
sql.Clear;
sql.add('DECLARE @var1 varchar(50)');
SQL.Add('select @var1=cinvccode from inventoryclass');
sql.Add('where cinvcname=:s1');
parameters.ParamByName('s1').Value:=trim(treeview1.selected.text);
SQL.Add('select * from inventory a');
sql.Add('where left(a.cinvcode,5)=@VAR1');
end当treeview改变时,只能过滤出C03-1,而C03-1醇酸磁漆过滤不出来
查看其他的发现当'大类名称'是英文和数字是可以过滤出数据,而当鼠标选中的'大类名称'是英文加汉字时,数据好象就传递不过来.请问这是怎么回事.
表 inventory
cinvcode(存货编码) cinvname(产品名称) cinvccode(大类码)
1A001120 C03-1醇酸磁漆 1A001
1A002520 C03-1 1A002
表 inventoryclass
cinvccode(大类码) cinvcname(大类名称)
1A001 醇酸漆
1A002 C03-1
主要代码
with adoquery1 do
begin
close;
sql.Clear;
sql.add('DECLARE @var1 varchar(50)');
SQL.Add('select @var1=cinvccode from inventoryclass');
sql.Add('where cinvcname=:s1');
parameters.ParamByName('s1').Value:=trim(treeview1.selected.text);
SQL.Add('select * from inventory a');
sql.Add('where left(a.cinvcode,5)=@VAR1');
end当treeview改变时,只能过滤出C03-1,而C03-1醇酸磁漆过滤不出来
查看其他的发现当'大类名称'是英文和数字是可以过滤出数据,而当鼠标选中的'大类名称'是英文加汉字时,数据好象就传递不过来.请问这是怎么回事.
begin
close;
sql.Clear;
sql.add('DECLARE @var1 varchar(50)');
SQL.Add('select @var1=cinvccode from inventoryclass');
sql.Add('where cinvcname=:s1');
parameters.ParamByName('s1').Value:=trim(treeview1.selected.text);
SQL.Add('select * from inventory a');
sql.Add('where a.cinvccode=@VAR1');//为什么不这样写
end
或者直接
select * from inventory a join
inventoryclass b on b.cinvccode=a.cinvccode and
b.cinvcname=isnull(:s1,b.cinvcname)
具体数据库如下:
表 inventotyclasscinvccode(大类码) cinvcname(大类名称) iinvcgrade(等级)
1 产成品 1
1A 氨基漆 2
1A001 A01-1氨基烘干清漆 3
1A002 A01-2氨基烘干清漆 3
1A026 中国蓝氨基醇酸锤纹烘 3
1A027 中国兰发动机锤纹漆 3
1A028 朱红超快干磁漆 3 1
1A029 A04-1自干氨基磁漆 3
1A0292 白 4
1A0293 红 4
1A032 A936 3
1A0325 蓝色 4
1B 丙烯漆 2
1B001 B01-15丙烯酸清漆 3
1B002 B01-3丙烯酸清漆 3
1B003 B01-34丙烯酸烘干清漆 3
1B004 B01-5丙烯酸清漆 3
1B005 B01-6丙烯酸清漆 3
1B006 B04-2丙烯酸工程磁漆 3
1B0062 白色 4
1B0063 红色 4
1B0064 黄色 4
1B0065 兰色 4
1B0066 绿色 4
1B007 B04-6丙烯酸磁漆 3
1B0072 白色 4
1B0073 红色 4
1B0074 黄色 4
1B0075 兰色 4
1B008 B04-60丙烯酸半光磁漆 3
1B0085 兰色 4
表 inventory cinvcode(产品编码) cinvname(存货名称) cinvccode(所属大类)
1A001100 A01-1氨基烘干清漆 1A001
1A002100 A01-2氨基烘干清漆 1A002
1A003100 A01-6氨基烘干清漆 1A003
1A004303 A04-14桔红氨基烘干静电磁漆 1A0043
1A004400 A04-14黄色氨基烘干静电磁漆 1A0044
1A005211 A04-60灰氨基半光烘干磁漆 1A0052
1A005228 A04-60中绿灰氨基半光烘干磁漆 1A0052
1A005228G A04-60中绿灰氨基半光烘干磁漆(国标) 1A0052
1A005228biG A04-60中绿灰氨基半光烘干磁漆(172专用)(国标)1A0052
1A005213zb A04-60淡灰氨基半光烘干磁漆(20所专板) 1A0052
1A005216 A04-60银灰氨基半光烘干磁漆 1A0052
1A005200 A04-60白氨基半光烘干磁漆 1A0052
1A005216bj A04-60银灰氨基半光烘干磁漆(182专用) 1A0052
1A005266dp A04-60淡灰白氨基半光烘干磁漆(太原专板) 1A0052
1A005217G A04-60海灰氨基半光烘干磁漆(国标) 1A0052
1A005211zb A04-60灰氨基半光烘干磁漆(专板) 1A0052
1A005232zb A04-60氨基半光磁漆 1A0052
1A005300 A04-60红氨基半光烘干磁漆 1A0053
1B001100 B01-15丙稀酸清漆 1B001
1B002110 B01-3辊涂清漆 1B002
1B002100 B01-3丙烯酸清漆 1B002
1B003100 B01-34丙烯酸烘干清漆 1B003
1B005100 B01-6丙烯酸清漆 1B005
1B006200 B04-2白丙稀酸工程漆 1B0062
1B006213 B04-2淡灰丙稀酸工程磁漆 1B0062
1B006213cx B04-2淡灰丙烯酸工程磁漆(瑞达专用) 1B0062
1B006213ba B04-6淡灰丙烯酸工程磁漆(韦曲专板) 1B0062
1B006304ac B04-2砖红丙烯酸工程磁漆(西变专板)(雅特专用)1B0063
1B006304 B04-2砖红丙烯酸工程磁漆 1B0063
1B006400do B04-2黄丙烯酸工程磁漆(三捷专板) 1B0064
1B006532zb B04-2孔雀兰丙烯酸工程磁漆(专板) 1B0065
1B006500zb B04-2兰丙烯酸工程磁漆(专板) 1B0065
1B006500(W) B04-2孔雀兰丙烯酸工程磁漆(RAL5017专板) 1B0065
表 currentstock
cinvcode(存货编码) iquantity(结存数量) 一inum(结存件数) cfree1(包装) 1A001100 .000000 .000000 10L/9
1A001100 36.000000 4.000000 10L/9
1A001100 207.000000 23.000000 10L/9
1A002100 9.000000 1.000000 10L/9
1A002100 2.000000 1.000000 4L/2
1A004303 15.000000 1.000000 16L/15
1A005200 .000000 .000000 10L/12
1A005200 .000000 .000000 10L/12
1A005200 384.000000 32.000000 10L/12
1A005200 336.000000 28.000000 10L/12
1A005211 .000000 .000000 10L/11
1A005211 .000000 .000000 10L/12
1A005211 .000000 .000000 10L/10
1A005211 .000000 .000000 10L/12
1A005211 .000000 .000000 10L/11
1A005211 .000000 .000000 10L/12
1A005300 22.000000 2.000000 10L/11
1A005300 6.000000 1.000000 10L/6
1A005300zb 27.000000 3.000000 10L/9
1A005507 12.000000 1.000000 10L/12
1A005800 .000000 .000000 10L/11
1A005800 .000000 .000000 10L/11
1A005800 880.000000 80.000000 10L/11
1A005800 836.000000 76.000000 10L/11
1A005800 451.000000 41.000000 10L/11
1A005800bi .000000 .000000 4L/2
1A005800bi .000000 .000000 4L/2
1A005800cy 512.000000 32.000000 16l/16
1A006200 .000000 .000000 10L/12
1A006200 84.000000 7.000000 10L/12
1A006617 684.000000 38.000000 16L/18
1A006800 .000000 .000000 10L/11
1A006800 .000000 .000000 10L/11
1A006800 242.000000 22.000000 10L/11
1A006800 242.000000 22.000000 10L/11
1A006800 .000000 .000000 10L/11
1A007200 170.000000 17.000000 10L/10
1A007211 .000000 .000000 10L/10
1A007211 .000000 .000000 10L/10
1A007212zb .000000 .000000 10L/10
1A007217G .000000 .000000 16l/16
1A007217G .000000 .000000 16l/16
1A007300 .000000 .000000 10L/9
1A007300 36.000000 4.000000 10L/9
1A007300 9.000000 1.000000 10L/9
1A007400 96.000000 6.000000 16l/16
1A007500 81.000000 9.000000 10L/9
unit main;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, ComCtrls, Grids, DBGrids, StdCtrls;type
TForm1 = class(TForm)
TreeView1: TTreeView;
ADOQuery1: TADOQuery;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
ADOQuery2: TADOQuery;
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure GetNode;
procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
private
TmpNode,rootNode,Nodel:TTreeNode;
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;type
PMyData=^TMyData;
TMyData=Record
nmenuid:string;
nmenuname:string;
end;implementation{$R *.dfm}
procedure TForm1.GetNode;
var
parent:string;
pi,hi,i,tmpi:integer;
myshuju: PMyData;
begin
TreeView1.Items.Clear;
AdoQuery1.Close;
ADOQuery1.SQL.Clear;
adoquery1.SQL.Add('select cinvccode,cinvcname,iinvcgrade from inventoryclass where cinvccode like ''1%'' and iinvcgrade in (1,2,3) order by cinvccode');
ADOQuery1.open;
ADOQuery1.First;
while not adoquery1.Eof do
begin
parent:=ADOQuery1.Fields[2].AsString;
if parent='1' then
begin
new(myshuju);
myshuju^.nmenuid:=ADOQuery1.Fields[0].Asstring;
myshuju^.nmenuname:=ADOQuery1.Fields[1].Asstring;
rootNode:=TreeView1.Items.Add(nil,ADOQuery1.Fields[1].asstring);
rootNode.SelectedIndex:=0;
Nodel:=rootNode;
Nodel.Data:=myshuju;
pi:=strtoint(ADOQuery1.Fields[2].asstring);
ADOQuery1.Next;
end
else
begin
hi:=strtoint(ADOQuery1.Fields[2].asstring);
if hi>pi then
//运行时这里提示"variable 'pi' might not have been initialized"
//但是程序可以运行
begin
new(myshuju);
myshuju^.nmenuid:=ADOQuery1.Fields[0].Asstring;
myshuju^.nmenuname:=ADOQuery1.Fields[1].Asstring;
TmpNode:=TreeView1.Items.AddChild(nodel,ADOQuery1.Fields[1].asstring);
pi:=hi;
nodel:=tmpNode;
nodel.Data:=myshuju;
ADOQuery1.next;
end
else
if hi=pi then
begin
new(myshuju);
myshuju^.nmenuid:=ADOQuery1.Fields[0].Asstring;
myshuju^.nmenuname:=ADOQuery1.Fields[1].Asstring;
TmpNode:=TreeView1.Items.AddChild(nodel.Parent,ADOQuery1.Fields[1].asstring);//创建同级节点
pi:=hi;
nodel:=TmpNode;
nodel.Data:=myshuju;
ADOQuery1.next;
end else
if hi<pi then
begin
tmpi:=(pi-hi);
for i:=0 to tmpi do
begin
nodel:=nodel.Parent;
end;
new(myshuju);
myshuju^.nmenuid:=ADOQuery1.Fields[0].Asstring;
myshuju^.nmenuname:=ADOQuery1.Fields[1].Asstring;
TmpNode:=TreeView1.Items.Addchild(nodel,ADOQuery1.Fields[1].asstring);
pi:=hi;
nodel:=TmpNode;
nodel.Data:=myshuju;
ADOQuery1.next;
end;
end;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
GetNode;
end;procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
edit1.Text:=tlabel(treeview1.Selected.).caption;
with AdoQuery2 do
begin;
close;
sql.Clear;
sql.add('DECLARE @var1 char(500)');
SQL.Add('select @var1=cinvccode from inventoryclass');
sql.Add('where cinvcname=:s1');
Parameters.ParamByName('s1').Value:=trim(treeview1.Selected.Text);
SQL.Add('select a.cinvname,a.cinvcode,b.cfree1,b.iquantity,b.inum from inventory a,currentstock b');
sql.Add('where left(a.cinvcode,5)=@VAR1 and a.cinvcode=b.cinvcode');
ExecSQL;
Open;
end;end;end.如果查询的大类名称是汉字就过滤不出来,如‘A01-1氨基烘干清漆‘
如果查询的大类是数字和英文就可以,如’A936‘
请高手指点!!!!