DADOS SUMINDO DO BANCO
Amigo, vc manda corrigir e reparar o seu banco de dados na inicialização?
Se sim pode ser isso pois o corrigir e reparar compacta o arquivo em uma pasta temporária e depois copia-o novamente para a pasta do seu sistema.
Verifique isso.
T+
Se sim pode ser isso pois o corrigir e reparar compacta o arquivo em uma pasta temporária e depois copia-o novamente para a pasta do seu sistema.
Verifique isso.
T+
Fala MARCIOHR, nao eu nao reparo o banco ao iniciar o sistema. Ainda nao fiz isso.
Isso pode prejudicar o funcionamento? Se sim nem vou fazer
Att,
Isso pode prejudicar o funcionamento? Se sim nem vou fazer
Att,
Ao contrário, não prejudica e sim ajusta e compacta o banco, porém como disse deve-se ter um certo cuidado, pois ao fazer isso o compactador cria uma cópia do banco corrigido em alguma pasta que vc especificar depois o mesmo sobreescreve o banco original, neste meio tempo pode ser que se perca dados, mas também isso ocorre se estiver usando em rede o que não seria seu caso.
Mas faça sim e até fica melhor e mais rápido, quando utilizava Access armazenava em um arquivo texto (.ini) a data da ultima reparação, se essa fosse diferente da data atual mandava compactar e corrigir o banco, se fosse igual não mandava fazer.
Mas faça sim e até fica melhor e mais rápido, quando utilizava Access armazenava em um arquivo texto (.ini) a data da ultima reparação, se essa fosse diferente da data atual mandava compactar e corrigir o banco, se fosse igual não mandava fazer.
E seria até interessante vc fazer isso, pra ver se resolve: segue o código da classe pra vc tentar:
Public Function CompactAndRepairDB(sSource As String, _
sDestination As String, _
Optional sSecurity As String, _
Optional sUser As String = [Ô]Admin[Ô], _
Optional sPassword As String, _
Optional lDestinationVersion As Long) As Boolean
On Error GoTo Trata_erros
Dim sCompactPart1 As String
Dim sCompactPart2 As String
Dim oJet As JRO.JetEngine
sCompactPart1 = [Ô]Provider=Microsoft.Jet.OLEDB.4.0[Ô] & _
[Ô];Data Source=[Ô] & sSource & _
[Ô];User Id=[Ô] & sUser & _
[Ô];Password=[Ô] & sPassword
If sSecurity <> [Ô][Ô] Then
sCompactPart1 = sCompactPart1 & _
[Ô];Jet OLEDB:System database=[Ô] & sSecurity & [Ô];[Ô]
End If
sCompactPart2 = [Ô]Provider=Microsoft.Jet.OLEDB.4.0[Ô] & _
[Ô];Data Source=[Ô] & sDestination
If lDestinationVersion <> 0 Then
sCompactPart2 = sCompactPart2 & _
[Ô];Jet OLEDB:Engine Type=[Ô] & lDestinationVersion
End If
Set oJet = New JRO.JetEngine
oJet.CompactDatabase sCompactPart1, sCompactPart2
Set oJet = Nothing
CompactAndRepairDB = True
Trata_erros:
If Err.Number = -2147467259 Then
Exit Function
End If
End Function
é necessário vc adicionar uma referencia a Microsoft Jet and Replication Objects 2.6 Library
E para dar certo o banco não pode estar aberto, por seu sistema ou nenhum outro ponto da rede se houver.
Eu chamo essa função assim:
Public Sub Corrige_BD()
On Error GoTo Trata_erros
If FileExist(App.path & [Ô]\Temp\BluePDV_Old.Mdb[Ô]) = True Then
Kill (App.path & [Ô]\Temp\*.mdb[Ô])
End If
[ô]Compactar e Corrigir Banco de Dados
If CompactAndRepairDB(App.path & [Ô]\BluePDV.mdb[Ô], App.path & [Ô] emp\BluePDV_Old.mdb[Ô]) = True Then [ô]Se deu certo
Kill (App.path & [Ô]\BluePDV.mdb[Ô])
Call FileCopy(App.path & [Ô] emp\BluePDV_old.Mdb[Ô], App.path & [Ô]\BluePDV.Mdb[Ô]) [ô]Copia o arquivo compactado e sobreescreve o arquivo original
End If
Trata_erros:
If Err.Number <> 0 Then
MsgBox [Ô]Corrige_BD [Ô] & Err.Source & [Ô] [Ô] & Err.Description, vbCritical, App.Title
Exit sub
End If
End Sub
Public Function CompactAndRepairDB(sSource As String, _
sDestination As String, _
Optional sSecurity As String, _
Optional sUser As String = [Ô]Admin[Ô], _
Optional sPassword As String, _
Optional lDestinationVersion As Long) As Boolean
On Error GoTo Trata_erros
Dim sCompactPart1 As String
Dim sCompactPart2 As String
Dim oJet As JRO.JetEngine
sCompactPart1 = [Ô]Provider=Microsoft.Jet.OLEDB.4.0[Ô] & _
[Ô];Data Source=[Ô] & sSource & _
[Ô];User Id=[Ô] & sUser & _
[Ô];Password=[Ô] & sPassword
If sSecurity <> [Ô][Ô] Then
sCompactPart1 = sCompactPart1 & _
[Ô];Jet OLEDB:System database=[Ô] & sSecurity & [Ô];[Ô]
End If
sCompactPart2 = [Ô]Provider=Microsoft.Jet.OLEDB.4.0[Ô] & _
[Ô];Data Source=[Ô] & sDestination
If lDestinationVersion <> 0 Then
sCompactPart2 = sCompactPart2 & _
[Ô];Jet OLEDB:Engine Type=[Ô] & lDestinationVersion
End If
Set oJet = New JRO.JetEngine
oJet.CompactDatabase sCompactPart1, sCompactPart2
Set oJet = Nothing
CompactAndRepairDB = True
Trata_erros:
If Err.Number = -2147467259 Then
Exit Function
End If
End Function
é necessário vc adicionar uma referencia a Microsoft Jet and Replication Objects 2.6 Library
E para dar certo o banco não pode estar aberto, por seu sistema ou nenhum outro ponto da rede se houver.
Eu chamo essa função assim:
Public Sub Corrige_BD()
On Error GoTo Trata_erros
If FileExist(App.path & [Ô]\Temp\BluePDV_Old.Mdb[Ô]) = True Then
Kill (App.path & [Ô]\Temp\*.mdb[Ô])
End If
[ô]Compactar e Corrigir Banco de Dados
If CompactAndRepairDB(App.path & [Ô]\BluePDV.mdb[Ô], App.path & [Ô] emp\BluePDV_Old.mdb[Ô]) = True Then [ô]Se deu certo
Kill (App.path & [Ô]\BluePDV.mdb[Ô])
Call FileCopy(App.path & [Ô] emp\BluePDV_old.Mdb[Ô], App.path & [Ô]\BluePDV.Mdb[Ô]) [ô]Copia o arquivo compactado e sobreescreve o arquivo original
End If
Trata_erros:
If Err.Number <> 0 Then
MsgBox [Ô]Corrige_BD [Ô] & Err.Source & [Ô] [Ô] & Err.Description, vbCritical, App.Title
Exit sub
End If
End Sub
Desculpa CompactAndRepairDB não é uma classe e sim uma função para colocar em um módulo.
Att
Att
Fala sai Sacofrito.
Meu ja tive um problema bem parecido com o seu. No meu caso eu estava usando um recordset duas vezes em locais diferentes no mesmo programa. Eu usava o recordset para pesquisar o cliente (para carregar um grid) *** , entao o ponteiro do registro ficava apontado para o registro selecionado. Depois eu dava acidentalmente um [Ô]update[Ô] no mesmo recordset que o ponteiro ja direcionado para outro cliente. ***Era ai que q estava o erro.*** Depois q criei dois recordsets diferentes entao acabou o problema. Acho q e[ô] por ai... (isso me deu mauita dor de cabeca). Boa sorte e Espero ter ajudado...
Nonato
Aprendiz de VB 6
Meu ja tive um problema bem parecido com o seu. No meu caso eu estava usando um recordset duas vezes em locais diferentes no mesmo programa. Eu usava o recordset para pesquisar o cliente (para carregar um grid) *** , entao o ponteiro do registro ficava apontado para o registro selecionado. Depois eu dava acidentalmente um [Ô]update[Ô] no mesmo recordset que o ponteiro ja direcionado para outro cliente. ***Era ai que q estava o erro.*** Depois q criei dois recordsets diferentes entao acabou o problema. Acho q e[ô] por ai... (isso me deu mauita dor de cabeca). Boa sorte e Espero ter ajudado...
Nonato
Aprendiz de VB 6
Fala RNONATO, nao eh esse o problema. Eu tomo essa precauçao para nao ter esse problema. Sempre que vou operar o utra coisa, abro outro recordset e apos a operaçao fecho e libero o objeto.
Tópico encerrado , respostas não são mais permitidas