我用adoquery进行查询,放了一个MESSAGE来显示SQL语句来检验是否正确(测试用),显示结果如下:
      select * from 表名 where 总号='52' 
  而数据库内该总号字段为整数类型。尝试转换类型始终不能成功,因为52的数值来自于用户输入的关键字,所以不能固定。请问该如何处理。真晕啊,看着觉得太简单却不能搞定。
    大侠们帮帮忙!分不多,谢谢!

解决方案 »

  1.   

    由于要根据选择考虑加上时间段条件组合,所以不能直接写入SQL语句中,且其中的总号也是通过选择COMBOBOX来选择的一种条件。
      我把通过COMBOBOX1选择的字段名称和EDIT得到的关键字作为TIAOJIAN1,再根据复选框看是否选择时间段作为TIAOJIAN2,如果选择了就组合成一个SQL。
       以上只是我的精确查询代码,模糊查询已经调试通过,代码基本类似(但没涉及到数值字段)。
      

  2.   

    如果用户输入都是数字的话,那么sql := select * from 表名 where 总号=' + edt.text就可以了啊?
      

  3.   

    sql := 'select * from 表名 where 总号=' + edt.text少了个单引号,呵呵
      

  4.   

    使用参数传递
    变量1=52With ADOQuery Do
    Begin
      sql.clear;
      sql.Add('select * from 表名 where 总号=:变量1 ');
      Parameters.ParamByName('总号').Value:=变量1;
      Open;
    end;
      

  5.   

    上面纠正一下:
    使用参数传递
    With ADOQuery Do
    Begin
      sql.clear;
      sql.Add('select * from 表名 where 总号=:变量1 ');
      Parameters.ParamByName('变量1').Value:=52
      Open;
    end;
      

  6.   

    该段代码如下:   if radiobutton2.Checked  then  //精确查询部分
         begin
           findkey:=edit3.text;
           if combobox1.text='总号' then tiaojian1:='总号 = '''+findkey+''''
              else if combobox1.text='分号' then tiaojian1:='分号 = '''+findkey+''''
                  else if combobox1.text='发文单位' then tiaojian1:='发文单位 = '''+findkey+''''
                    else if combobox1.text='受文单位' then tiaojian1:='受文单位 = '''+findkey+''''
                      else if combobox1.text='核查去向' then tiaojian1:='核查去向 = '''+findkey+''''
                        else if combobox1.text='备注' then tiaojian1:='备注 = '''+findkey+''''; //这里是分号贴上来就成这样子象个冒号
           if checkbox3.Checked  then  //是否选择时间段查询条件
             begin
             tiaojian2:=' 收到日期>=#'+DateToStr(datetimepicker1.DateTime)+'#  and  收到日期<=#'+DateToStr(datetimepicker2.datetime)+'# ';
             adoquery1.Close;
             adoquery1.SQL.Clear;
             mysql:=concat('select * from stainfo where (',tiaojian1,') and ',tiaojian2);
             adoquery1.SQL.Add(mysql);
               try
               adoquery1.Open;
               except
               showmessage('条件配置错误');
               end;
             end
           else
             begin
             adoquery1.Close;
             adoquery1.SQL.Clear;
             mysql:=concat('select * from stainfo where ',tiaojian1);
             adoquery1.SQL.Add(mysql);
               try
               adoquery1.Open;
               except
               showmessage(mysql);//看一下语句组合后是什么?
               showmessage('条件b配置错误');
               end;
           end;
         end;
      

  7.   

    左大侠:不中啊。我也试过,F9后出现错误提示
      “……不正常地定义参数对象,提供了不一致或不完整的信息。”
      
      声明一下,动态参数已经在ADOQUERY1的参数里面建立。
      

  8.   

    修改一下:
    With ADOQuery Do
    Begin
      Close;
      sql.clear;
      sql.Add('select * from 表名 where 总号=:p1');
      Parameters.ParamByName('p1').Value:=StrToInt(Edit1.Text);
      Open;
    end;
      

  9.   

    这是动态查询,不需要在ADOQuery里建立参数
      

  10.   

    我看书上好象需要嘛!
       另外用动态参数后调试出现错误提示WHERE语句错误
      直接在目录中运行生成的程序,代码中放置的信息框弹出,内容(SQL语句)如下:
         select * from 表名 where 总号=:zh
      

  11.   

    看了你的代码,其实有必要要这样做吗?
    其实你大可以 combobox1改变后对输入框进行限制输入的字符
    限制输入字符简单例子:
    procedure TfrmLogin.txtUserKeyPress(Sender: TObject; var Key: Char);
    begin
     if not (key in ['0'..'9','a'..'z','A'..'Z','_',#8,#13]) then
        key:=#0;
    end;
    对于
           findkey:=edit3.text;
          if combobox1.text='总号' then tiaojian1:='总号 ='+findkey
      

  12.   

    我看书上好象需要嘛!
       另外用动态参数后调试出现错误提示WHERE语句错误
      直接在目录中运行生成的程序,代码中放置的信息框弹出,内容(SQL语句)如下:
         select * from 表名 where 总号=:zh
    /////////////////////////////////////////////////方法有很多种……
    为什么不先用回复的试一试再讨论呢?
      

  13.   

    lcyyax() ( ) 信誉:100  2006-05-10 15:48:00  得分: 0  
        我看书上好象需要嘛!
       另外用动态参数后调试出现错误提示WHERE语句错误
      直接在目录中运行生成的程序,代码中放置的信息框弹出,内容(SQL语句)如下:
         select * from 表名 where 总号=:zh
    有必要解释一下,select * from 表名 where 总号=:zh
    是执行的字符串,adoquery1会对它进行转换,然后提交到sql server上  
     
      

  14.   

    我在另开的一个贴子里已经得到答案,其实也就是左大侠
      if combobox1.text='总号' then tiaojian1:='总号 ='+findkey
    改的这句,之所以没有成功,是因为我的小程序有点保密要求,字段名我省略了,刚才打开数据库文件仔细查看才发现不相符,改回来一试就成了,谢谢!抱歉