明明显示得插入的是一个时间,但是等插入导数据库就少了1毫秒什么问题?procedure TForm1.Button4Click(Sender: TObject);
var A:Tdatetime;
begin
A:=now();
edit1.text:=formatdatetime('yyyy-MM-dd hh:nn:ss:zzz',A);
showMessage(formatdatetime('yyyy-MM-dd hh:nn:ss:zzz',A));
with Adoquery1 do
begin
close;
sql.Clear;
sql.Add('插入时间 '+Quotedstr(formatdatetime('yyyy-MM-dd hh:nn:ss:zzz',A))) ;
ExecSQL;
end;
showMessage(formatdatetime('yyyy-MM-dd hh:nn:ss:zzz',A));
end;假如当按按钮时候弹出的窗口和edit1中都显示2008-10-23 20:00:46:205,最后一次的弹出窗口也显示2008-10-23 20:00:46:205,但是我在数据库(MS SQLserver2000)中查看的时候插入的不是2008-10-23 20:00:46:205而是2008-10-23 20:00:46:207,推迟了2毫秒,多得时候推迟1毫秒,但是没有不差分离的那种!为什么出现这种状况?
var A:Tdatetime;
begin
A:=now();
edit1.text:=formatdatetime('yyyy-MM-dd hh:nn:ss:zzz',A);
showMessage(formatdatetime('yyyy-MM-dd hh:nn:ss:zzz',A));
with Adoquery1 do
begin
close;
sql.Clear;
sql.Add('插入时间 '+Quotedstr(formatdatetime('yyyy-MM-dd hh:nn:ss:zzz',A))) ;
ExecSQL;
end;
showMessage(formatdatetime('yyyy-MM-dd hh:nn:ss:zzz',A));
end;假如当按按钮时候弹出的窗口和edit1中都显示2008-10-23 20:00:46:205,最后一次的弹出窗口也显示2008-10-23 20:00:46:205,但是我在数据库(MS SQLserver2000)中查看的时候插入的不是2008-10-23 20:00:46:205而是2008-10-23 20:00:46:207,推迟了2毫秒,多得时候推迟1毫秒,但是没有不差分离的那种!为什么出现这种状况?
解决方案 »
- 第 1 行: ',' 附近有语法错误
- 找人转换一个小程序的代码,VS C++转换为D【可付费】
- DELPHI调用SQL SERVER存储过程的问题!
- 代码错在哪里? 用Delphi编写将EXCEL远程导入SQL SERVER
- 有关ADO的问题?
- 这个sql怎么写??
- COM+组件的结构(应用于进销存系统),实践中。。。
- delphi2010无法安装,怎么办?
- 为什么在报表QrExpr的表达式里SUM(IF((Query1.YT='41'),3,(Query1.DYSL))),急
- 怎样把声音文件(*.wav)变成资源文件(*.rec)???
- delphi怎么这么难学啊
- 再向林梅松请教一下(别人能够帮助同样感谢)
var
A,B:TDate;
begin
edit1.Clear;edit2.Clear;
A:=now();
edit1.text:=formatdatetime('yyyy-MM-dd hh:nn:ss:zzz',A);
B:=strtodatetime(edit1.text);
edit2.text:=formatdatetime('yyyy-MM-dd hh:nn:ss:zzz',B);
end;
你的这个当然有延迟了,但是我的和你说的这个不一样啊,从头到尾都是A:TDateTime,但是插入到数据库就有了出入,而且这个出入一会大一会小,有时候还没有出入!
在1999年7月出版的文献《融会贯通--Delphi4.0实战技巧》(以下简称“该书”)第89页专门介绍了两种获取当前系统时间的方法,但这两种方法都存在不足或错误,以下就此进行讨论。
该书第一种方法是利用Time()函数获得当前系统时间,返回结果是TDateTime结构类型的变量。例如:
procedure TForm1.Button2Click(Sender: TObject);
var
DateTime:TDateTime;
begin
DateTime:=Time();
Caption:=DateToStr(DateTime)+‘ ‘+TimeToStr(DateTime);
end;
但不论何日期,其结果却都是99-12-30 xx:xx:xx, 显然日期出错了。通过分析Delphi的帮助,Time()用于返回正确的“时间--时分秒”即TimeToStr(DateTime),而不应该用于返回“日期”。事实上,单独用于返回日期的系统函数是Date。
那么有什么是既可返回正确的“时分秒”又可返回正确的“年月日”呢? 可以用Now函数,例如:
procedure TForm1.Button1Click(Sender: TObject);
var
mytime: TDateTime;
begin
mytime:=Now;
Caption:=DateToStr(mytime)+‘ ‘+TimeToStr(mytime);
//或直接用 Caption := DateTimeToStr(Now);
end;
用Now返回的日期格式中年只有2位,即2000年显示为00, 这似乎不太令人满意. 此外Now和Time都只能获得精确到秒的时间,为了得到更精确的毫秒级时间,可以使用API函数GetSystemTime,它对应的TSystemTime类型的定义为:
TSystemTime = record
wYear: Word;
wMonth: Word;
wDayOfWeek: Word;
wDay: Word;
wHour: Word;
wMinute: Word;
wSecond: Word;
wMilliseconds: Word;
end;
显然,在程序逻辑中还能够方便地使用其结构成?时---各类时间值,因此使用函数GetSystemTime具有很大优越性。但该书中该函数的用法是错误的,通过查阅Windows SDK帮助可知,该函数原型为:
VOID GetSystemTime(LPSYSTEMTIME lpst),参数指针lpst获取系统时间,因此可如以下程序段实现:
procedure TForm1.Button3Click(Sender: TObject);
var
SysTime: TsystemTime;
begin
GetSystemTime(SysTime);
Caption:=IntToStr(SysTime.wYear)+‘ ‘+IntToStr(SysTime.wMonth);
//if SysTime.wYear>2000 then
// ......在程序逻辑中利用获取的各类时间值
end;
综合以上讨论,获取当前系统时间利用函数GetSystemTime比较方便而且灵活转过来,大家看看吧,不知道能帮到不?
procedure TForm1.Button4Click(Sender: TObject);
var A:Tdatetime;
str:string;
begin
A:=now();
str:=formatdatetime('yyyy-MM-dd hh:nn:ss:zzz',A);
edit1.text:=str;
showMessage(str);
with Adoquery1 do
begin
close;
sql.Clear;
sql.Add('插入时间 '+Quotedstr(str)) ;
ExecSQL;
end;
showMessage(str);
end;
你把它当成一个字符串来处理就不会出现这种情况了吧