Vê se resolve com isso:
Public Function Tbl_Otimizar() As Boolean
On Error GoTo errHandler
Dim rsOptimize As New ADODB.Recordset
With rsOptimize
.Open "SHOW TABLE STATUS;", db
Do While Not (.BOF Or .EOF)
db.BeginTrans
db.Execute "OPTIMIZE TABLE " & .Fields.Item("Name").Value & ";", , 0
db.CommitTrans
.MoveNext
Loop
End With
rsOptimize.Close: Set rsOptimize = Nothing
Tbl_Otimizar = True
Exit Function
errHandler:
DescriptionOfErr = Err.Description
NumberOfErr = Err.Number
rsOptimize.Close: Set rsOptimize = Nothing
End Function
Public Function Tbl_Reparar(Optional MySQLOpcao As String = "EXTENDED") As Boolean
On Error GoTo errHandler
Dim rsRepair As New ADODB.Recordset
With rsRepair
.Open "SHOW TABLE STATUS;", db
Do While Not (.BOF Or .EOF)
db.BeginTrans
db.Execute "REPAIR TABLE " & .Fields.Item("Name").Value & " " & MySQLOpcao & ";", , 0
db.CommitTrans
.MoveNext
Loop
End With
rsRepair.Close: Set rsRepair = Nothing
Tbl_Reparar = True
Exit Function
errHandler:
DescriptionOfErr = Err.Description
NumberOfErr = Err.Number
rsRepair.Close: Set rsRepair = Nothing
End Function
As opções podem ser:
Quick - Repara apenas os índices.
Extended - Criar a fileira do índice pela fileira, em vez de criar um índice de cada vez com a classificação. Isto pode ser melhor do que classificando em chaves "fixed-length" se você tiver as chaves longas do char () que comprimem.
Use .FRM - Ideal para tabelas corrompidas. Nesta modalidade MySQL recreará a tabela, usando a informação dos arquivos ".frm".