Delphi ADODB创建dbf表

时间:2014-01-22 18:41:01

标签: delphi ado dbf

我必须在我的Delphi应用程序中创建dbf文件。

对于这种情况,我使用ADODB。

连接字符串:

const
  ConnStringDBF =
  'Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=%s;';
  //'Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=dBASE III;OLE DB Services=-1;Data Source=%s;';
  //'Driver={Microsoft Visual Foxpro Driver};SourceType=DBF;SourceDB=%s;';
  //Driver='Microsoft.ACE.OLEDB.12.0;Data Source=%s;';

程序(不起作用):

procedure InsertRecordInDBF(file_name: string; DbfRecord: TDbfRecord);
var
  ADOConnDBF  : TADOConnection;
  ADOCommand : TADOCommand;
begin
  ADOConnDBF := TADOConnection.Create(nil);
  ADOConnDBF.ConnectionString := Format(ConnStringDBF, [data_dir]);
  ADOCommand := TADOCommand.Create(nil);
  ADOCommand.Connection := ADOConnDBF;
  ADOCommand.CommandText := 'Create Table ' + file_name + ' ('
                        + 'NUMBER CHAR(11)'
                        + ')'
                        ;
  ADOCommand.Execute;
end;

错误是:

引发异常类EOleException并显示消息'[Microsoft] [ДрайверODBCdBase]Ошибкасинтаксисаприопределенииполя'。

这意味着:俄语翻译中的语法错误。

但是这个CommandText非常有效:

  ADOCommand.CommandText := 'Create Table ' + file_name + ' ('
                        + 'NUMBER_ CHAR(11)'
                        + ')'
                        ;

字段名称的差异(数字_ 而不是数字

如何创建包含字段编号的表?

也许我需要不同的连接字符串?

2 个答案:

答案 0 :(得分:2)

似乎我找到了解决这个问题的方法。正确的语法是:

  ADOCommand.CommandText := 'Create Table ' + file_name + ' ('
                        + '[NUMBER] CHAR(11)'
                        + ')'
                        ;

我将[]添加到字段的名称

答案 1 :(得分:0)

将VFPOLEDB提供程序与以下连接字符串一起使用:

Provider=VFPOLEDB.1;Data Source=%s;Password="";Collating Sequence=MACHINE

在这种情况下,您的CREATE TABLE子句将正常工作。