2009-10-13 11 views
1

J'essaie de migrer Access 2003 (fonctionnant correctement) vers Access 2007. Le code écrit dans VBA crée des problèmes. Comme j'ai une forme principale et 2 sous-formulaire. Dans la forme principale set de source d'enregistrements définie par une requête dynamique mais basée sur les données de formulaire principal lorsque j'essaie de définir le jeu d'enregistrements de sous-formulaire, l'accès à l'erreur 2007 se ferme &. Pourriez-vous s'il vous plaît aider quelqu'un pour savoir pourquoi cela se produit dans l'accès 2007.Problème de jeu d'enregistrements Access 2007

Public Sub LoadRecord(strRecId As String) 

On Error Resume Next 

Dim ctl As Access.Control 
Dim strsql As String 
Dim strID As String 
Dim rs As ADODB.Recordset 

    strsql = "SELECT * from vwContractsMainForm WHERE ID = '" & strRecId & "'" 

    Call OLEDBConnect 
    Set rs = New ADODB.Recordset 
    With rs 
     Set .ActiveConnection = cnn 
     .Source = strsql 
     .CacheSize = 1 
     .LockType = adLockOptimistic 
     .CursorType = adOpenKeyset 
     .CursorLocation = adUseServer 
     .Open 
    End With 

    'Set the first sub form's Recordset property to the ADO recordset 
    Set Me.Recordset = rs '-------- this part creates the problem. 
    Me.UniqueTable = "tbl_contracts" 
    Set rs = Nothing 
    Set cnn = Nothing 
+0

Il serait utile d'ajouter le message d'erreur précis à votre question. Quel est votre modèle d'objet par défaut? Sauf si Me.Recordset est aussi ADODB alors vous aurez un problème. – heferav

+1

Heferav. Notez qu'elle déclare les accidents d'accès. Il n'y a donc pas de message d'erreur. –

+0

Pourquoi attribuez-vous un jeu d'enregistrements ADO au formulaire au lieu de simplement définir la propriété Recordsource du formulaire? Il n'y a rien sur l'instruction SQL ou les options que vous définissez pour votre jeu d'enregistrements qui indiquent n'importe quel besoin pour un jeu d'enregistrements ADO. Savez-vous que cela peut être fait de façon beaucoup plus simple? –

Répondre

1

Je serai sacré. J'ai appris quelque chose de nouveau sur Access ce mois-ci. Je n'ai jamais réalisé que vous pouviez changer le jeu d'enregistrements d'une forme comme ça.

Je n'ai jamais utilisé un CV On Error Suivant, vous risquez de cacher un message d'erreur sur une ligne précédant la ligne qui plante.

Question stupide. StrRecId est-il un champ numérique ou une chaîne dans la requête? Les citations sont-elles valables?

strRecoID et cnn ne sont pas grisés dans votre code. Je vois que strID est estompé donc c'est probablement le champ que vous voulez utiliser. Veuillez ajouter Option Explicit en tant que première ou deuxième ligne de votre module. Ensuite, allez dans chaque module et ajoutez ces lignes. Ensuite, faites une compilation et voyez combien d'autres erreurs se produisent.

Allez également dans l'éditeur VBA, puis cliquez sur Outils >> Options >> et vérifiez que la case Require Variable Declaration est cochée.

Aussi à vous et tous les rôdeurs. Veuillez envoyer les informations d'erreur à Microsoft. Bien qu'ils n'aiment pas, bien sûr, obtenir des informations sur les accidents, ils traitent les accidents en très haute priorité en ce qui concerne les Service Packs.

+1

Tony, la possibilité d'affecter un jeu d'enregistrements ADO ou DAO à un formulaire a été introduite dans A2000, qui a été publié à la mi-1999. Je ne pense pas que ce soit aussi utile que les gens le pensent. Il me semble que beaucoup de réfugiés d'autres langues manquent les bases de l'accès et des formulaires liés et pensent que c'est la seule façon d'extraire des données dans un formulaire (par opposition à simplement assigner la source d'enregistrement du formulaire). Pour autant que je puisse voir, le seul avantage est si vous voulez vraiment un seul jeu d'enregistrements en mémoire et affiché dans un formulaire (ou sous deux formes différentes) - pas quelque chose qui se passe couramment. –

+0

Ok, merci. Tout cela a du sens. –

Questions connexes