DAO 3.60: Definição de propriedades de marcador move-se a linha incorrecto

Traduções de Artigos Traduções de Artigos
Artigo: 238134 - Ver produtos para os quais este artigo se aplica.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Em 3.60 DAO utilizando o marcador propriedade de um conjunto de registos para navegar para um registo específico coloca registo errado. Isto é provavelmente superfície quando guardar um marcador e mover para um registo diferente e, em seguida, voltando ao registo marcado definindo a propriedade de marcador do conjunto de registos. Também pode ocorrer quando utilizar a propriedade LastModified após uma actualização. Este problema é mais provável de acontecer se a tabela tiver um grande número de registos ou se a tabela tem menos registos mas um grande número de colunas.

Isto não ocorre quando utilizar o DAO 3.51.

Resolução

Agora é disponibilizada pela Microsoft uma correcção suportada, mas destina-se apenas a corrigir o problema descrito neste artigo. Aplique-a apenas em computadores que tenham este problema específico. Esta correcção poderá ser submetida a testes adicionais. Por conseguinte, se não estiver a ser gravemente afectado por este problema, a Microsoft recomenda que aguarde pelo próximo service pack do Microsoft Office que contenha esta correcção.

Para resolver este problema imediatamente, contacte o suporte técnico da Microsoft para obter a correcção. Para obter uma lista completa de números de telefone do suporte técnico da Microsoft e informações sobre os custos de suporte, visite o seguinte Web site da Microsoft:
http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMS
Nota : em casos especiais, os custos normalmente inerentes às chamadas de suporte poderão ser anulados se um técnico de suporte da Microsoft determinar que uma actualização específica resolverá o problema. Os custos de suporte normais se aplicarão perguntas de suporte adicionais e problemas que não se enquadrem na atualização específica em questão.

A versão inglesa desta correcção deverá ter os seguintes atributos de ficheiro ou posteriores:
   Date      Time    Version      Size    File name     Platform
   -------------------------------------------------------------
   7/14/99           3.60.2927.4  545KB   dao360.dll


				

Como contornar

Não existe nenhuma solução para este problema.

Ponto Da Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no início deste artigo.

Mais Informação




Instalação manual

  1. Fechar ou parar quaisquer aplicações ou serviços que estão a utilizar o DAO.
  2. Transferir a versão de correcção de dao360.dll num directório temporário.
  3. Localize e mude o nome a versão actual do dao360.dll deve estar na pasta \Program Files\Common Files\Microsoft Shared\DAO .
  4. copie a versão de correcção do dao360.dll na mesma localização e reiniciar os serviços e aplicações.

