Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Access 2013 und FoxPro 8

Begonnen von David2016, Juli 22, 2016, 14:15:50

⏪ vorheriges - nächstes ⏩

David2016

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

Lachtaube

Von Microsoft OLE DB Provider for Visual FoxPro 9.0 den OLEDB-Provider herunterladen und installieren und ggf. sich unter Visual FoxPro connection strings über weitere Einstellungen informieren.
Grüße von der (⌒▽⌒)

David2016

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

Lachtaube

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
Grüße von der (⌒▽⌒)

David2016

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

Lachtaube

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.
Grüße von der (⌒▽⌒)

David2016

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 ?

David2016

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