| | |
Repair Access database
Please support our VB.NET advertiser: Intel Parallel Studio Home
![]() |
•
•
Join Date: Mar 2005
Posts: 65
Reputation:
Solved Threads: 0
Here is one that is stumping me.
I have an Access 2000 database backend. It got corrupted. It is a large database. I compacted and repaired it and a record came up corrupted. There was a compact error table created that has a binary column in it. The binary column points to a bookmark that tells which row was corrupted. I am trying use vb .net to retrieve that row using the binary column to show me which record is corrupted, however, I cannot get it to work right. I have found VBA for Access code that does something similar, but I need it in VB .net. Here is the VBA code that I have:
Any ideas?
Thanks, Chester
I have an Access 2000 database backend. It got corrupted. It is a large database. I compacted and repaired it and a record came up corrupted. There was a compact error table created that has a binary column in it. The binary column points to a bookmark that tells which row was corrupted. I am trying use vb .net to retrieve that row using the binary column to show me which record is corrupted, however, I cannot get it to work right. I have found VBA for Access code that does something similar, but I need it in VB .net. Here is the VBA code that I have:
VB.NET Syntax (Toggle Plain Text)
Sub main() On Error GoTo ErrorHandler Dim db As DAO.Database, vBookMark As Variant, _ rsMSysCompactError As DAO.Recordset, strErrorTable As String, _ rsErrorTable As DAO.Recordset, fldErrorField As DAO.Field, _ strSQLSEL As String, strColumnValue As Variant, _ qdTemp As QueryDef, strSQLINS As String, intLoop As Integer, _ lngTableNameLength As Long, _ colErrorCollection As New Collection, intErrorCount As Integer Set db = CurrentDb() ' Walk through the MSysCompactError table to find rows that reflect ' lost data values. Set rsMSysCompactError = db.OpenRecordset("SELECT * FROM MSysCompactError WHERE ErrorRecId IS NOT NULL", dbOpenDynaset) intErrorCount = 0 While Not rsMSysCompactError.EOF ' Get the name of the table that had column data missing. strErrorTable = rsMSysCompactError!ErrorTable ' Check to see that tablename is not greater than 48 characters ' to stay under 64 character tablename limit. lngTableNameLength = Len(strErrorTable) If lngTableNameLength > 48 Then strErrorTable = Mid(strErrorTable, 1, 48) ' See if this truncated table name already exists. On Error Resume Next colErrorCollection.Add strErrorTable, strErrorTable ' If this already exists in the collection, then there is a ' duplicate table name. If Err = 457 Then ' Truncate one more digit to append on the intErrorCount ' number to eliminate the duplicate table name. strErrorTable = Mid(strErrorTable, 1, 47) strErrorTable = strErrorTable & Mid((Str(intErrorCount)), 2, 1) intErrorCount = (intErrorCount + 1) End If End If ' Get the bookmark value of the row that had lost column data. vBookMark = rsMSysCompactError!ErrorRecId ' Open table that has lost column data. Set rsErrorTable = db.OpenRecordset(strErrorTable, dbOpenTable, dbReadOnly) ' Move to row that has lost column data. rsErrorTable.Bookmark = vBookMark ' Start to build SQL string to call up in a table window. strSQLSEL = "SELECT * INTO MSysCompactError" & strErrorTable & " FROM " & strErrorTable & " WHERE " strSQLINS = "INSERT INTO MSysCompactError" & strErrorTable & " SELECT * FROM " & strErrorTable & " WHERE " intLoop = 0 For Each fldErrorField In rsErrorTable.Fields strColumnValue = fldErrorField.Value ' Logic to build predicate based on various data types. If Not IsNull(strColumnValue) Then ' Can't use ordinal as no guarantee of first column ' being zero. ' Check to see if this is the first column or not to ' build SQL statement. If intLoop = 0 Then If fldErrorField.Type = dbDate Then strSQLSEL = strSQLSEL & "[" & fldErrorField.Name & "] = " & "#" & strColumnValue & "#" strSQLINS = strSQLINS & "[" & fldErrorField.Name & "] = " & "#" & strColumnValue & "#" Else If fldErrorField.Type = dbText Or fldErrorField.Type = dbChar Or fldErrorField.Type = dbMemo Then strSQLSEL = strSQLSEL & "[" & fldErrorField.Name & "] = " & "'" & strColumnValue & "'" strSQLINS = strSQLINS & "[" & fldErrorField.Name & "] = " & "'" & strColumnValue & "'" Else strSQLSEL = strSQLSEL & "[" & fldErrorField.Name & "] = " & strColumnValue strSQLINS = strSQLINS & "[" & fldErrorField.Name & "] = " & strColumnValue End If End If Else If fldErrorField.Type = dbDate Then strSQLSEL = strSQLSEL & " AND " & "[" & fldErrorField.Name & "] = " & "#" & strColumnValue & "#" strSQLINS = strSQLINS & " AND " & "[" & fldErrorField.Name & "] = " & "#" & strColumnValue & "#" Else If fldErrorField.Type = dbText Or fldErrorField.Type = dbChar Or fldErrorField.Type = dbMemo Then strSQLSEL = strSQLSEL & " AND " & "[" & fldErrorField.Name & "] = " & "'" & strColumnValue & "'" strSQLINS = strSQLINS & " AND " & "[" & fldErrorField.Name & "] = " & "'" & strColumnValue & "'" Else strSQLSEL = strSQLSEL & " AND " & "[" & fldErrorField.Name & "] = " & strColumnValue strSQLINS = strSQLINS & " AND " & "[" & fldErrorField.Name & "] = " & strColumnValue End If End If End If End If intLoop = (intLoop + 1) ' QJet limitation for maximum conditions is reached. If intLoop = 39 Then Exit For End If Next fldErrorField On Error Resume Next ' Create error table if it does not exist. db.Execute strSQLSEL, dbFailOnError If Err = 3010 Then On Error GoTo ErrorHandler ' Add rows to error table if it already exists. db.Execute strSQLINS, dbFailOnError End If rsErrorTable.Close rsMSysCompactError.MoveNext Wend rsMSysCompactError.Close MsgBox "Done!" Exit Sub ErrorHandler: MsgBox "An error has occurred " & Err & " " & Error Resume Next End Sub
Any ideas?
Thanks, Chester
•
•
Join Date: Aug 2006
Posts: 1
Reputation:
Solved Threads: 0
If you access database gets corrupted try easy ways to repair rather using long codes. You can use Kernel Access Repair Software as it repair corrupted access database
http://www.nucleustechnologies.com/A...r-Software.php
http://www.nucleustechnologies.com/A...r-Software.php
•
•
Join Date: Apr 2008
Posts: 9
Reputation:
Solved Threads: 0
Hi,
There is a tool called Advanced Access Repair. I have used it to repair many corrupt Access MDB files on my damaged disks successfully.
Hope this helps.
Alan
There is a tool called Advanced Access Repair. I have used it to repair many corrupt Access MDB files on my damaged disks successfully.
Hope this helps.
Alan
•
•
Join Date: Apr 2008
Posts: 9
Reputation:
Solved Threads: 0
In case of database corruption you can import your corrupted databse to a new blank database or you can repair it using compact and repair utility provided by MS office. This tool will repair your damaged database. In case its not able to repair database then you search for access repair utility.
Last edited by Narue; May 30th, 2008 at 11:59 am. Reason: Snipped advertising
![]() |
Similar Threads
- VB: Connect to Access database via ODBC datasource name (Visual Basic 4 / 5 / 6)
- Writing to an Access Database (Visual Basic 4 / 5 / 6)
- Create an Access Database using Java (Java)
- Writing to an Access Database using Java... (Java)
Other Threads in the VB.NET Forum
- Previous Thread: How to connect to oracle 11g
- Next Thread: Displaying Excel worksheet cell data in an inputbox
| Thread Tools | Search this Thread |
.net .net2008 2005 2008 access account arithmetic array basic bing button buttons center check code combobox component crystalreport data database datagrid datagridview date design dissertation dissertations dropdownlist excel fade file-dialog filter folder ftp generatetags google gridview hardcopy images input insert intel internet listview mobile monitor ms net networking objects output panel passingparameters peertopeervideostreaming picturebox picturebox1 port position print printing problem problemwithinstallation project read remove save searchbox searchvb.net select serial shutdown soap survey table tcp temperature text textbox timer timespan toolbox trim update updown user vb vb.net vb.netcode vb.netformclosing()eventpictureboxmessagebox vb2008 vbnet view visual visualbasic visualbasic.net visualstudio visualstudio2008 web winforms wpf year