Passos para reproduzir

  1. criar um projecto de Visual Basic (EXE padrão) e adicionar uma referência à Microsoft DAO 3.60 Object Library.
  2. No formulário de arranque (Form1), criar uma etiqueta denominada lblStatus e Adicionar um botão de comando .
  3. C opiar o seguinte código para Click() método o botão de comando, em seguida, executar o formulário:

    Dim dbTest As DAO.Database
    Dim rsTest As DAO.Recordset
    Dim strPathToMDB As String
    Dim strSQL As String
    Dim lngNumRecords As Long
    Dim lngOriginalValue As Long
    Dim lngCounter As Long
    Dim varBookmark As Variant
    Dim bUseTableType As Boolean
    
    Me.Show
    Me.MousePointer = vbHourglass
    Me.Enabled = False
    strPathToMDB = App.Path & "\BadBookmarks.MDB"
    If MsgBox("Make new database?", vbYesNo) = vbYes Then
        If Dir(strPathToMDB) <> "" Then Kill strPathToMDB
        If DBEngine.Version = "3.6" Then
            If MsgBox("Create Jet 4.0 format database?", vbYesNo) = vbYes Then
                Set dbTest = DBEngine.CreateDatabase(strPathToMDB, dbLangGeneral, dbVersion40)
            Else
                Set dbTest = DBEngine.CreateDatabase(strPathToMDB, dbLangGeneral, dbVersion30)
            End If
        Else
            Set dbTest = DBEngine.CreateDatabase(strPathToMDB, dbLangGeneral, dbVersion30)
        End If
    Else
        Set dbTest = DBEngine.OpenDatabase(strPathToMDB)
    End If
    
    If MsgBox("Make new table?", vbYesNo) = vbYes Then
        On Error Resume Next
        strSQL = "DROP TABLE BadBookmarks"
        dbTest.Execute strSQL
        On Error GoTo 0
        strSQL = "CREATE TABLE BadBookmarks (ID long NOT NULL"
        For lngCounter = 2 To 8
            strSQL = strSQL & ", Field" & lngCounter & " char(255)"
        Next lngCounter
        strSQL = strSQL & ", CONSTRAINT PK_BadBookmarks PRIMARY KEY (ID))"
        dbTest.Execute strSQL
    Else
        dbTest.Execute "DELETE * FROM BadBookmarks"
    End If
    
    bUseTableType = (MsgBox("Use table-type recordset?", vbYesNo))
         
    If bUseTableType Then
        Set rsTest = dbTest.OpenRecordset("BadBookmarks", dbOpenTable)
    Else
        Set rsTest = dbTest.OpenRecordset("SELECT * FROM BadBookmarks")
    End If
    
    lngNumRecords = InputBox("Number of records to insert?", "Bad bookmarks", 1000)
    Debug.Print "Testing DAO " & DBEngine.Version
    Debug.Print "Inserting " & lngNumRecords & " records"
    Debug.Print "Into a version " & dbTest.Version & " database"
    Debug.Print "Using a " & IIf(bUseTableType, "table-type", "dynaset") & " recordset"
    With rsTest
        For lngCounter = 1 To lngNumRecords
            .AddNew
            .Fields(0) = lngCounter
            .Fields(1) = lngCounter
            .Fields(2) = lngCounter
            .Fields(3) = lngCounter
            .Fields(4) = lngCounter
            .Fields(5) = lngCounter
            .Fields(6) = lngCounter
            .Fields(7) = lngCounter
            .Update
            If lngCounter Mod 100 = 0 Then
                lblStatus.Caption = CInt((lngCounter / lngNumRecords) * 100) & _
                                    "% complete inserting records..."
                lblStatus.Refresh
            End If
        Next lngCounter
        .Close
    End With
    
    If bUseTableType Then
        Set rsTest = dbTest.OpenRecordset("BadBookmarks", dbOpenTable)
    Else
        Set rsTest = dbTest.OpenRecordset("SELECT * FROM BadBookmarks")
    End If
    
    With rsTest
        Do While Not .EOF
            lngOriginalValue = .Fields(0)
            varBookmark = .Bookmark
            .MoveNext
            .Bookmark = varBookmark
            If .Fields(0) <> lngOriginalValue Then
                Debug.Print "Should be on row " & lngOriginalValue
                Debug.Print vbTab & "Actually on row " & .Fields(0)
            End If
            If lngOriginalValue Mod 100 = 0 Then
                lblStatus.Caption = CInt((lngOriginalValue / lngNumRecords) * 100) & _
                                    "% complete checking records..."
                lblStatus.Refresh
            End If
            .MoveNext
        Loop
        .Close
    End With
    Set rsTest = Nothing
    dbTest.Close
    Set dbTest = Nothing
    Set DBEngine = Nothing
    lblStatus.Caption = "Done!"
    Me.MousePointer = vbArrow
    Me.Enabled = True

				

Propriedades

Artigo: 238134 - Última revisão: 1 de fevereiro de 2014 - Revisão: 3.5
A informação contida neste artigo aplica-se a:
  • Microsoft Office 2000 Developer Edition
  • Microsoft Visual Studio 6.0 Service Pack 3
  • Microsoft Access 2000 Standard Edition
Palavras-chave: 
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbbug kbdao360fix kbfix kbqfe KB238134 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 238134

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com