送分的题,有关查询,我是一名初学者。(100分)

  • 主题发起人 主题发起人 zwg88
  • 开始时间 开始时间
Z

zwg88

Unregistered / Unconfirmed
GUEST, unregistred user!
问题是这样:有三个表,都有共同的字段no。当用户输入查询条件时,检索出第一个
表中(主表)符合条件的记录,然后再同时检索出表二、表三中与表一具有同等字段值NO
的记录(表关联)。注意的是第二个表与第三个表必须用sql语句检索。
我的思路是这样:在第一个表的query中触发afterscroll事件,当对检索出的记录的
内容(表一),前后(prior、next)浏览时,触发afterscroll事件,对表二、表三进行
检索。
以下是检索语句:
tempstring:=gdglquery.fieldbyname('档号').asstring;
{对变量负第一个表的NO值}
gdjfquery.sql.clear;
gdjfquery.SQL.add('select * from gdjf.db where 档号=:tempstring');
{根据第一个表的NO值对第二、三表检索}
gdjfquery.open;
以上语句运行时不能通过,是否是我写的程序中select语句写的不对(select语句的
字符串写法)。
有没有更好的思路解决?非常感谢
 
先告诉你字符串写法 +''''+你的变量+'''',
如果是VALUE的话就加上个引号就可以了
 
如果你用的是如DBF,ACCESS的话,你可以先通过QUERY1查询建立一个暂存表,然后
在对此表和表1表2的查询,那样就简单多了

,如果你用的是SQLSERVER,你可以这样做一个存储过程
SELECT NO,。。。INTO #AAA FROM TABLE1 WHERE CONDITION
select no,... into #aaa from table1 where condition
select * from table2,table3 where table2.no=aaa.no or table3.no=aaa.no
 
Q2.DATASOURCE := DATASOURE OF Q1
Q2.SQL.ADD( 'select * from gdjf.db where 档号=:档号')

Q1.OPEN
Q2.OEPN
 
gdjfquery.SQL.add('select * from gdjf.db where 档号='+tempstring);
试试
 
tempstring:=gdglquery.fieldbyname('档号').asstring;
gdjfquery.sql.clear;
gdjfquery.SQL.add('select * from gdjf.db where 档号=:tempstring');
gdjfquery.parambyname('tempstring').asstring:=tempstring;
gdjfquery.open;
 
Query2和Query3的DataSource属性指向连接Query1的TDataSource控件,Query2和Query3的SQL写成如下形式,
然后使Query1、Query2和Query3的Active属性为Ture就可以了,当你移动Query1中的记录指针时,
Query2和Query3会自动进行检索的:
Query2:select * from 表2 where 档号=:档号
Query3:select * from 表3 where 档号=:档号
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
916
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
928
DelphiTeacher的专栏
D
后退
顶部