2012-09-17 9 views
1

J'ai un formulaire de liste dans Microsoft Access 2007, et j'essaye de faire un bouton qui cherchera l'un des champs pour une phrase donnée. Le problème est que le champ que j'essaie de chercher est un champ de mémo, et je veux habituellement garder les enregistrements triés (par un champ de compte). Ceci tronque mon champ de mémo à 255 caractères et rend le reste du champ inaccessible. Ainsi, j'ai été en train de désactiver la propriété "OrderByOn" du formulaire que je recherche (ou en définissant "OrderBy" à "") lors de l'événement Form_Open du formulaire de recherche, qui semble correctement dégrouper mes données et rend le champ mémo entièrement visible. Toutefois, lorsque j'essaie de rechercher, j'obtiens parfois l'erreur "Microsoft Visual Basic Erreur d'exécution '1006': Inconnu" lorsqu'il arrive à la ligne FindNext. Je pense que j'obtiens l'erreur si le terme de recherche n'est pas trouvé dans les premiers 255 caractères des enregistrements entre l'enregistrement en cours et la fin du jeu d'enregistrements. Ceci est le code pour le formulaire de recherche:Erreur d'exécution '1006': Inconnu

Private Sub Form_Open(Cancel As Integer) 
     [Forms]![MyForm]![MySubform].[Form].OrderBy = "" 
     '[Forms]![MyForm]![MySubform].[Form].OrderByOn = False 
    End Sub 

    Private Sub Search_Click() 
     Dim vDescription As String 
     Dim r As Recordset 

     vDescription = "" 

     If Me![Description] <> "" Then vDescription = "[MyFieldName] LIKE('*' + '" & Me![Description] & "' + '*')" 

     If Not (vDescription = "") Then 
      Set r = [Forms]![MyForm]![MySubform].[Form].Recordset 
    >  r.FindNext (vDescription) 
      If r.NoMatch Then 
       r.MoveFirst 
       r.FindNext (vDescription) 
       If r.NoMatch Then 
        MsgBox ("No match found.") 
        r.MoveFirst 
       End If 
      End If 
     End If 
    End Sub 

Je ne trouve aucun résultat de recherche pour ce message d'erreur, qui semble étrange. Pourquoi ai-je une erreur? Est-ce que j'utilise le jeu d'enregistrements correctement? Dois-je traiter différemment OrderBy/OrderByOn?

+0

Quelque chose en particulier que je devrais rechercher dans vDescription? En ce moment c'est '[MyFieldName] LIKE ('*' + 'StuffITypedIn' + '*')'. Et oui, les parenthèses quand je n'en ai pas besoin est une mauvaise habitude. Je me suis débarrassé d'eux, même erreur. – serme

Répondre

1

Je ne comprends pas ce qui se passe avec votre code. Testez cette version pour voir si elle éclaire le problème.

Private Sub Search_Click() 
    Dim vDescription As String 
    Dim r As DAO.Recordset 

    vDescription = vbNullString ' not actually required ' 

    If Len(Me![Description] & vbNullString) > 0 Then 
     vDescription = "[MyFieldName] LIKE '*" & _ 
      Me![Description] & "*'" 
     Debug.Print "vDescription: " & vDescription 
     Set r = [Forms]![MyForm]![MySubform].[Form].RecordsetClone 
     r.FindNext vDescription 
     If r.NoMatch Then 
      r.MoveFirst 
      r.FindNext vDescription 
      If r.NoMatch Then 
       MsgBox "No match found." 
       r.MoveFirst 
      End If 
     End If 
     Set r = Nothing 
    End If 

End Sub

+0

L'erreur persiste et vDescription est maintenant '[MyFieldName] LIKE ('* StuffITypedIn *')', mais si j'utilise RecordsetClone au lieu de Recordset, il ne passe pas à l'enregistrement suivant lorsqu'il trouve une correspondance. – serme

+0

Je ne comprends pas comment vous avez obtenu ces parenthèses dans 'vDescription' en utilisant mon exemple de code. En attendant, avec 'RecordsetClone', je pense que vous devriez utiliser la propriété' .Bookmark' pour naviguer dans les enregistrements sous la forme: 'Me.Bookmark = rst.Bookmark' Mais c'est en quelque sorte à côté de ce que j'essayais ; Je voulais seulement voir si nous pouvions éviter l'erreur que vous avez signalée. – HansUp

+0

Mon mauvais, j'ai tapé cette ligne au lieu de copier/coller parce que mes noms de formulaire réel sont beaucoup plus longs. Ont corrigé, maintenant vDescription est '[MyFieldName] LIKE '* StuffITypedIn *''. Le message d'erreur arrive toujours. Merci pour votre aide; À ce stade, je considère faire une nouvelle requête à partir de la base de données, trouver mes termes de recherche dans ce jeu d'enregistrements, puis faire correspondre les champs ID pour passer à l'enregistrement correct sur mon formulaire. – serme