为什么这段代码在xp下执行没问题,在98下执行有的机器正常,有的机器不正常。(100分)

  • 主题发起人 主题发起人 ddw
  • 开始时间 开始时间
D

ddw

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库为oracle
连接用ado


procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
a,s:string;
begin
s:=datetimetostr(form1.DateTimePicker2.DateTime);
a:=datetimetostr(form1.DateTimePicker1.DateTime);
form1.ADOQuery1.Close;
form1.ADOQuery1.SQL.Clear;
form1.ADOQuery1.SQL.Add('select count(*) from tticket ');
form1.adoquery1.sql.add('where dsendtime');
form1.adoquery1.sql.add(format('between to_date(''%s''',[a]));
form1.ADOQuery1.SQL.Add(',''yyyy-mm-dd hh24:mi:ss'') and ');
form1.ADOQuery1.SQL.Add(format('to_date(''%s''',));
form1.ADOQuery1.SQL.Add(',''yyyy-mm-dd hh24:mi:ss'')');
form1.ADOQuery1.Open;
i:=form1.ADOQuery1.Fields[0].AsInteger;
form1.Edit1.Text:='';
form1.Edit1.Text:=inttostr(i);
end;

正常的时候,能取出来,不正常的的情况有两种一种是结果为0,一种是
"ORA-01858: a non-numeric character was found where a numeric was expected."
在我的机器上xp正常, 98下有的正常,有的出现上面两种问题。
 
估计是日期格式不对,
// s := datetimetostr(form1.DateTimePicker2.DateTime);
// a := datetimetostr(form1.DateTimePicker1.DateTime);
//改成下面这两句就可以了吧
s := FormatDateTime('YYYY-MM-DD hh:mm:ss', form1.DateTimePicker2.DateTime);
a := FormatDateTime('YYYY-MM-DD hh:mm:ss', form1.DateTimePicker1.DateTime);
 
可能日期时间的默认格式不一样,你可以用下面的语句在 98 和 xp 下看一下:
showmessage(ShortDateFormat);
如果是这样,按照不出错的格式重新设置一下。
 
应该是时间格式不对:0,最好在项目单元修改日期格式
 
svw0506说的有道理。
datetimetostr函数和操作系统环境有关,
尽量不要使用。
 
谢谢 大家,按照svw0506的方法,终于好使了。
 
后退
顶部