IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IHM Discussion :

openforseek pour table liée


Sujet :

IHM

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 264
    Points : 108
    Points
    108
    Par défaut openforseek pour table liée
    Bonjour je faiisais des recherches via SEEK classique.Tout allait bien maintenant je suis passé en mode table liée donc j ai essayé la méthode avec openforseek.
    Et là ca na marche pas. J ai un message d'ereur incompatibilité type et il me souligne la derniere ligne du module de la FAQ que voici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Public Function OpenForSeek(pCurDB As Database, ByVal pTableName As String) As Recordset
    
    '***********************************************************************
    '* Permet d'ouvrir une table attachée pour des recherches *
    '* avec la méthode Seek *
    '* (Suppose une table MS-ACCESS) *
    '***********************************************************************
    
    Dim pos As Long
    Dim ConnectString As String
    Dim AttachDBPath As String
    
    ConnectString = pCurDB.TableDefs(pTableName).Connect
    pos = InStr(ConnectString, "DATABASE=")
    If pos = 0 Then
        AttachDBPath = ConnectString
        Else
        AttachDBPath = Right$(ConnectString, Len(ConnectString) - pos - 8)
    End If
    
    Set OpenForSeek = DBEngine.Workspaces(0).OpenDatabase(AttachDBPath, False, False).OpenRecordset(pTableName, dbOpenTable)
    end function
    Par contre dans mon code du formulaire j'ai rien changé de particulier. Le voici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
    indic = UCase(Forms![nouveau CEV]![nom de la station])
                     an = Forms![nouveau CEV]![année du CEV]
                     style = Forms![nouveau CEV]![type de CEV]
                     Set db = Application.CurrentDb
                     Set rec = OpenForSeek(db, "LOC")
                    rec.Index = "PrimaryKey"
                    rec.Seek "=", indic, an, style
                    'si ce CEV existe déjà
                     If rec.NoMatch = False Then
                        'avertissement
                       MsgBox "Ce CEV existe déjà !", vbOKOnly, "Erreur"
                     rec.Close
     
    End Function
    Merci pour ceux qui voudrait bien ce penchait sur mon probleme.

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    La méthode Seek ne fonctionne pas (n'est pas disponible) avec des tables liées.

    Au lieu d'ouvrir le recordset avec dbOpenTable on l'ouvre avec dbOpenDynaset (lecture/écriture) ou dbOpenSnapshot (Lecture).
    Puis on utilise la méthode FindFirst du recordset.

    Vu l'usage que tu fais du recorset, je verrai un code de ce genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                     Set db = Application.CurrentDb
                     strSQL = "SELECT * FROM LOC" & _
                              " WHERE (NomChamp1=" & indic & ")" & _
                                " AND (NomChamp2=" & an & ")" & _
                                " AND (NomChamp3=" & Style & ")"
                     Set rec = db.OpenRecordset(strSQL)
    		 If Not rec.EOF Then
                        'avertissement
                        MsgBox "Ce CEV existe déjà !", vbOKOnly, "Erreur"
    		 End if
    Peut importe que la table soit liée ou pas.
    La syntaxe de mon exemple correspont à des champs numériques.
    Si NomChamp3 est de type texte par exemple, ajouter des guillemets simples
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                                " AND (NomChamp3='" & Style & "')"
    Si tu tiens absolument au Seek, c'est possible.
    Il faut d'abord ouvrir la base dorsale au lieu d'utiliser CurrentDB.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim strCheminBDDdorsale As String
    strCheminBDDdorsale = "C:\....\BaseDorsale.mdb"
    Set db = DBEngine.Workspaces(0).OpenDatabase("strCheminBDDdorsale ")
    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Enregistrement via inputbox pour table liées
    Par Alexbreizhst dans le forum VBA Access
    Réponses: 5
    Dernier message: 02/05/2013, 16h52
  2. Mot de passe pour tables liées
    Par Secco dans le forum Sécurité
    Réponses: 7
    Dernier message: 04/09/2009, 20h08
  3. Chemin relatif pour tables liées
    Par kiki_b dans le forum Access
    Réponses: 8
    Dernier message: 15/06/2006, 18h17
  4. Réponses: 3
    Dernier message: 21/02/2006, 11h44
  5. definir chemin pour table liée
    Par branqueira dans le forum Access
    Réponses: 4
    Dernier message: 22/10/2005, 13h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo