如何实现不需要配置ODBC,操作DBF表? (100分)

  • 主题发起人 主题发起人 hunyuan
  • 开始时间 开始时间
H

hunyuan

Unregistered / Unconfirmed
GUEST, unregistred user!
用ADO的ODBC可以实现操作DBF表,但是要配置ODBC,是否有办法动态改变ODBC设置,
也就是说可以操作本机任意目录的DBF表。
另外,不能象ASP调用ACCESS那样吗?直接给出路径就可以?用文件dsn连接能动态改变吗?
我这有DBF文件头的格式,如何才能具体操作DBF文件呢?有代码可以学习吗?
 
Griffin Solutions, Inc 的halcn组件还可以,但是不是特别稳定。
小数据库操作操作还行。如果没有邮件给我,我发给你woodstock@softtend.com
但是建议还是用odbc或者bde吧。
 
可以在程序中动态创建配置。以下的程序片断创建数据库的目录为程序执行目录:

var
Temp : TRegistry;
s:string;
i,nXx,nCy:integer;

begin
Temp := TRegistry.Create; //建立一个Registry实例
with Temp do
begin
RootKey:=HKEY_LOCAL_MACHINE; //设置根键值为HKEY_LOCAL_MACHINE
//打开键名 software/ODBC/ODBC.INI/ODBC Data Sources,不存在则建立
if OpenKey('Software/ODBC/ODBC.INI/ODBC Data Sources',True) then
begin //注册一个DSN名称
WriteString( 'MyHz', 'Microsoft FoxPro VFP Driver (*.dbf)' );
end
else
begin//创建键值失败
SHOWMESSAGE('增加ODBC数据源失败');
exit;
end;
CloseKey;

//找到或创建Software/ODBC/ODBC.INI/myaccess97,写入DSN配置信息
if OpenKey('Software/ODBC/ODBC.INI/MyHz',True) then
begin
WriteString( 'BackgroundFetch', 'Yes' );//数据库目录
WriteString( 'Collate', 'Machine' );
WriteString( 'Deleted', 'Yes' );
WriteString( 'Description','My Reg' );//数据源描述
WriteString( 'Driver', 'C:/WINDOWS/SYSTEM/VFPODBC.DLL' );//驱动程序DLL文件 ODBCJT32.DLL文件依据你的存放路径
WriteString( 'Exclusive', 'No' );
WriteString( 'SourceDB',ExtractFileDir(ExtractFilePath(Application.EXEName)));
WriteString( 'SourceType', 'DBF' );
WriteString( 'Null', 'Yes' );
WriteString( 'SetNoCountOn', 'No' );
end
else//创建键值失败
begin
showmessage('增加ODBC数据源失败');
exit;
end;
CloseKey;
end;

 
TDBF,不用数据库引擎就可以操作DBF。
 
TO:bigroute,
TDBF,哪有下载的呢?
 
http://bcbhome.myrice.com/
 
留Email,我发给你。
 
用ADOCONNECTION可以操作DBF表啊,给你一个例子,我就是这样用的。
procedure TFrmMain.OperateDbf;
begin
try
adoconnection1.Connected := False;
if trim(e1.Text) <> '' then DataPath := Trim(e1.Text);
adoconnection1.ConnectionString := 'Provider=MSDASQL.1;Persist Security Info=False;Extended '
+ 'Properties="Driver={Microsoft Visual FoxPro Driver};UID=;SourceDB='
+ DataPath + ';SourceType=DBF;Exclusive=Yes;BackgroundFetch=Yes;'
+ 'Collate=Machine;Null=Yes;Deleted=Yes;"';
adoconnection1.Connected := True;
// Application.MessageBox('成功连接数据文件!','提示信息',mb_ok or mb_iconinformation);
except
Application.MessageBox('连接数据文件失败!', '提示信息', mb_ok or mb_iconinformation);
Exit;
end;
with adoquery1 do
begin
close;
sql.Text := 'select * from ' + #39 + datapath + #39;
open;
end;
end;
 
yulm@cy6.dq.cnpc.com.cn
谢谢!
http://bcbhome.myrice.com/下载的TDBF在D6中不正常,总提示
Fields name missing.
有FOR D6的吗?
 
再提供一个:
http://www.hktk.com/soft/soft_con_database/tdbf.html
我试过在d6没问题!
 
用ado的jet ole db 就可以直接连结dbf了,为何要配置odbc?
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/Docs/DBF/;Extended Properties=dbase 5.0;Persist Security Info=False

 
多谢,用MikeZ的方法可行,原来是这么简单的事啊:-)
 
利用Tadoconnection也可以啊,
其实只要在程式里动态更改database属性指向数据表所在目录就可以了。
 
MikeZ 兄的方法对于dbase数据库有效,但是对于vfp的部分数据库有问题,无法正常访问。
我在使用中是这样的:
需要配置一下odbc,但是可以打开任意路径的数据库
连接串:
Provider=MSDASQL.1;Persist Security Info=False;Data Source=Visual FoxPro Tables
然后再程式里设定tadoconnection.defaultdatabase的值,指向你要的路径就可以了。

 
诸葛武侯兄:
对不同的vfp数据库只要对Extended Properties=进行相应的配置,通常是可以的。通过odbc当然能访问数据,但需要预先配置odbc数据源,并且作为数据库访问多了一个环节,最好能够直接访问
 
后退
顶部