要怎样才能去掉讨厌的 1899-12-30 (50分)

  • 主题发起人 主题发起人 delphi_初学者
  • 开始时间 开始时间
D

delphi_初学者

Unregistered / Unconfirmed
GUEST, unregistred user!
用Access 2000 建立的数据库,其中有一个日期/时间类型的字段,
已经在数据库设计时将格式设置为:短时间

编程从文本文件导入一个时间值 22:51
在数据库中却变为 1899-12-30 22:51:00,
有什么办法去掉 1899-12-30 ?
 
既然导入time值,就要带上date值,给date赋值就行啦
 
我也曾遇到过这个问题,1899-12-30 是日期时间格式中缺省的值(日期为零),后来我只得将字段类型变成文本,算是解决了吧
 
只能在输入时间时把单天的日期和时间值 22:51 一起输入。
否则就将字段类型变成文本
 
FormatDateTime('hh:nn:ss',StrToDateTime('xx:xx:xx'))

尽量使用字符串方式赋值
 
把22:51改成“22:51”就行了
 
非常感谢各位,但问题还是没有解决,我将的代码贴出来好了!

//去掉多余的分割符,规范字符串
Function RegulateStr(aString,Sepchar:String):String;
var
i,Num:Integer;
Flag:Boolean;
MyStr,TempStr:String;
begin
Flag:=False;//进行标志,去除多余的分割符
Num:=Length(aString);//计算aString串的长度
for i:=1 to Num do
begin
TempStr:=Copy(aString,i,1);//取aString串中的一字符
if TempStr<>SepChar then
begin
MyStr:=MyStr+TempStr;
Flag:=True;
end
else
begin
if (Flag=True) then
begin
Mystr:=Mystr+TempStr;
Flag:=False;
end;
end;
end;
if MyStr[Length(MyStr)]<>SepChar then //if MyStr[Length(MyStr)]>=SepChar then
MyStr:=MyStr+SepChar;
RegulateStr:=MyStr;
end;

//得到字符串中一个子串
//因要改变参数aString的值,所以将它用var定义.
Function GetSubStr(var aString:String; SepChar:String):String;
var
Mystr:String;
StrLen:Integer;
SepCharPos:Integer;
begin
StrLen:=Length(aString);
SepCharPos:=Pos(SepChar,aString);
//计算分割符在子串中的位置
MyStr:=Copy(aString,1,SepCharPos-1);
//将分割符前所有字符放到mystr串中
Delete(aString,1,SepCharPos);
//除去分割符和分割符前的子串
GetSubStr:=MyStr;
//返回一个字段
end;

//计算一个字符串要被分割成几个字段.
//参数:aString是所需分割的一个字符串,SepChar是分割符。
Function GetSubStrNum(aString:String; SepChar:String):Integer;
var
i:Integer;
StrLen:Integer;
Num:Integer;
begin
StrLen:=Length(aString);
Num:=0;
for i:=1 to StrLen do
begin
if Copy(aString,i,1)=SepChar then
Num:=Num+1;
end;
GetSubStrNum:=Num;
end;

//读Txt文件内容到数据库
procedure Read_TxtToTable(TableS : TADOTable; FileNameS, Space: string);
var
i,j:Integer;
MyLine,S, SS :String;
F: TextFile;
begin
TableS.Active := True;

AssignFile(F, FileNameS); //将 F 变量与指定文件关联
Reset(F); //打开文件

while not EOF(F) do
begin
Readln(F, MyLine); //读出第一行
TableS.Append;
SS := RegulateStr(MyLIne,Space);
for j:=1 to GetSubStrNum(SS,Space)-1 do //计算一个字符串要被分割成几个字段.
begin
s := GetSubStr(SS,Space); //得到字符串中一个子串

TableS.edit;

IF j = 1 then
begin
TableS.fields[2].aSstring := s;
end;

if j = 3 then
begin
TableS.fields[3].aSstring := s ;
end;

if j = 4 then
begin
TableS.fields[4].aSstring := S
end;

if j = 5 then
begin
TableS.fields[5].aSstring := s;
end;

if j = 9 then
begin
TableS.fields[6].aSstring := s;
end;

end;
TableS.post;
end;

CloseFile(F); //关闭文件

end;
 
没有办法去掉,数据库中的日期部分,你不要使用,就可以了
 
TableS.fields[?].aSstring := datetostr(date)+' '+s;
那个日期/时间类型的字段的序号 ?
 
你不会连日期一起存进去的吗?
这样,一方面可以去掉1899-12-30,另一方面又可以记录下日期,也就没有上述问题了。
 
这是文本文件的例子:
17 10-06 09:24 10:19 0:56 3.0 3.0 0.0 3.0
15 10-06 09:53 10:22 0:29 3.0 1.5 0.0 1.5
14 10-06 10:36 10:59 0:23 3.0 1.0 0.0 1.0
09 10-06 09:34 11:16 1:42 3.0 5.0 0.0 5.0

 
还是在数据表中将时间型字段用字符型的代替吧
 
多人接受答案了。
 
后退
顶部