from语法错误,这是什么原因?(10分)

  • 主题发起人 主题发起人 yedixifeng
  • 开始时间 开始时间
Y

yedixifeng

Unregistered / Unconfirmed
GUEST, unregistred user!
SQLStr:='select 图书编号,书名,作者,类名,出版社,定价,总数量,出版日期 From 图书信息 A,图书类别 B';
SQLStr:=SQLstr+'Where B.类名='+GJZ_CB.text+' and A.类别=B.类别';

if RQ.Text <>'' then
begin
SQLstr:=SQLstr+' and 出版日期 like "%'+RQ.text+'%"' ;
end ;
if GJZ_CB.Text <>'' then
begin
SQLstr:=SQLstr+' and 类名 like '+GJZ_CB.text+'' ;
end ;
TSXX_Q.SQL.Add(SQLStr);
TSXX_Q.Open;

以上是代码,结果提示说 from语法错误,这是什么原因?
 
SQLStr:='select 图书编号,书名,作者,类名,出版社,定价,总数量,出版日期 From 图书信息 A,图书类别 B '; --这里是不是少了空格啊??
SQLStr:=SQLstr+'Where B.类名='+GJZ_CB.text+' and A.类别=B.类别'; --这里类名是不是字符串呢,如果是要改为 B.类名='''+GJZ_CB.text+''' 加单引号

if RQ.Text <>'' then
begin
SQLstr:=SQLstr+' and 出版日期 like "%'+RQ.text+'%"' ; --这里日期是不是datetime型呢,如果是建议改用datediff函数,别用like;如果是字符串也该用括号引起来吧,SQLstr+' and (出版日期 like ''%'+RQ.text+'%)'''
end ;
if GJZ_CB.Text <>'' then
begin
SQLstr:=SQLstr+' and 类名 like '+GJZ_CB.text+'' ; --SQLstr+' and (类名 like ''%'+GJZ_CB.text+'%'')'
end ;
TSXX_Q.SQL.Add(SQLStr);
TSXX_Q.Open;
 
你可以通过跟踪程序,看看生成的sql语句是否正确,再在程序中组合你的sql语句!!!
 
Where 前加个空格看看~~
 
谢谢以上各位。
日期是字符串。
现在改代码为:
SQLStr:='select 图书编号,书名,作者,类名,出版社,定价,总数量,出版日期 From 图书信息 A,图书类别 B ';
SQLStr:=SQLstr+'Where (B.类名='''+GJZ_CB.text+''') and A.类别=B.类别';

if RQ.Text <>'' then
begin
SQLstr:=SQLstr+' and 出版日期 like ''%'+RQ.text+'%''' ;
end ;
if GJZ_CB.Text <>'' then
begin
SQLstr:=SQLstr+' and 类名 = ''%'+GJZ_CB.text+'%''' ;
end ;
TSXX_Q.SQL.Add(SQLStr);
TSXX_Q.Open;

查询没有任何内容。GJZ_CB.text是ComboBox,调用的是数据库。比如类名有 文学,
如果其中改为
SQLStr:=SQLstr+'Where (B.类名='+GJZ_CB.text+') and A.类别=B.类别';
则查询时,提示说 参数文学没有默认值。

不知道问题出在哪。
 
完整的代码:

if ALB_FRBtn.Checked then //按类别
if MHCX_FCB.Checked then
begin
TSXX_Q.Close;
TSXX_Q.SQL.Clear;
TSXX_Q.SQL.Add('Select 图书编号,书名,作者,类名,出版社,定价,总数量,出版日期 From 图书信息 A,图书类别 B');
TSXX_Q.SQL.Add('Where (B.类名 Like :类名) and A.类别=B.类别');
TSXX_Q.Parameters.ParamByName('类名').Value:='%'+GJZ_CB.Text+'%';

TSJG_DS.DataSet:=TSXX_Q; //注意这是第二种数据库动态连接
TSJG_DG.Columns[0].FieldName:='图书编号';
TSJG_DG.Columns[1].FieldName:='书名';
TSJG_DG.Columns[2].FieldName:='作者';
TSJG_DG.Columns[3].FieldName:='类名';
TSJG_DG.Columns[4].FieldName:='出版社';
TSJG_DG.Columns[5].FieldName:='定价';
TSJG_DG.Columns[6].FieldName:='总数量';
TSJG_DG.Columns[7].FieldName:='出版日期';
TSXX_Q.Open;
TS_Lable.Caption:=Format('共 %d 条记录',[TSXX_Q.RecordCount]);
end
else begin
TSXX_Q.Close;
TSXX_Q.SQL.Clear;
TSXX_Q.SQL.Add('Select 图书编号,书名,作者,类名,出版社,定价,总数量,出版日期 From 图书信息 A,图书类别 B');
TSXX_Q.SQL.Add('Where (B.类名 = :类名) and A.类别=B.类别');
TSXX_Q.Parameters.ParamByName('类名').Value:=GJZ_CB.Text;
TSJG_DS.DataSet:=TSXX_Q;
TSJG_DG.Columns[0].FieldName:='图书编号';
TSJG_DG.Columns[1].FieldName:='书名';
TSJG_DG.Columns[2].FieldName:='作者';
TSJG_DG.Columns[3].FieldName:='类名';
TSJG_DG.Columns[4].FieldName:='出版社';
TSJG_DG.Columns[5].FieldName:='定价';
TSJG_DG.Columns[6].FieldName:='总数量';
TSJG_DG.Columns[7].FieldName:='出版日期';
TSXX_Q.Open;
TS_Lable.Caption:=Format('共 %d 条记录',[TSXX_Q.RecordCount]);
end;

if ALB_FRBtn.Checked then //按类别加日期
if RQ.Text <> '' then
begin
TSXX_Q.Close;
TSXX_Q.SQL.Clear;

{ TSXX_Q.SQL.Add('Select 图书编号,书名,作者,类名,出版社,定价,总数量,出版日期 From 图书信息 A,图书类别 B');
TSXX_Q.SQL.Add('Where (B.类名 Like :类名) and A.类别=B.类别');
TSXX_Q.Parameters.ParamByName('类名').Value:='%'+GJZ_CB.Text+'%';}

SQLStr:='select 图书编号,书名,作者,类名,出版社,定价,总数量,出版日期 From 图书信息 A,图书类别 B ';
SQLStr:=SQLstr+' Where B.类名='''+GJZ_CB.text+'''';

if RQ.Text <>'' then
begin
SQLstr:=SQLstr+' and 出版日期 like ''%'+RQ.text+'%''' ;
end ;
if GJZ_CB.Text <>'' then
begin
SQLstr:=SQLstr+' and 类名 = ''%'+GJZ_CB.text+'%''' ;
end ;
TSXX_Q.SQL.Add(SQLStr);
TSXX_Q.Open;


TSJG_DS.DataSet:=TSXX_Q; //注意这是第二种数据库动态连接
TSJG_DG.Columns[0].FieldName:='图书编号';
TSJG_DG.Columns[1].FieldName:='书名';
TSJG_DG.Columns[2].FieldName:='作者';
TSJG_DG.Columns[3].FieldName:='类名';
TSJG_DG.Columns[4].FieldName:='出版社';
TSJG_DG.Columns[5].FieldName:='定价';
TSJG_DG.Columns[6].FieldName:='总数量';
TSJG_DG.Columns[7].FieldName:='出版日期';
TSXX_Q.Open;
TS_Lable.Caption:=Format('共 %d 条记录',[TSXX_Q.RecordCount]);
end;
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部