一般的参数赋值的方法是不行的,如下方法:
var i:integer;
fldName : string;
d : TDateTime;
begin
...
sSQL := Format('insert into abc.dbf (TyNUMERIC,TyChar,TyDate,Tyvarchar,Tydatetime)'
+' values (%d,%s,%s,%s,%s)',
[11,
QuotedStr('TyChar'),
':TyDate',
QuotedStr('Tyvarchar'),
':Tydatetime']);
adoCmd1.CommandText := sSQL ;
adoCmd1.Parameters.ParamByName('TyDate').Value:=d; // 这个可以
adoCmd1.Parameters.ParamByName('Tydatetime').Value:=d; // 这个就会出问题
...
end;
需要用下面的方法:
procedure InsertDBF(const path:string);
var
sSQL,sdatetime,sDate:string;
adoCmd1: TADOCommand;
ADOConnection1 :TADOConnection;
begin
ADOConnection1 := TADOConnection.Create(nil);
adoCmd1:= TADOCommand.Create(nil);
try
ADOConnection1.ConnectionString := 'Provider=VFPOLEDB;Data Source='+
path+ ';Mode=Share Deny None;User ID="";Password="";';
adoCmd1.Connection := adoconnection1;
sdatetime := FormatDateTime('mm/dd/yyyy hh:nn:ss',now);
sDate := FormatDateTime('mm/dd/yyyy',now) ;
sSQL := Format('insert into abc.dbf (TyNUMERIC,TyChar,TyDate,Tyvarchar,Tydatetime)'
+' values (%d,%s,%s,%s,%s)',
[11,
QuotedStr('TyChar'),
'CTOD("'+sDate+'")',
QuotedStr('Tyvarchar'),
'CTOT("' + sdatetime + '")']);
//DBF的相关资料 http://blog.163.com/lijinquan_yss/blog/static/16640322020130175449399/
adoCmd1.CommandText := sSQL ;
adoCmd1.Execute;
finally
adoCmd1.Free;
ADOConnection1.Free;
end;
end;