Hallo Zusammen,
bisher hatten wir per ODBC eine Verbindung zu einer Foxpro 8 Datenbank (zu mehreren Tabellen). Aufgabe war hier, die Tabellen in Access 2013 abzubilden (lesender Zugriff). Leider sollen wir das nach Foxpro Datenbank Anbieter nicht mehr über ODBC lösen sondern über OLEDB.
Kann mir jemand Hilfestellung geben wie ich die Daten einbinden kann?
Würde schon reichen, wenn wir die externen Tabellen nach Programm start über eine Abfrage in eine ACCESS Tabelle kopieren und diese dann verwenden.
Vorab vielen Dank und Grüße
Von Microsoft OLE DB Provider for Visual FoxPro 9.0 (https://www.microsoft.com/en-us/download/details.aspx?id=14839) den OLEDB-Provider herunterladen und installieren und ggf. sich unter Visual FoxPro connection strings (https://www.connectionstrings.com/visual-foxpro/) über weitere Einstellungen informieren.
Danke für die Info. Anbei mein Ansatz, leider bekomme ich die Tabelle nicht kopiert !
Private Sub testkopiere2()
Dim strSQL As String
Dim dbConFromDatabase As ADODB.Connection
Dim ToDatabase As ADODB.Recordset
'open connection from database
Set dbConFromDatabase = New ADODB.Connection
Set ToDatabase = New ADODB.Recordset
dbConFromDatabase.ConnectionString = "Provider=VFPOLEDB;Data Source=C:\ACCESS\Import\kundansp.dbf;Collating Sequence=MACHINE"
dbConFromDatabase.Open
dbConFromDatabase.Execute ("SELECT * INTO KUNDANSP2 FROM KUNDANSP") ' Laufzeit error
dbConFromDatabase.Close
Set dbConFromDatabase = Nothing
ToDatabase.Close
Set ToDatabase = Nothing
End Sub
Unter Einhaltung der VPF SQL-Syntaxregelnsollte es so gelingen.
Private Sub testkopiere2()
With New ADODB.Connection
.Provider = "VFPOLEDB.1"
.Properties("Data Source") = "C:\ACCESS\Import"
.Properties("Collating Sequence") = "MACHINE"
.Open
.Execute "SELECT * FROM KUNDANSP INTO TABLE KUNDANSP2;"
.Close
End With
End Sub
Vielen Dank für die Antwort!
Leider kopiert er die DBF Datei ;)
War wohl von mir falsch formuliert, wollte das die DBF als Access Tabelle zur Verfügung steht, als Backend Tabelle für weitere Frontend Access 2013 Anwendungen.
Danke nochmals
AFAIK ist ein Verknüpfen nicht mehr möglich, weil dafür ein ODBC-Treiber notwendig wäre. :( Was maximal geht, ist, ADODB-Recordsets zu erstellen und diese beim Öffnen an das Recordset gebundener Formulare oder Berichte zuzuweisen.
Ok, dass bedeutet doch das dafür eine Tabelle benötigt wird ? Meine naive Vorstellung war, die Tabellen Struktur von Foxpro nach Access wie per odbc übernehmen zu können! Wenn in einem recordsets auch die datenbankstruktur übermittelt wird, dann könnte doch damit eine neue Tabelle erstellt werden ?
Habe jetzt einen Lösungsansatz gefunden! Was meint ihr dazu - könnte das passen? Funktioniert soweit, sieht jedoch umständlich aus !
Vielen Dan nochmals für die Unterstützung
Sub Test_temp_RS()
Dim cnLocal As ADODB.Connection 'Current project connection.
Dim oConn As New ADODB.Connection 'Connection to back end database.
Dim tempRS As New ADODB.Recordset
Dim rsTarget As New ADODB.Recordset 'Temp table to record users and de-dupe.
Dim fld As ADODB.Field
Set cnLocal = CurrentProject.Connection
cnLocal.Execute "DELETE FROM kundansp2;"
Set oConn = New ADODB.Connection
oConn = CreateObject("ADODB.Connection")
oConn.ConnectionString = "Provider=VFPOLEDB.1;Data Source=C:\ACCESS\Import\kundansp.dbf;Collating Sequence=MACHINE"
oConn.Open
Set tempRS = oConn.Execute("SELECT * FROM KUNDANSP")
rsTarget.Open "kundansp2", cnLocal, adOpenDynamic, adLockOptimistic
tempRS.MoveFirst
Do While Not tempRS.EOF
rsTarget.AddNew
rsTarget![KDNR] = tempRS.Fields("KDNR")
rsTarget![nachname] = tempRS.Fields("nachname")
rsTarget![vorname] = tempRS.Fields("vorname")
rsTarget.Update
tempRS.MoveNext
Loop
tempRS.Close
Set tempRS = Nothing
oConn.Close
Set oConn = Nothing
rsTarget.Close
Set rsTarget = Nothing
End Sub