It's going, it's going :-)
Den ULTRAlavpraktiske (Man må jo bruge de forhåndenværende søm.
) løsning blev:
1: luk formularen
2: slet tabellen (fra backend'en (BE))
3: drop linket til BE-tabellen
4: kør batchen
5: importer tabellen fra txt filen (lokalt)
6: eksporter tabellen til BE
7: drop den lokale tabel
8: opret link til BE-tabellen
Jeg fandt inspiration til funktionerne her:
http://www.micronetservices.com/manage_remote_backend_access_database.htm[code]
Private Sub btnDelRunBatchImport_Click()
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim strBatch As String: strBatch = "Q:\...\genererusers.bat"
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowStyle As Integer: windowStyle = 1
Dim strPath As String: strPath = "Q:\...\udlaansusers.txt"
Dim strDest As String: strDest = "Q:\...\Udlaan_be.accdb"
Dim strTbl As String: strTbl = "Medarbejder"
Dim strSpec As String: strSpec = "Udlaansusers Importspecifikation"
Call DeleteTableFromBackEnd(strDest, strTbl)
DoCmd.DeleteObject acTable, strTbl
wsh.Run strBatch, windowStyle, waitOnReturn 'wait for batch to finish
DoCmd.TransferText acImportFixed, strSpec, strTbl, strPath, False
Call PutTableOnBackEnd(strDest, strTbl)
DoCmd.OpenForm "Udlaan", acNormal
DoCmd.Close acForm, "OpdaterMedarbejdere"
End Sub
Function DeleteTableFromBackEnd(DbPath As String, TblName As String)
'Data still exists in txt-file. Backup is not mandatory.
Dim Db As Database
'test back end
On Error Resume Next
Set Db = OpenDatabase(DbPath)
If Err <> 0 Then
'failed to open back end database
Exit Function
End If
Db.Execute "DROP TABLE [" & TblName & "]"
If Not Db Is Nothing Then Db.Close
DeleteTableFromBackEnd = True 'defaults to false if it fails to get here
End Function
Function PutTableOnBackEnd(DBName As String, TblName As String) As Boolean
Dim Db As Database
'test back end
On Error Resume Next
Set Db = OpenDatabase(DBName)
If Err <> 0 Then
'failed to open back end database
Exit Function
End If
If Not Db Is Nothing Then Db.Close
'test if table is local
If IsNull(DLookup("Type", "MSysObjects", "Name='" & TblName & "' AND Type=1")) Then
'table is not local
Exit Function
End If
'put table on back end
DoCmd.TransferDatabase acExport, "Microsoft Access", DBName, acTable, TblName, TblName
If Err <> 0 Then GoTo Done
'link to the back end table
DoCmd.DeleteObject acTable, TblName
DoCmd.TransferDatabase acLink, "Microsoft Access", DBName, acTable, TblName, TblName
PutTableOnBackEnd = True 'defaults to false if it fails to get here
[/code]
Ja ja - jeg har stadig meget at lære. Så vidt jeg kan læse mig frem til, kan man ikke importere til en allerede eksisterende tabel, men det har måske ikke noget på sig?