[AccessD] Relinking Foxpro Tables

David Emerson newsgrps at dalyn.co.nz
Thu Feb 24 13:04:34 CST 2005


Gustav,

At 24/02/2005, Gustav Brock wrote:
>Hi David
>
>First, I think TABLE=""; should be omitted from the connect string.
>Second, where/why do you close the mdb - cannot see that.
>Third, try to refresh the TableDefs collection:
>
>DBEngine(0)(0).TableDefs.Refresh

First - Thanks - deleted table=.

Second - I was manually closing and opening the database.

Third - Have added this to my code.

Here is more information.

1) Initially I link the tables using File .. Get External Data .. Link 
Tables.  Files of Type = ODCB Databases.  Machine Data Source = Visual 
FoxPro Tables.  Configuration Connection = Free Table Directory.  I then 
select the directory which holds the tables.  Next pops up a list of tables 
available to be linked.  I select all.  Then for each table I need to 
select a unique record identifier.

In the table properties the description field holds the following:
ODBC;DSN=Visual FoxPro Tables;SourceDB=d:\CLIENTS\PM 
SERVICES\DATA\20050216;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;;TABLE=rs2aaaa1m

The connect field in MSysObjects holds the following:
DSN=Visual FoxPro Tables;SourceDB=d:\CLIENTS\PM 
SERVICES\DATA\20050216;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;

The name field in MSysObjects holds the following:
rs2aaaa1m

At this point I can edit data in the tables.

2) Then I run my code the table properties the description field changes to:
ODBC;DSN=Visual FoxPro Tables;SourceDB=D:\Clients\PM 
Services\Data\20050217;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;;TABLE=rs2aaaa1m

The connect field in MSysObjects holds the following:
DSN=Visual FoxPro Tables;SourceDB=D:\Clients\PM 
Services\Data\20050217;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;

At this point when I open the table I still have the data from the old 
table showing.  I am unable to delete it.  Closing the database and opening 
it in Access still doesn't help.  It is only when I close Access down and 
reopen it that the new tables are appearing.  Even then I am not able to 
change any data (this last point doesn't matter as we just want to access 
the data for reports but I thought I would throw it in anyway).

Here is the current code:

--Code on the cmd button:
Private Sub cmdDataLink_Click()

     On Error GoTo Err_cmdDataLink_Click

     If basDataFileLink() = True Then
         MsgBox "Data files linked successfully."
     Else
         MsgBox "You will need to make sure that the data files are linked 
before you can run any reports."
     End If

Exit_cmdDataLink_Click:
     Exit Sub

Err_cmdDataLink_Click:
     Select Case Err
         Case 0
             MsgBox "No Error", vbCritical, "Link Data"
         Case Else
             Call basErrorMsg("cmdDataLink_Click")
     End Select
     Resume Exit_cmdDataLink_Click

End Sub

Public Function basDataFileLink() As Boolean

     On Error GoTo Err_basDataFileLink

     Dim mdb As DAO.Database, mtbl As DAO.TableDef, strDataPath As String, 
strNewConnect As String

     Set mdb = CurrentDb

     Call basInfo("Linking data files.")
     basDataFileLink = False
     If IsNull(Me!txtDataFolder) = True Then Me!txtDataFolder = " "
     strDataPath = Me!txtDataFolder
     strNewConnect = "ODBC;DSN=Visual FoxPro Tables;SourceDB=" & 
strDataPath & 
";SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;"
     For Each mtbl In mdb.TableDefs
         'Only check this table link if this table IS linked.
         If InStr(mtbl.Connect, "DSN=Visual FoxPro Tables") <> 0 Then
             mtbl.Connect = strNewConnect ' & mtbl.Name
             mtbl.RefreshLink
         End If
     Next
     DBEngine(0)(0).TableDefs.Refresh

     mdb.Close
     Set mdb = Nothing
     basDataFileLink = True

Exit_basDataFileLink:
     DoCmd.Close acForm, "frmInfoForm"
     Exit Function

Err_basDataFileLink:
     Select Case Err
         Case 3011
             MsgBox "Unable to find all the data files.", vbCritical, "Link 
To Data Files"
         Case Else
             Call basErrorMsg("basDataFileLink")
     End Select
     Resume Exit_basDataFileLink

End Function

If anyone is interested in testing it for me I can send sample tables.


Regards

David Emerson
Dalyn Software Ltd
25 Cunliffe St, Churton Park
Wellington, New Zealand
Ph/Fax (04) 478-7456
Mobile 027-280-9348 




More information about the AccessD mailing list