层次关系查询再求解,十万火急啊,麻烦各位解答一下。(0分)

  • 主题发起人 topdelphi
  • 开始时间
T

topdelphi

Unregistered / Unconfirmed
GUEST, unregistred user!
我的窗体有两个CHEAKLISTBOX,改成例如将数据库的字段读入到CHEAKLISTBOX1里
,当选择CHEAKLISTBOX1里面的某个或多个字段之后,将数据库的记录读入到CHEAKLISTBOX2里
,如果用户在CHEAKLISTBOX1选择多个字段,或在CHEAKLISTBOX2选择多个记录的时候,
都能查询出来将数据显示在DBGRID里,但是我的查询语句出了错,请问如何修改才可以实现
啊这个功能啊, 谢谢大家

procedure TForm1.Button4Click(Sender: TObject);
var
j,k,wherecount,wherecount1:integer;
begin
wherecount:=0;
query1.Close;
query1.SQL.Clear ;
query1.SQL.Text :='select * from fwork where';
for j:=0 to list1.Items.Count -1 do
begin
if list1.Checked[j] then
begin
if wherecount <> 0 then
begin
query1.SQL.Add('and');
wherecount:=1;
end;
query1.SQL.Add(list1.Items.Strings[j]+'in(');//程序说这里的IN为不可识别的
函数,请问什么修改啊。
end;
wherecount1:=0;
for k:=0 to list1.Items.Count -1 do
begin
if list2.Checked[k] then
begin
if wherecount1 <> 0 then

query1.SQL.Add(',');
wherecount :=1;

query1.SQL.Add(''''+list2.Items.Strings[k]+'''');
end;
end;

query1.SQL.Add(')');
query1.Open;
end;
end;
End.
 
一个建议:
你把 Query1.sql.savetofile('c:/df.txt')
去查询分析器里 run 一下 可以看看什么错。

光叫别人看你的程序,比较麻烦。你说呢?
 
但是好像这条语句一样,有控件和属性在里面的,在查询分析器里可以分析得到吗,应该怎样解决

query1.SQL.Add(''''+list2.Items.Strings[k]+'''');
 
在DBGRID里只显示选定字段可以不用SQL,只要把DBGRID对应的COLUMN的VISIABLE设为FALSE,
那么就不会显示。这可以简化代码。

 
但是对于记录来讲,又如何做到呢,请指教
 
也可以变通,你建立一个CLIENTDATASET,只把选中的记录放到其中,把它用DBGRID显示
我想就可以了。
 
请问:Door2000先生,这个具体实现的步鄹是怎么的呢,因为我快要交货了,真的好急啊。
万份感激了。
 
让clientdataset结构与你的数据库结构一致,并没有任何记录。
做一个循环,从第一条记录移动到最后一条记录,根据checklistbox2的选择,如果选上了,
就在clientdataset中添加一条记录。最后把dbgrid的datasource的dataset设为clientdataset
再根据checklistbox1的情况来隐藏未选中的字段所对应的column,就是这么回事,就可以达到你的要求。

 
先生,真的对不起,小虾对clientdataset并不熟悉,也不知道如何设置,
可以比个例子我看看吗,真的好感谢你的回答。谢谢
 
窗体上放一个clientdataset,右键点,选fields editor,在出现的窗口中右键点,选new field
增加field
把所有的field设好了以后(设成与数据库结构一样),右击clientdataset,选 create dataset,
你会发现clientdataset的active变为true.右击clientdataset,选择save to file,存为一个cds文件。

以后在你的程序中可以调用loadfromfile的方法来载入此文件。
注:一个未打开的clientdataset载loadfromfile后会自动打开。clientdataset的使用看帮
 
先不要Query1.open,而是将query.sql.text输入到一个临时的Edit控件中,入你可以在表单
中加入一个临时控件edit1,在query1.open之前,edit1.text := query1.sql.text;
然后将edit1.text copy到查询分析器中,很容易找到问题的
 
对不起先生,小虾本来真的不好意思再麻烦你了,可是这个功能今晚要交了,而我没有时间
了解clientdataset的属性,我想请教先生怎样可以实现这个查询功能,我现在对CHEAKLIST
1和CHEAKLIST2都做了个循环,目的可以同时多选CHEAKLIST1和CHEAKLIST2的字段和记录,
最后显示在DBGRID里,我的代码只做出下面的语句,其它不知怎样写,麻烦先生再指教,
日后有分定必相送,万份感激你了。

VAR
A,B:INTEGER;
begin
FOR A:=0 TO LIST1.Items.Count -1 DO
BEGIN
FOR B:=0 TO LIST2.Items.Count -1 DO
BEGIN
IF LIST2.Checked[A] THEN
BEGIN
.....................................
 
如果你不想用CLIENTDATASET那么最好不要用DBGRID,DBGRID的用处之一就是简化数据显示,
正因如此,它是显示一个DATASET的全部记录的。(我认为这样,也可能不是,希望高手们用砖头拍我)

你用循环,把它显示在stringgrid里,你看怎么样?
 
先生我只是搞不懂怎样根据checklistbox2的选择,如果选上了,
就在clientdataset中添加一条记录,如果一条一条地手动,记录一多就惨了,
我还是有点不明白先生所说的功能的用法,可以对我上面的程序,作出一个修改吗,
谢谢你了。
 
我给你发一个例子吧,把油箱给我
 
softcool@163.net
谢谢你了。
 
顶部