最近使用Delphi,大的问题没有,但小的问题不断?
如:
程序中用到一个文本框edtSQL用来接受用户输入sql语句用户输入下面的语句会出现loginName没有默认值的错误?
    //该语句为用户输入edtSQl文本框的SQL语句
select Email from test where loginName='zqget';或select Email from test where loginName="zqget"
ADODataSet1.CommandText:=edtSQL.Text;
ADODataSet1.Open;因为我的目的是让用户自己输入SQL语句,程序直接执行用户输入的SQL语句,请问该如果解决这个问题?如果实在C++中就不会出现这个问题,在这点上我一点都不喜欢delphi?

解决方案 »

  1.   

    select [Email] from [test] where [loginName]='zqget'
      

  2.   

    select Email from test where loginName=''zqget''
    试试。
      

  3.   

    用AnsiReplaceStr(S,被替换字符串,替换字符串)函数把edtSql.Text中的每一个
    “或', 替换为双单引号('')就可以了
      

  4.   

    delphi中对SQL查找串的字符应该是双引号
    select Email from test where loginName=''zqget''
    处理一下where 子句中条件是字符串的就行了
      

  5.   

    .SQL.Add(QuotedStr(Edit1.Text));
    用上面的语句试试。
    Edit1是用户输入SQL语句的地方。
    QuotedStr函数很好的处理了SQL语句中的引号问题!!
      

  6.   

    select Email from test where loginName='''''zqget'''''
      

  7.   

    谢谢大家!大家的方法我都去试过了,问题仍然没有解决,主要是用户可能的输入:select email from test where loginName='zqget'select email from test where loginName="zqget"这样就会造成错误
      

  8.   

    with adoquery1 do
    begin
      close;
      sql.clear;
      sql.add('select email from test where loginName=''zqget''');
      open;
    end;这样看看可以吗?
      

  9.   

    让用户输入SQL语句可以使用Memo
    try
    with Query1 do
    begin
      close;
      SQL.Add(Memo1.Text);
      Prepare;
      Open;  
    end;
    except
      showmessage('the SQL statement is wrong');
    end;
      

  10.   

    你把loginName设置为用户要输为的内容吧!
      

  11.   

    你把loginName设置为用户要输入的内容吧!即做个Edit1接受输入的loginName值
      

  12.   

    看了只有楼上一位的说到了楼主的问题点子上,就是用户输入的SQL语句中有引号时,需要进行替换转换:用AnsiReplaceStr(S,被替换字符串,替换字符串)函数把edtSql.Text中的每一个
    “或', 替换为双单引号('')就可以了
    或者:
    用把所有出现双引号"和单引号'的地方,替换成\"或\'.另外,如果涉及到有数据库表中字段使用了关键词,可能要求加[]号.
      

  13.   

    我的目的是执行用户输入的SQl语句,主要是用户的SQL语句的Where条件不同,那执行的结果就不同,
    这个sql语句的查询条件是可以千变万化的所以如果单让用户输入loginName则就不满足要求,我的要求其实就是要求我的程序能够执行
    用户所输入的 "SQL语句"
      

  14.   

    edtSQl中输入:select Email from test where loginName = 'zqget'
    ADOQuery1.Close;
    ADOQuery1.SQL.Text := edtSQL.Text;
    ADOQuery1.Open;
      

  15.   

    问题还是没有解决
    开始我是用的ADODataSet组件
    我换成ADOQuery组件还是一样的错误参数"loginName"没有默认参数