我在写程序时遇到一个奇怪的问题
我单执行SQL命令select name from ryb where dpt='SA',程序不报错。
但是我用以下代码:
procedure TForm1.Button1Click(Sender: TObject);
begin
  DBGrid1.Visible:=False;
  DataModule1.CDS1.Active:=False;
  with DataModule1.SQLQuery2 do
  begin
    SQL.Clear;
    SQL.Add('select name from ryb where dpt='+'SA');
    ExecSQL(true);
  end;
  DataModule1.CDS1.Active:=True;
  DBGrid1.Visible:=True;
end;
就会报错:cloumn "sa"does not exist.
表中的字段值确实是只有大写的。
我很奇怪,明明是大写的“SA”,怎么会提示小写“sa”不存在?

解决方案 »

  1.   

    SQL.Add('select name from ryb where dpt='''+'SA''');
      

  2.   

    SA如果是变量,就必须给它赋值,如果是字符串常量,就得再加引号:'select name from ryb where dpt='''+'SA'''
      

  3.   

    应该如下写:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      DBGrid1.Visible:=False;
      DataModule1.CDS1.Active:=False;
      with DataModule1.SQLQuery2 do
      begin
        SQL.Clear;
        SQL.Add('select name from ryb where dpt='+#39+'SA'+#39);
        Open;
      end;
      DataModule1.CDS1.Active:=True;
      DBGrid1.Visible:=True;
    end;
    有二点改动:
    1.#39就是两边加单撇号
    2.Select 语句应该用Open。
      

  4.   

    改写如下试试:
    ...
      with DataModule1.SQLQuery2 do
      begin
        SQL.Clear;
        SQL.Add('select [name] from ryb where dpt=''SA''');
        Open;
      end;
    ...
      

  5.   

    字段name 和 关键字 name冲突,建议不要一样
     SQL.Clear;
     SQL.Add('select [name] from ryb where dpt='+QuotedStr('SA'));
     open;ok了