用adoquery多表查询问题(50分)

  • 主题发起人 主题发起人 cf83325
  • 开始时间 开始时间
C

cf83325

Unregistered / Unconfirmed
GUEST, unregistred user!
我有2张表,表名分别是;
<1>魔鬼词典(表一)
字段: ID 标题 内容
<2>成语词典(表二)
字段: ID 成语 用法.
我用的是adoquery组件: 我的程序如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
with ADOQuery1 do
begin
close;
sql.Clear;
Sql.Add('select *');
SQl.Add('From 成语词典,魔鬼词典');
SQL.Add('成语词典.id = 魔鬼词典.id');
SQL.Add('where 成语 and 标题=:s');
Parameters.ParamByName('s').Value:=trim(Edit1.Text);
open;
end;
If AdoQuery1.RecordCount=0 then
Exit;
//if Edit1.Text<>Null then
Memo1.Clear;
Memo1.Lines.Add(' '+AdoQuery1.FieldByName('成语').Text);
Memo1.Lines.Add(AdoQuery1.FieldByName('用法').Text);
Memo1.Lines.Add(AdoQuery1.FieldByName('解释').Text);
Memo1.Lines.Add(AdoQuery1.FieldByName('典故').Text);
Memo1.Lines.Add(AdoQuery1.FieldByName('标题').Text);
end;
我的问题是:当我在Edit1中输入某个关键字的时候,只查其中一个表中的记录在memo1里面显示,不是取两个表的笛卡积.
 
SELECT *
FROM 成语词典 INNER JOIN
魔鬼词典 ON 成语词典.id = 魔鬼词典.id
WHERE (魔鬼词典.标题=:s) AND (成语词典.成语=:s)
你的SQL语句应该这样写吧。
 
SQL语句有问题
SELECT *
FROM 成语词典 a INNER JOIN
魔鬼词典 b ON a.id = b.id
WHERE (b.标题=:s) AND (a.成语=:s)
 
你那样不行啊~~~我重要是不熟悉这个语法~~~.没有没人copy我的程序再帮我看一下啊~~
 
是这样吧.编译可以通过,但是抱异常(参数s有问题),一个看似很简单的问题搞得我郁闷了
with ADOQuery1 do
begin
close;
sql.Clear;
Sql.Add('select *');
SQl.Add('From 音序a INNER JOIN 魔鬼词典 ON 成语词典.id = 魔鬼词典.id'); //音序a
SQL.Add('where (魔鬼词典.标题=:s) AND (成语词典.成语=:s)');
Parameters.ParamByName('s').Value:=trim(Edit1.Text);
open;
.................
 
这样吧.编译可以通过,但是抱异常(参数s有问题),一个看似很简单的问题搞得我郁闷了
with ADOQuery1 do
begin
close;
sql.Clear;
Sql.Add('select *');
SQl.Add('From 音序a INNER JOIN 魔鬼词典 ON 成语词典.id = 魔鬼词典.id'); //音序a
SQL.Add('where (魔鬼词典.标题=:s) AND (成语词典.成语=:s)');
Parameters.ParamByName('s').Value:=QuotedStr(trim(Edit1.Text)); //是因为单引号造成的
open;
 
感谢,但是还是抱参数的不一致的异常,我在Parameters.ParamByName('s').Value:=QuotedStr(trim(Edit1.Text));的旁边加个showMessage('有错误')测了一下.错误就在这里~~~不知道是为什么~~~.虽然问题没有被解决,还是很感谢二位的参与.
 
Parameters.ParamByName('s').asstring:=QuotedStr(trim(Edit1.Text));
 
Parameters.ParamByName('s').asstring:=QuotedStr(trim(Edit1.Text));//我的D7这里动态参数没有asstring这个属性.
 
是吗,那你的S字段是什么类型的
 
S是变体类型
 
继续求助~~~~~~~~~
 
with adoquery do begin
sql.text := format( 'SELECT * FROM 成语词典 a INNER JOIN 魔鬼词典 b ON a.id = b.id WHERE (b.标题=''%s'') AND (a.成语=''%s'')',[edit.text,edit.text]);
open;
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
415
import
I
I
回复
0
查看
675
import
I
后退
顶部