我的代码如下:运行时总时提示,关键字'where附近的语法不正确
sFilter:=' Where';
if Trim(lktvArea.Text)<>'' then
begin
sFilter:= sFilter+' fAreaCode like '''+QArea.fieldbyName('fCode').asString+'%''';
end;
if sFilter=' Where' then sFilter:=''; QBaseInfo.Close;
QBaseInfo.SQL.Clear ;
QBaseInfo.SQL.Add(sSql+frmLookupProCus.sFilter);//*******主要是这行有错******
QBaseInfo.Open ;
sFilter,sSql我都定义成STRING
sFilter:=' Where';
if Trim(lktvArea.Text)<>'' then
begin
sFilter:= sFilter+' fAreaCode like '''+QArea.fieldbyName('fCode').asString+'%''';
end;
if sFilter=' Where' then sFilter:=''; QBaseInfo.Close;
QBaseInfo.SQL.Clear ;
QBaseInfo.SQL.Add(sSql+frmLookupProCus.sFilter);//*******主要是这行有错******
QBaseInfo.Open ;
sFilter,sSql我都定义成STRING
解决方案 »
- delphi 下多线程使用(新手提问!)
- 求<<Delphi串口通信技术与工程实践>> 或者《delphi串口通信编程》电子书
- 以对象作为参数时,提示形参和实参不一致的问题
- 从SQL数据库中读取文件出错,急,在线等?
- Delphi QQ学习群:18867768
- 我用了一个query1.close但此query1前并没有打开,所以系统报错,怎么用一个判断避免query1是否打开?
- 再一个简单的问题
- 问一个无关技术的问题,我现在有一部曲子,我怎么样才能把这个曲子搞成MP3呢?我是只有多、来、咪这类的在纸上写的曲。
- delphi7中有什么方法可以实现.net中的 ##endreigon 功能吗? 插件也可以,谢谢!
- 请问大家。。有谁知道在一个逻辑分区上能建多少个文件夹。。 知道的踊跃回答哦
- delphi開發的DLL被VC調用中的問題
- 怎样将一个二维数组当指针使用?
一般我都是这样做的
var SQLStr:String;
begin
SQLStr:='Select * From mTable Where 1=1';
if Trim(ComboBox1.Text)<>'' then
SQLStr:=SQLStr+' And Condition1='''+ComboBox1.Text+'''';
if Trim(ComboBox2.Text)<>'' then
SQLStr:=SQLStr+' And Condition2='''+ComboBox2.Text+'''';
...
myQuery.Active:=False;
myQuery.SQL.Clear;
myQuery.SQL.Add(SQLStr);
myQuery.Open;
end;//这是先说思路;照楼主的说法,在出错行上最大的可能是frmLookupProCus已经被Close了,这当然会报错;
procedure TfrmLookupProCus.btOkClick(Sender: TObject);
begin
sFilter:=' Where';
if Trim(lktvArea.Text)<>'' then
begin
sFilter:= sFilter+' fAreaCode like '''+QArea.fieldbyName('fCode').asString+'%''';
end;
if Trim(edtCode.Text) <> '' then
begin
if sFilter<>' Where' then sFilter := sFilter+' and';
if pos('%',EdtCode.Text)>0 then
sFilter:= sFilter+' fCode like '''+Trim(EdtCode.Text)+''''
else
sFilter:= sFilter+' fCode='''+Trim(EdtCode.text)+'''';
end;
if Trim(edtName.Text) <> '' then
begin
if sFilter<>' Where' then sFilter := sFilter+' and';
if pos('%',EdtName.Text)>0 then
sFilter:= sFilter+' fName like '''+Trim(EdtName.Text)+''''
else
sFilter:= sFilter+' fName='''+Trim(EdtName.text)+'''';
end;
if sFilter=' Where' then sFilter:='';
end;
我只给出了一部分以及出错的部分,完整代码是以上的代码,而且不是在同一窗体中,我这所以那样写是便如读写。
照楼主的说法,在出错行上最大的可能是frmLookupProCus已经被Close了,这当然会报错;这好象不太可能,在调用窗体中我是这样写的
if frmLookupProCus.ShowModal=mrOk then
begin
QBaseInfo.Close;
QBaseInfo.SQL.Clear ;
QBaseInfo.SQL.Add(sSql+frmLookupProCus.sFilter);
QBaseInfo.Open ;
end;
而且在frmLookupProCus的Close中没有写任何程式。请帮我分析一下这到底错在那
if frmLookupProCus.ShowModal=mrOk then
begin
QBaseInfo.Close;
QBaseInfo.SQL.Clear ;
QBaseInfo.SQL.Add(sSql+frmLookupProCus.sFilter);
QBaseInfo.Open ;
end;则在FormMain的Public中定义sFilter1在 frmLookupProCus中uses UnitMain;//假设FormMain对应的Unit为UnitMain;
并修改以下代码:
if sFilter<>' Where' then sFilter := sFilter+' and';
if pos('%',EdtName.Text)>0 then
sFilter:= sFilter+' fName like '''+Trim(EdtName.Text)+''''
else
sFilter:= sFilter+' fName='''+Trim(EdtName.text)+'''';
end;
if sFilter=' Where' then sFilter:='';
FormMain.sFilter1:=sFilter;//加这一句
end;当然了,根据代码情况,采用我上文的思路可以节省好多代码,程序可读性也大为提高
QBaseInfo.SQL.Add(sSql+frmLookupProCus.sFilter);
改为
QBaseInfo.SQL.Add(sSql+sFilter1);
showmessage(myQuery.SQL.text);
myQuery.Open;运行看一下就知道了,我怀疑是你 这句:
' fAreaCode like '''+QArea.fieldbyName('fCode').asString+'%'''
里的 QArea.fieldbyName('fCode').asString 根本就没有值
明显是组合出来的sql语句有问题
------------------------------------------------------------------------------------
我的代码如下:运行时总时提示,关键字'where附近的语法不正确
sFilter:=' Where';
if Trim(lktvArea.Text)<>'' then
begin
sFilter:= sFilter+' fAreaCode like '''+QArea.fieldbyName('fCode').asString+'%''';
end;
if sFilter=' Where' then sFilter:=''; QBaseInfo.Close;
QBaseInfo.SQL.Clear ;
QBaseInfo.SQL.Add(sSql+frmLookupProCus.sFilter);//*******主要是这行有错******
*****************************************************************************
QBaseInfo.Open ;
sFilter,sSql我都定义成STRING注释里写得明白,主要是这行出错,所以我才会这样想的,如果说是在Open时出错我不是就明白了嘛这完全是我审题不清,怪我至于“如果你做过sql开发,你就应该...”,我只能说,我从92年开始学编程,95年学数据库,99年工作,数据库一直贯串着,偶竟然还是没学好,惭愧呀
QBaseInfo.Open ;前先加一句
ShowMessage(sSql+frmLookupProCus.sFilter);
来看一下,你所生成的SQL语句到底是什么样的