powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как исправлять базу mdb после сбоя?
15 сообщений из 15, страница 1 из 1
Как исправлять базу mdb после сбоя?
    #36609227
ak787
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишу базу на Visual Basic 6.0, использую mdb, провайдер MS Jet 4.0, база была открывта, бах... вырубили свет... комп перезагружаю, открываю свое программой... не коннектится к базе!
Захожу в Access пишет, что база испорчена и предлагает исправить... ну исправил, все ок, заработало.
Так вот вопрос... а как же быть если нет Access? Чем править базу программно (Visual Basic 6.0)?
...
Рейтинг: 0 / 0
Как исправлять базу mdb после сбоя?
    #36610442
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
compact|repaire
...
Рейтинг: 0 / 0
Как исправлять базу mdb после сбоя?
    #36611333
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот такую хрень у себя в старых программах откопал.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
'ФУНКЦИЯ СЖАТИЯ БД DAO-Методом с использованием FileSystemObject для манипулирования файлами '
'  gflngCompactDatabaseFSO(...)'
'ВХОДНЫЕ ПАРАМЕТРЫ ФУНКЦИИ:'
'  CompactingDBPathAndName - строковый параметр, задающий ПОЛНЫЙ ПУТЬ (путь + имя файла)'
'     к сжимаемой БД.'
'  BackupBeforeCompactDB - необязательный логический параметр, указывающий на'
'     необходимость сделать перед сжатием резервную копию сжимаемой БД (резервная'
'     копия выкладывается в файл с именем "ИмяСжимаемогоФайла_Backup"). При'
'     отсутствии параметра резервное копирование не производится.'

'ВОЗВРАЩАЕМОЕ ФУНКЦИЕЙ ЗНАЧЕНИЕ:'
'  = 0, если сжатие произведено;'
'  = Номеру возникшей ошибки, если выполнить сжатие не удалось.'

'ОСОБЕННОСТИ:'
'  Резервное копирование, выполнение которого определяется параметром "BackupBeforeCompactDB",'
'     производится в файл с именем "ПолныйПуть\ИмяСжимаемогоФайла_Backup"), при'
'     этом старая копия резерва перезаписывается новой (фактически удаляется).'
'  В случае, если сжимаемая БД открыта, то файл БД будет скопирован и соответствующая'
'     ошибка появится только в момент сжатия БД.'
Public Function gflngCompactDatabase( _
CompactingDBPathAndName As String, _
Optional BackupBeforeCompactDB As Boolean = False) As Long
Dim strTempFile As String
Dim strBackupFile As String
    On Error GoTo ErrHandler
    Form1.Text1.SelText = "Программа сжатия БД. Цель: ускорение работы!"
    Form1.Text1.SelText = vbCrLf & "Ну-с, начнем..."
    'Формируем имя для временного ("принимающего") файла'
    strTempFile = Left(CompactingDBPathAndName, (Len(CompactingDBPathAndName) -  4 )) & _
    "_Temp" & Right(CompactingDBPathAndName,  4 )
    'Формируем имя файла с резервной копией базы
    strBackupFile = Left(CompactingDBPathAndName, (Len(CompactingDBPathAndName) -  4 )) & _
    "_Backup" & Right(CompactingDBPathAndName,  4 )
    'Создаем (если надо) резервную копию файла БД перед сжатием'
    If BackupBeforeCompactDB = True Then
        Form1.Text1.SelText = vbCrLf & "Создаем резервную копию БД " & Chr( 34 ) & Command & Chr( 34 ) & " в файле " & Chr( 34 ) & strBackupFile & Chr( 34 ) & "..."
        FileCopy CompactingDBPathAndName, strBackupFile
        Form1.Text1.SelText = vbCrLf & "Резервное копирование завершено!"
    End If
    'Сжимаем файл БД (с перезаписью сжатого файла в новый файл)'
    Form1.Text1.SelText = vbCrLf & "Сжимаем исходную БД " & Chr( 34 ) & Command & Chr( 34 ) & " в файл " & Chr( 34 ) & strTempFile & Chr( 34 ) & "..."
    DBEngine.CompactDatabase CompactingDBPathAndName, strTempFile, dbLangCyrillic
    Form1.Text1.SelText = vbCrLf & "Сжатие БД завершено!"
    'Перезаписываем сжатый (временный файл) на место несжатого (старого файла)'
    Form1.Text1.SelText = vbCrLf & "Перезаписываем сжатый (временный файл) на место несжатого (старого файла)..."
    FileCopy strTempFile, CompactingDBPathAndName
    Form1.Text1.SelText = vbCrLf & "Копирование завершено!"
    'Удаляем временный файл'
    Form1.Text1.SelText = vbCrLf & "Удаляем временный файл..."
    Kill strTempFile
    Form1.Text1.SelText = vbCrLf & "Удаление завершено!"
    Form1.Text1.SelText = vbCrLf & "БД готова к дальнейшей эксплуатации!"
    Form1.Text1.Text = "Готово!!!"
    Form1.Text1.FontSize =  80 
    Exit Function
