问题一:
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)’
这个问题只是在编译时才会出现,但是用单步执行进入程序后又好像能正常使用。
========================================================================
急盼达人,速解速结
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)’
这个问题只是在编译时才会出现,但是用单步执行进入程序后又好像能正常使用。
========================================================================
急盼达人,速解速结
解决方案 »
- 200分求经纬度BL换算到高斯平面直角坐标XY(高斯投影正反算)的源码
- 如何保证多数据库表间的数据一致性
- delphi10源码怎么自动排列阿?
- 用APRO怎样得到modem接通信息
- 请问什么地方可以有delphi的电子版图书下载呢?
- 请问delphi里面有矩阵类型的变量么?
- 如何去修改Windows文件或文件夹的图标?
- 请教如何在DBGRID中如何判断Mouse先中的记录具体值!
- 如何让表里的数据自动生成为excel?
- 急,delphi5编译时提示找不到system.pas,如何解决
- 请教字符串如何放在COMBOBOX中?
- 高分寻求两台SQL服务器的数据同步(在网上没有找到合适的资料)~~~~~ 解决可另给分
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);
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;
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;
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;//按序号
问题三、
你查找到的内容是否有点没有数据
现在详细说下第一个问题:
问题一:
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;
adoquery不能用 :a这种传值的形式,
反正我用了就有错
那是因为你没有做null的判断
在你编写代码的时候 比如 string a:=fieldb.
如果你取得的数据行中fieldb有null值出现的话,如果你在ide环境下运行就会引发一个异常,所以就会弹出来这个错误消息.当然如果你只是编译好然后单独执行就不会出现这个框框.但这个异常照样发生,只不过没有被捕捉最好的解决方法,在读取数据库中的数据并赋予其他变量之前予以判断:
if varisnul(fieldb) then a:=''; //空字符串和null是两个概念
else a:=fieldb
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);..这种形式查询看看呢