Hej! Hej, finns verkligen filen då? Hej Pelle! Jag skulle peka om det länkade tabellerna. Du kan göra detta med följande funktion: Tack så jättemycket Andreas! :-) Nu har jag fått till så att användaren kan "browsa" och välja vilken backendbackup som ska användas! :-) Jag har gjort min variant: Tack för att du delar med dig av din variant! :-)Använda tabellerna i backend-backupen.
Problemet i mitt förra inlägg kvarstår. Tycker att jag testat "allt", så jag hoppas fortfarande på hjälp.
Jobbar nu med en backuplösning. Har delat upp databasen i frontend och backend. Har lyckats få till så att man kan ta backup på databasens backend genom att trycka på en knapp i ett formulär.
Men hur gör man sedan om man vill att databasen ska använda sig av tabellerna i en backend-backup istället för aktuell backend? Användaren ska bara kunna göra det via ett formulär.
Jag ser två möjligheten:
1. Att man raderar databasens backend.
En kopia på backend-backupen görs som får samma namn databasens backend hade.
Denna kopia läggs in i samma katalog som databasens backend var.
2. Att man raderar tabellerna i databasens backend.
Sedan importerar man tabellerna från backend-backupen.
Vilket angreppssätt är bättre? Eller har ni någon bättre lösning?
Jag har börjat med angreppssätt 2, men stötte på problem.
Får felmeddelande 3024: "Det går inte att hitta filen",
då jag försöker ta bort en tabell från databasens backend.
Det berörda koden finns här nedanför.
Sökvägen skrivs ut rätt i MsgBox och filen finns, men
Set Db = OpenDatabase(DbPath)
misslyckas ändå och ger ovanstående felmeddelande.
Mycket tacksam för hjälp!
Carina
Sub CallDeleteTableFromBackEnd()
'This is dangerous - be careful! Make a backup of the back end database first.
Dim Result As Boolean
'sample call:
Result = DeleteTableFromBackEnd("C:\Carina\XXXXXX\XXXXXXX\Delad databas\XXXXXXXXX_2010_02_18d_be.accdb", "saknarbelopp")
Debug.Print Result
End Sub
Function DeleteTableFromBackEnd(DbPath As String, TblName As String)
'This is dangerous - be careful! Make a backup of the back end database first.
'On Error GoTo ErrorHandler
Dim Db As Database
MsgBox ("DbPath: " & DbPath)
MsgBox ("Tblname: " & TblName)
'test back end
On Error Resume Next
Set Db = OpenDatabase(DbPath)
If Err <> 0 Then
MsgBox ("Felmeddelande: " & Err.Number & "; Beskrivning: " & Err.Description)
'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
Done:
End FunctionSv: Använda tabellerna i backend-backupen.
Du har också ett filsuffix som är .accdb - är det korrekt?Sv:Använda tabellerna i backend-backupen.
Tack för ditt svar!
Ja, filen finns och det är en accdb.
Har även testat att lägga den direkt i roten och använda "C:\XXXXX_2010_02_18d_be.accdb" istället, men det blir samma felmeddelande.
Sökväg, inklusive själva filnamnet, är korrekt. Förstår inte varför det blir felmeddelande?
Är det här angreppssättet det bästa?
/CarinaSv: Använda tabellerna i backend-backupen.
Public Sub ReLink(FileName As String)
Dim db As DAO.Database
Dim t As DAO.TableDef
Set db = CurrentDb
For Each t In db.TableDefs
If t.Attributes And DAO.TableDefAttributeEnum.dbAttachedTable Then
t.Connect = ";DATABASE=" + FileName
t.RefreshLink
End If
Next
End Sub
Sv:Använda tabellerna i backend-backupen.
Har nu testat att hårdkoda in FileName och allt fungerar perfekt.
Nu måste jag "bara" få till så att användaren själv kan välja vilken backup som ska användas.
/Carina Sv: Använda tabellerna i backend-backupen.
Sv:Använda tabellerna i backend-backupen.
Public Sub ReLinkTablesInDatabase()
Dim FileName As String
FileName = OpenFileDialog("Select an database you would like to link to...")
If Len(FileName) Then
ReLinkTables FileName, False
Else
MsgBox "Operation was aborted!"
End If
End Sub
Public Function OpenFileDialog(Optional Title As String = "Select a database") As String
Dim dialog As Office.FileDialog ' Microsoft Office 12.0 Object Library
'Set up the File Dialog.
Set dialog = Application.FileDialog(msoFileDialogFilePicker)
With dialog
'Allow user only to select a single file in dialog box
.AllowMultiSelect = False
'Set the title of the dialog box.
.Title = Title
'Clear out the current filters, and add our own.
With .Filters
.Clear
.Add "Microsoft Access Databases (*.accdb;*.mdb;*.adp;*.mda;*.accda;*.mde;*.accde;*.ade)", _
"*.accdb;*.mdb;*.adp;*.mda;*.accda;*.mde;*.accde;*.ade)"
.Add "All Files (*.*)", _
"*.*"
End With
'Show the dialog box.
If .Show() Then
'If the Show() method returns True, the user picked a file.
OpenFileDialog = .SelectedItems(1)
Else
'If the Show() method returns False, the user clicked Cancel.
OpenFileDialog = vbNullString
End If
End With
End Function
Public Sub ReLinkTables(FileName As String, Optional Force As Boolean = False)
Dim wrk As DAO.Workspace
Dim db As DAO.Database
Dim t As DAO.TableDef
Dim f As Boolean
Dim i As Long
On Error GoTo ReLinkTables_Err
Set wrk = DBEngine.Workspaces(0)
Set db = CurrentDb()
SysCmd acSysCmdInitMeter, "Linking tables...", db.TableDefs.Count
wrk.BeginTrans
For Each t In db.TableDefs
i = i + 1
SysCmd acSysCmdUpdateMeter, i
If t.Attributes And DAO.TableDefAttributeEnum.dbAttachedTable Then
f = Force
ReLinkTable t, FileName, f
End If
Next
wrk.CommitTrans
ReLinkTables_Exit:
SysCmd acSysCmdRemoveMeter
Exit Sub
ReLinkTables_Err:
Select Case Err.Number
Case Else
Select Case MsgBox(Err.Description, vbExclamation Or vbAbortRetryIgnore, "Error occured while linking tables...")
Case vbRetry
f = True
Resume
Case vbIgnore
Resume Next
Case Else 'vbAbort
wrk.Rollback
MsgBox "Operation was aborted!" + vbCrLf + _
"None of the tables has been changed.", vbInformation
Resume ReLinkTables_Exit
End Select
End Select
End Sub
Private Sub ReLinkTable(Table As DAO.TableDef, FileName As String, Force As Boolean)
If Force Or InStr(1, Table.Connect, FileName, vbTextCompare) = 0 Then
Table.Connect = ";DATABASE=" + FileName
Table.RefreshLink
End If
End Sub
Denna kod använder transaktioner, om t.ex. länkningen misslyckas för att en tabell saknas så kan man avbryta och tabellerna är då länkade till tidigare databas, eller så kan man ignorera den tabellen.
Koden kräver dock att du laggt till en referens till "Microsoft Office XX.Y Object Library" (t.ex Microsoft Office 12.0 Object Library för Office 2007).
Med vänliga hälsningar
Andreas Hillqvist
Sv: Använda tabellerna i backend-backupen.
Ska ta och testa den, men just nu sitter jag och jobbar med omsättningsdiagrammen.
Har du någon idé om hur man kan få till kvartalsdiagrammet i mitt förra inlägg?
De tidigare diagrammens datakälla skrev jag i VBA-kod, så jag har fått tänka om, nu när jag använder "Frågor" istället.
Tack än en gång!
Carina