问题一:
with adoquery1 do
begin
     close;
     sql.Clear;
     sql.Add('select sum(a) from liuchengka where b=:p1 and c>=:p2 and d<=:p3');
     parameters.ParamByName('p1').Value:=strtoint(combobox1.Text);
     parameters.ParamByName('p2').Value:=datetimepicker1.DateTime;
     parameters.ParamByName('p3').Value:=datetimepicker2.DateTime;
     open;
          edit1.Text:=fields[0].AsString;
end;
其中a字段数据类型为float型,
b字段数据类型为int型
c、d字段类型为datetime型
这段代码运行时出现错误为:‘[microsoft][ODBC SQL Server Driver]没有执行可选特性’问题二:
procedure TDIES.ComboBox2Change(Sender: TObject);
begin
     //原始信息中数量、材料、规格信息初始化
     if((combobox1.Text<>'') and (combobox2.Text<>''))
     then
     begin
       {  query1.Close;
          query1.SQL.Clear;
          query1.SQL.Add('select shuliang,cailiao,chang,kuan,gao from gongling where (gongling=:p1 and tuhao=:p2)');
          query1.Params[0].AsString:=combobox1.Text;
          query1.Params[1].AsString:=combobox2.Text;
          query1.Open;
          edit1.Text:=inttostr(query1.Fields[0].AsInteger);
          edit17.Text:=query1.Fields[1].AsString;
          edit2.Text:=query1.Fields[2].AsString;
          edit3.Text:=query1.Fields[3].AsString;
          edit4.Text:=query1.Fields[4].AsString;
          edit20.Text:='毫米';
        }
          with adoquery1 do
          begin
               close;
               sql.Clear;
               sql.add(‘select shuliang,cailiao,chang,kuan,gao from gongling where gongling=:p1 and tuhao=:p2’);
               parameters.ParamByName('p1').Value:=combobox1.Text;
               parameters.ParamByName('p2').Value:=combobox2.Text;
               open;
               edit1.Text:=inttostr(fields[0].AsInteger);
               edit17.Text:=Fields[1].AsString;
               edit2.Text:=Fields[2].AsString;
               edit3.Text:=Fields[3].AsString;
               edit4.Text:=Fields[4].AsString;
               edit20.Text:='毫米';
          end;
     end;
end;
上面的代码,使用{}里BDE方式的时候没问题,使用ADO方式的时候会出现这样的提示错误(project raised exception class Elisterror witn message'list index out of bounds(3)'.process stopped.Use Step or Run to continue.),能不能看出问题阿?是不是ADO用的方法有问题?,ADO连接没有问题,查询单一字段的时候没有问题问题三:
程序中涉及到,ADOtable、datasource、DBGrid使用时就会出现下面的问题。DBGrid是手动添加column,然后将其fieldname属性对应数据表的某一子段.
‘could not convert variant of type(NULL) into type(sring)’
这个问题只是在编译时才会出现,但是用单步执行进入程序后又好像能正常使用。
========================================================================
急盼达人,速解速结