ErrHandler:
    'обрабатываем возможные ошибки'
    Form1.Text1.SelText = vbCrLf & "При сжатии произошла ошибка!"
    Form1.Text1.SelText = vbCrLf & "Ошибка " & Err.Number & ":" & Err.Description
    Form1.Text1.SelText = vbCrLf & "БД годна к эксплуатации, однако сжатие произведено не было!"
    gflngCompactDatabase = Err.Number
    Err.Clear: Exit Function
End Function

Только блин, не пойму, строчки в решетку (неважно VB или сам Access), это безнадежно потерянные строки или с потолка добавленные...
...
Рейтинг: 0 / 0
Как исправлять базу mdb после сбоя?
    #36611341
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

DBEngine-то где определен? В VB6 этого объекта нет.
...
Рейтинг: 0 / 0
Как исправлять базу mdb после сбоя?
    #36611350
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProДмитрий77,

DBEngine-то где определен? В VB6 этого объекта нет.

А, блин, если DAO подключить - появляется. Собственно - это и нужно было ТС сказать
...
Рейтинг: 0 / 0
Как исправлять базу mdb после сбоя?
    #36611369
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ох уж эти сказочники:




Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
Private Sub cmdCompact_Click()
Dim JRO As JRO.JetEngine
Dim sOld As String
Dim sNew As String
Dim sDir As String

On Error GoTo err_debug

    If Not mMain.IsMDBConnected Then
        Me.cmdMdb.SetFocus
        MsgBox "Укажите путь к базе *.mdb", vbExclamation
        Exit Sub
    End If

    sDir = modFiles.FileGetPath(mMain.MDBpath)
    If Dir(sDir & "\  & sDbName & 1.mdb") <> "" Then
        Kill sDir & "\  & sDbName & 1.mdb"
    End If
    sOld = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & mMain.MDBpath & ";Jet OLEDB:Database Password=;"
    sNew = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sDir & "\"  & sDbName & "1.mdb;Jet OLEDB:Engine Type=4;Jet OLEDB:Database Password=;"

    Set JRO = New JRO.JetEngine
    JRO.CompactDatabase sOld , sNew
    Set JRO = Nothing
     
    If Dir(sDir & "\_" & sDbName & ".mdb") <> "" Then
        Kill sDir & "\_" & sDbName & ".mdb"
    End If
    VBA.FileSystem.FileCopy mMain.MDBpath, sDir & "\_" & sDbName & ".mdb"
    VBA.FileSystem.Kill mMain.MDBpath 
    VBA.FileSystem.FileCopy sDir & "\" & sDbName & "1.mdb", mMain.MDBpath 
    VBA.FileSystem.Kill sDir & "\" & sDbName & "1.mdb"
    
    MsgBox "База успешно сжата.", vbInformation, "Сжатие базы *.mdb"
    
lb_out:
    Set JRO = Nothing
    Exit Sub
    
err_debug:
    MsgBox "ERROR" & vbCrLf & Err.Number & ": " & Err.Description, vbExclamation
    Resume lb_out
    
End Sub

надо подключить к проекут библиотеку: Microsoft Jet and Replication Objects 2.6 Library
...
Рейтинг: 0 / 0
Как исправлять базу mdb после сбоя?
    #36611399
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
..., ну дал кусок кода, рабочего, но целый кусок, даже не одно слово.
>DBEngine
в гогл поиск делается по этому слову и все восстанавливается и делается как охота
мне это давно не интересно
мне счас интересно как высоту header сделать как я хочу...
...
Рейтинг: 0 / 0
Как исправлять базу mdb после сбоя?
    #36611435
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но если интересно, то у меня стоит галка на
Microsoft DAO 3.6 Object Library

Программа писалась для внутр. целей, и на все компы где использовались подобные проги тупо устанавливался VB6+SP5(позже sp6), чтоб не рушить мозг на тему че там не хватает для счастья.

