ADO方式创建DBF文件报错,请问错误原因

xumenger 2015-12-18 08:22:01
数据库连接串:SourceDress := ExtractFilePath(Application.ExeName);
sConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+SourceDress+';Extended Properties=dBase 5.0;Persist Security Info=False;';

创建DBF文件的语句: Sqltext:= 'create table '+ DBFName +'(QSBH char(5),GDZH char(10),ZQDM char(6),FQSL char(12),SGRQ char(8))';
DBFName是想要创建的DBF文件的目录

在自己的环境下创建OK,找了两台没有任何开发环境的机器创建DBF文件也OK,但是部署到用户那里就报错,报错信息是:Create table语句中的语法错误

看了客户的环境,Access是有的

请问这个问题大概出现在哪里,现在完全没有思路
...全文
233 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
liups 2015-12-21
  • 打赏
  • 举报
回复
引用 10 楼 xumenger 的回复:
找到方法了,直接根据dbf文件格式创建,不通过数据库驱动,具体方法还在整理
http://download.csdn.net/detail/wpy020327/2057222 这个控件就是直接用文件操作的,仅一个.pas文件的源码,很有参考价值(但是没有创建DBF的部分)
liups 2015-12-19
  • 打赏
  • 举报
回复
5楼代码通过
xumenger 2015-12-19
  • 打赏
  • 举报
回复
试试这个呢?
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, ADODB;

type
  TForm1 = class(TForm)
    btn1: TButton;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
var
  con1: TADOConnection;
  qry1: TADOQuery;
  SourceDress, sConnectionString, sTableName, Sqltext: string;
begin
  con1:= TADOConnection.Create(nil);
  qry1:= TADOQuery.Create(nil);
  SourceDress := ExtractFilePath(Application.ExeName);
  sConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+SourceDress+';Extended Properties=dBase III;Persist Security Info=False;';
  con1.ConnectionString:= sConnectionString;
  con1.Open;

  //创建DBF文件
  sTableName := 'tbTest' + FormatDateTime('yyyymmddhhmmss',Now);
  Sqltext:='create table '+ sTableName + '.dbf' +'(row1 char(6),row2 char(8),row3 char(4))';
  qry1.Connection:= con1;
  qry1.Close;
  qry1.SQL.Clear;
  qry1.SQL.Add(SqlText);
  qry1.ExecSQL;

  //在里面放入一条数据
  Sqltext := 'insert into ' + sTableName + '(row1,row2,row3)values(' + QuotedStr('123456') + ',' + QuotedStr('12345678') + ',' + QuotedStr('yy') + ')';
  qry1.Close;
  qry1.SQL.Clear;
  qry1.SQL.Add(Sqltext);
  qry1.ExecSQL;

  qry1.Free;
  con1.Free;
end;

end.
liups 2015-12-19
  • 打赏
  • 举报
回复
引用 3 楼 xumenger 的回复:
我希望能找到一个不要客户再去安装其他的软件、驱动的方式,直接能够在所有的机器的基础配置上提供一个方法可以创建DBF文件的
你的代码在我的机器上也同样报错! 我的环境: win7 x64 sp1,office 2003,VFP 9.0,rad xe2,interbase xe3,sql server 2000,sql server 2008 R2 全部都不是什么精简版,补丁全打
xumenger 2015-12-19
  • 打赏
  • 举报
回复
我希望能找到一个不要客户再去安装其他的软件、驱动的方式,直接能够在所有的机器的基础配置上提供一个方法可以创建DBF文件的
xumenger 2015-12-19
  • 打赏
  • 举报
回复
找到方法了,直接根据dbf文件格式创建,不通过数据库驱动,具体方法还在整理
liups 2015-12-19
  • 打赏
  • 举报
回复
你那个方法,很多人为了物理删除一条记录都很费劲
liups 2015-12-19
  • 打赏
  • 举报
回复
有控件! 但是我不明白为什么你非要DBF? 如果说标准系统自带的,MDB是最好的 如果是要交换数据数据,txt就是最好的 如果一定完全脱离系统,还可以选择嵌入式的数据库,比如firebird 如果你一定要DBF,只有1楼方法是最佳的
xumenger 2015-12-19
  • 打赏
  • 举报
回复
有没有什么不通过数据库,直接创建DBF文件的方法,毕竟DBF文件也是有固定的格式的嘛
liups 2015-12-18
  • 打赏
  • 举报
回复
https://download.microsoft.com/download/b/f/b/bfbfa4b8-7f91-4649-8dab-9a6476360365/VFPOLEDBSetup.msi 可以在以上地址下载驱动 PS:这个方法不仅仅只能执行SQL,大多VFP命令也能执行,不管它是SQL命令或传统的VFP命令
liups 2015-12-18
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
begin
  with adoquery1 do
  begin
    CLOSE;
    sql.Clear;
    sql.Add('CREATE TABLE testtbl (bh char(10),xm char(16),cj number(6,2))');
    ExecSql;
    close;
    close;
  end;
  adoconnection1.Close;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  s1,s2,s3,s:string;
begin
  s1:='Provider=VFPOLEDB.1;Data Source=';
  s3:='data;Password="";Collating Sequence=MACHINE';
  s2:=ExtractFilePath(Application.ExeName);
  s:=s1+s2+s3;
  ADOConnection1.ConnectionString :=s;
  ADOConnection1.Connected:=true;

end;
我感觉是语法不对!应当使用标准VFP语法。 以上代码在装oledb for vfp(vfp9.0带的或单独下载),原始代码使用d7开发,xe2下面修改,win7 x64下面通过

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