解决方案 »

  1.   

    问题一其中代码
         parameters.ParamByName('p2').Value:=datetimepicker1.DateTime;
         parameters.ParamByName('p3').Value:=datetimepicker2.DateTime;
    改为
         parameters.ParamByName('p2').Value:=datetimetostr(datetimepicker1.DateTime);
         parameters.ParamByName('p3').Value:=datetimetostr(datetimepicker2.DateTime);
      

  2.   

    问题一:
    with adoquery1 do
    begin
         close;
         sql.Clear;
         sql.Add('select sum(a) as f1 from liuchengka where b=:p1 and c>=:p2 and d<=:p3');//最好用别名
         parameters.ParamByName('p1').Value:=strtoint(combobox1.Text);
         parameters.ParamByName('p2').Value:=datetimepicker1.DateTime;
         parameters.ParamByName('p3').Value:=datetimepicker2.DateTime;
         open;
              edit1.Text:=adoquery1.fieldbyname('f1').asstring ;
    end;
      

  3.   

    问题二:
                   edit1.Text:=inttostr(fields[0].AsInteger);
                   edit17.Text:=Fields[1].AsString;
                   edit2.Text:=Fields[2].AsString;
                   edit3.Text:=Fields[3].AsString;
                   edit4.Text:=Fields[4].AsString;
    改为
                   edit1.Text:=fieldbyname('shuliang').AsString;
    以下类同
                   edit17.Text:=fieldbyname('..').AsString;
                   edit2.Text:=fieldbyname('..').AsString;
                   edit3.Text:=fieldbyname('..').AsString;
                   edit4.Text:=fieldbyname('..').AsString;
      

  4.   

    问题一
      parameters.ParamByName('p2').Value:=datetimepicker1.DateTime;
         parameters.ParamByName('p3').Value:=datetimepicker2.DateTime;改成parameters.ParamByName('p2').Value:= FormatDateTime('yyyy-mm-dd',datetimepicker1.DateTime);
    要转换成符合格式的字符串传递问题二改成  edit1.text :=FieldByName('shuliang').AsString//按字段名字的方式
          edit1.text := Fields.Fields[0].AsString;//按序号
    问题三、
      你查找到的内容是否有点没有数据
      

  5.   

    to wudi_1982(︻┳═一编码是一种享受),ADOTble连接的数据表,有的字段有空字段。
      

  6.   

    另外我的两个Datetimepicker组件不仅是日期还包括时间,
      

  7.   

    问题三是Delphi本身的bug,楼主如果最终只需要执行文件,那就不用管它了。执行文件运行时不会报错的。
      

  8.   

    谢谢各位,今天第二个问题已经解决了,现在第一个问题还是没有办法解决。
    现在详细说下第一个问题:
    问题一:
    1、 改成这种方式:datetimetostr(datetimepicker1.DateTime) 错误仍然为:
    [Microsoft][ODBC SQL Server Driver]没有执行可选特性
    2、 改成使用别名方式:adoquery1.fieldbyname('f1').asstring ;,错误是:
    问题和上面一样
    3、 改成这种方式:
    parameters.parambyname(‘p2’).value:=formatdatetime(‘yyyy-mm-dd’,datetimepicker1.datetime)
    错误同上面。
    说明一下:数据表里的字段存储方式是:在企业管理器上看是‘2006-07-03 08:40:00’,在查询分析器里查看是这样:‘2006-07-03 08:40:00.000’,不知道为什么会这样,当初这个表的数据是从EXCEL里导入的。
    datetimepicker的kind属性为:dtkDate,不过两个组件的time属性都设置为’08:00:00’
    用下面的方式没问题:
    with query1 do
    begin
         close;
         sql.Clear;
         sql.Add('select sum(wanchengyugu) from liuchengka where zhihao=:p1 and kaigongshijian>=:p2 and wangongshijian<=:p3');
         params[0].AsInteger:=strtoint(combobox1.Text);
         params[1].AsDateTime:=datetimepicker1.DateTime;
         params[2].AsDateTime:=datetimepicker2.DateTime;
         open;
         edit1.Text:=fields.Fields[0].AsString;
     end;
      

  9.   

    query 可以用:a
    adoquery不能用 :a这种传值的形式,
    反正我用了就有错
      

  10.   

    问题3怎么能是bug呢
    那是因为你没有做null的判断
    在你编写代码的时候 比如 string a:=fieldb.
    如果你取得的数据行中fieldb有null值出现的话,如果你在ide环境下运行就会引发一个异常,所以就会弹出来这个错误消息.当然如果你只是编译好然后单独执行就不会出现这个框框.但这个异常照样发生,只不过没有被捕捉最好的解决方法,在读取数据库中的数据并赋予其他变量之前予以判断:
    if varisnul(fieldb) then a:=''; //空字符串和null是两个概念
    else a:=fieldb
      

  11.   

    问题一:
    with adoquery1 do
    begin
         close;
         sql.Clear;
         sql.Add('select sum(a) from liuchengka where b=:p1 and c>=:p2 and d<=:p3');
         parameters.ParamByName('p1').Value:=strtoint(combobox1.Text);
         parameters.ParamByName('p2').Value:=datetimepicker1.DateTime;
         parameters.ParamByName('p3').Value:=datetimepicker2.DateTime;
         open;
              edit1.Text:=fields[0].AsString;
    end;
    其中a字段数据类型为float型,
    b字段数据类型为int型
    c、d字段类型为datetime型
    这段代码运行时出现错误为:‘[microsoft][ODBC SQL Server Driver]没有执行可选特性’你不用这种参数查询
    adoquery1.sql.add (''select sum(a) from liuchengka where b=strtoint(combobox1.Text);..这种形式查询看看呢
      

  12.   

    datetimepicker的kind属性为:dtkDate和‘2006-07-03 08:40:00’就不匹配哦,用后面的话,前面的属性就应该是dtkDateTime的