Об универсальности "продукта" я тогда не думал.
...
Рейтинг: 0 / 0
Как исправлять базу mdb после сбоя?
    #36611441
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Просто я думал, что DBEngine - это прерогатива Аксесса, потому в этом смысле ты меня просветил.
...
Рейтинг: 0 / 0
Как исправлять базу mdb после сбоя?
    #36611463
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
нет, у меня это до сих пор все эксплуатируется, сама БД на Win2003, Access я туда устанавливать ленюсь, а хожу если через Access с соседнего XP, а вся автоматика через VB на сервере.
Там один только тонкий момент был. Когда появился Office2000(им кстати и сейчас только пользуюсь), то надо было обязательно ставить SP5 к vb6:специально ездил на горбушку покупал, голову тогда поломал помню после Access-97.
...
Рейтинг: 0 / 0
Как исправлять базу mdb после сбоя?
    #36611806
ak787
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneох уж эти сказочники:




Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
Private Sub cmdCompact_Click()
Dim JRO As JRO.JetEngine
Dim sOld As String
Dim sNew As String
Dim sDir As String

On Error GoTo err_debug

    If Not mMain.IsMDBConnected Then
        Me.cmdMdb.SetFocus
        MsgBox "Укажите путь к базе *.mdb", vbExclamation
        Exit Sub
    End If

    sDir = modFiles.FileGetPath(mMain.MDBpath)
    If Dir(sDir & "\  & sDbName & 1.mdb") <> "" Then
        Kill sDir & "\  & sDbName & 1.mdb"
    End If
    sOld = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & mMain.MDBpath & ";Jet OLEDB:Database Password=;"
    sNew = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sDir & "\"  & sDbName & "1.mdb;Jet OLEDB:Engine Type=4;Jet OLEDB:Database Password=;"

    Set JRO = New JRO.JetEngine
    JRO.CompactDatabase sOld , sNew
    Set JRO = Nothing
     
    If Dir(sDir & "\_" & sDbName & ".mdb") <> "" Then
        Kill sDir & "\_" & sDbName & ".mdb"
    End If
    VBA.FileSystem.FileCopy mMain.MDBpath, sDir & "\_" & sDbName & ".mdb"
    VBA.FileSystem.Kill mMain.MDBpath 
    VBA.FileSystem.FileCopy sDir & "\" & sDbName & "1.mdb", mMain.MDBpath 
    VBA.FileSystem.Kill sDir & "\" & sDbName & "1.mdb"
    
    MsgBox "База успешно сжата.", vbInformation, "Сжатие базы *.mdb"
    
lb_out:
    Set JRO = Nothing
    Exit Sub
    
err_debug:
    MsgBox "ERROR" & vbCrLf & Err.Number & ": " & Err.Description, vbExclamation
    Resume lb_out
    
End Sub

надо подключить к проекут библиотеку: Microsoft Jet and Replication Objects 2.6 Library

Konst_One,

да, такую библиотеку знаю, пользуюсь командой рефрешь, но разве функция сжатия правит базу при сбое?
...
Рейтинг: 0 / 0
Как исправлять базу mdb после сбоя?
    #36611841
ak787
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общем, буду пользовать DAO 3.51 метод Repair (в DAO 3.6 почемуто нет метода Repair)

Set daoObj = CreateObject("DAO.DBEngine.35")
daoObj.RepairDatabase ("c:\db\db.mdb")

всем спасибо, вопрос закрыт!
...
Рейтинг: 0 / 0
Как исправлять базу mdb после сбоя?
    #36611852
ak787
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ak787,

ой, а 351 не поддерживает формат Access 2000, только 97, а база в 2000, а в DAO 3.6 метод Repair убрали.. вот гады
...
Рейтинг: 0 / 0
Как исправлять базу mdb после сбоя?
    #36611899
ak787
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общем в итоге получилась у меня вот такая функция,

Public Function MdbArcAndRepair(pathOld, pathNew) As Boolean
Dim dbe As DAO.DBEngine
On Error GoTo endErr
Set dbe = CreateObject("DAO.DBEngine.36")
If Dir(pathNew) <> "" Then Kill (pathNew)
dbe.CompactDatabase pathOld, pathNew
Kill (pathOld)
Name pathNew As pathOld
MdbArcAndRepair = True
Exit Function
endErr:
MdbArcAndRepair = False
End Function
...
Рейтинг: 0 / 0
Как исправлять базу mdb после сбоя?
    #36612334
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
compactdatabase сейчас и восстанавливает
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как исправлять базу mdb после сбоя?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]