L
lycwg
Unregistered / Unconfirmed
GUEST, unregistred user!
我用以下程序Pack一个MicroSoft Visual Foxpro 5.0的数据表未能成功,
请高手指点!!
function PackTable(Table: TTable): Boolean;
var
Props : CURProps;
begin
if not Table.Active then
raise EDatabaseError.Create('Table必需已经打开');
if not Table.Exclusive then
raise EDatabaseError.Create('Table必需以独占方式打开');
Check(DbiGetCursorProps(Table.Handle, Props));//检测数据库类型
if (Props.szTableType = szDBASE) then
begin
Check(DbiPackTable(Table.DBHandle, Table.Handle, nil,
szDBASE,True));
Result := True;
end
else
raise EDatabaseError.Create('Table必需是dBASE或FoxPro类型');
Table.Open;
end
跟踪时发现问题所在是 Props.szTableType其值为'Micorsoft Visual
Forxpro Driver' 而非szDBASE的值('DBASE')
而我的ODBC配置里面的驱动程序是用的Microsoft Visual Foxpro Driver
(版本为6.00.8440.0 VFPODBC.DLL ),我试着将ODBC配置更换为Microsoft
Foxpro Driver或MicroSoft dBase Driver (其驱动程序均为:版本
4.00.4202.00 ODBCJT32.DLL ),系统报告对该数据类型的支持已更换为
Microsoft Visual Foxpro。应该说Microsoft Visual Foxpro的数据表
仍是文件型的数据库,可有其他方法进行Pack?(不会叫我必须换低版本的ODBC
驱动程序吧?! *^*)
请高手指点!!
function PackTable(Table: TTable): Boolean;
var
Props : CURProps;
begin
if not Table.Active then
raise EDatabaseError.Create('Table必需已经打开');
if not Table.Exclusive then
raise EDatabaseError.Create('Table必需以独占方式打开');
Check(DbiGetCursorProps(Table.Handle, Props));//检测数据库类型
if (Props.szTableType = szDBASE) then
begin
Check(DbiPackTable(Table.DBHandle, Table.Handle, nil,
szDBASE,True));
Result := True;
end
else
raise EDatabaseError.Create('Table必需是dBASE或FoxPro类型');
Table.Open;
end
跟踪时发现问题所在是 Props.szTableType其值为'Micorsoft Visual
Forxpro Driver' 而非szDBASE的值('DBASE')
而我的ODBC配置里面的驱动程序是用的Microsoft Visual Foxpro Driver
(版本为6.00.8440.0 VFPODBC.DLL ),我试着将ODBC配置更换为Microsoft
Foxpro Driver或MicroSoft dBase Driver (其驱动程序均为:版本
4.00.4202.00 ODBCJT32.DLL ),系统报告对该数据类型的支持已更换为
Microsoft Visual Foxpro。应该说Microsoft Visual Foxpro的数据表
仍是文件型的数据库,可有其他方法进行Pack?(不会叫我必须换低版本的ODBC
驱动程序吧?! *^*)