2014-01-22 37 views
1

我必須在我的Delphi應用程序中創建dbf文件。Delphi ADODB創建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與消息「[微軟] [ДрайверODBC dBase]Ошибкасинтаксисаприопределенииполя'。

這意味着:俄語翻譯中的語法錯誤。

但這CommandText中完美的作品:

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

領域(Number_,而不是)的名稱的差異

如何創建表場數?

也許我需要不同的連接字符串?

回答

1

看來我找到了解決這個問題的辦法。正確的語法是:

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

我添加[]到外地

0

使用VFPOLEDB提供商與下面的連接字符串的名稱:

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

在這種情況下,您CREATE TABLE子句將工作正常。

+0

謝謝您的建議 –