一个困扰多时的问题,200分...(200分)

  • 主题发起人 主题发起人 qf0421
  • 开始时间 开始时间
Q

qf0421

Unregistered / Unconfirmed
GUEST, unregistred user!
当你用FOXPRO建立一个DBF数据库,再用DATABASE DESKTOP打开时,会报告找不到索引文件,并有三个选项,如何在DELPHI中用程序实现第三个选项的功能:Open and detach the index file?
 
如果是vfp,bde会不认得它,通过odbc才可以
 
如果是vfp视版本而定
 
pipi,那怎样通过ODBC呢?
或者有没有什么函数可以实现BDE的"OPEN AND DETACH"?
 
2种方法:

1、
首先在odbc建一个数据源,假如叫 odbc_mydata 吧
建完后再打开bde的sql explore或者bde config就可以看到
一个bde别名也是 odbc_mydata ,你访问它实际是通过
bde到odbc访问数据库。
这样的程序copy到别处,要在别处安装bde和odbc

2、
或者使用第3方控件比如odbc98,它不需要bde,是直接访问
odbc的,
这样的程序copy到别处,只要在别处安装odbc。
 
可我想模仿BDE的"OPEN AND DETACH",可以吗?
 
DETACH实际上作了什么?
 
detach是删除index吧
 
detach是分离的意思.
我猜想BDE是把VFP的*.DBF的数据库中的索引信息删除吧,要不然DATABASE DESKTOP打不开呀.
另外,PIPI,ODBC上是不是DSN建在用户DSN那里,我好象不能选择路径,为什么?
你能给个示例吗?谢谢.
 
进odbc 管理器
用户DSN
添加
选visual foxpro tables (有数据库的就选database)
就可以了。

不能选路径是要清除“使用当前路径”这个 checkbox 以后就可以选了
 
为什么非得用database desktop呢?这个东东一点用处都没有!你既然使用foxpro
建立的数据库,那么在设计时可以直接用foxpro生成数据,再通过odbc数据源管理器
(一般windows 9x/nt的控制面板中有)为这个库建立驱动(具体做法是为该库选一个驱动类型,再选择这个库文件,然后选repair,就ok了!)
最后用sql explore(delphi中带的)为odbc建好得驱动设立别名,一般就可以在
编写的程序中使用了。
在此过程中,一定要注意odbc的驱动最好要与你建的库文件的类型相同,不然就会出现打开不了的现象。还要注意各种数据库应用程序驱动的版本号才行。
强烈建议抛开database desktop!
 
说老实话,我还想模仿"DETACH",可行吗?
 
Detach 应该就是没打开表的情况下删除了index吧?
如果是,用 dbiDeleteIndex
 
->pipi:dbiDeleteIndex是什么对象的方法?(我好象没查到呀)
 
不太清楚vfp的数据库结构,如果和dbase差不多的话,你可以试一试
把*.dbf文件的第28个字节变成0,就可以取消索引标志.

至于怎样发现缺少索引文件,可以用异常捕获:
try
Table1.DatabaseName := TheTableDir;
Table1.TableName := TheTableName;
Table1.Open;
except
on E:EDBEngineError do
if Pos('Index does not exist. File', E.Message)>0 then
begin
//发现缺少索引文件,用我上面介绍的方法清除索引标志
//....
end;
end;
 
->cAkk:在下不才,能详细点吗?(how to change)
 
procedure RemoveMDXByte(dbFileName: String);
const
Value: Byte = 0;
var F: File of byte;
begin
AssignFile(F, dbFileName);
Reset(F);
Seek(F, 28);
Write(F, Value);
CloseFile(F);
end;
 
FoxPro 建立的数据库的扩展名是.dbf,但是database desktop 打开是.db的数据库。
 
.db应该是paradox的数据库吧!
 
cAkk,你的方法完全可行,你是怎么知道"28字节"的?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部