Base de donnée

Résolu
lap2 Messages postés 36 Date d'inscription mardi 3 août 2004 Statut Membre Dernière intervention 9 novembre 2007 - 26 nov. 2006 à 12:53
lap2 Messages postés 36 Date d'inscription mardi 3 août 2004 Statut Membre Dernière intervention 9 novembre 2007 - 30 nov. 2006 à 15:07
Salut à tous,

Je développe une application qui pilote une base Access.

Je reste bloqué sur l'erreur suivante :

        Erreur d'exécution '3464'

        Type de données incompatible dans l'expression du critère

sur les lignes :

Form load_load()

   With ctrlData1

       .recourdsource = "SELECT * FROM Prestataire ORDER BY Nom"

       .Refresh

   end With

   With ctrlData2
       .recourdsource "SELECT * FROM Habilitation WHERE PrestID " &    ctrlData1.Recordset!PrestID & " ORDER BY HabID"

       .Refresh   <= Plantage

   End With

End Sub

Les champs PrestID des deux tables sont de type texte.

Ca fait déjà quatre jours et je n'arrive à rien avec le debugage alors ... A votre bon coeur.

Salutations

Lap2

4 réponses

TMONOD Messages postés 256 Date d'inscription mardi 25 novembre 2003 Statut Membre Dernière intervention 6 novembre 2009 1
26 nov. 2006 à 13:12
Les expressions de type chaine de caractère doivent être passées encadrées par des guilllemets ou des simples quotes : (ici en rose, les simples quotes ou appostrophes manquantes)
.recourdsource "SELECT * FROM Habilitation WHERE PrestID '" &    ctrlData1.Recordset!PrestID & "' ORDER BY HabID"

Oubien :.recourdsource "SELECT * FROM Habilitation WHERE PrestID " & chr(34) &    ctrlData1.Recordset!PrestID & chr(34) & " ORDER BY HabID"

Jcbé[^]
3
TMONOD Messages postés 256 Date d'inscription mardi 25 novembre 2003 Statut Membre Dernière intervention 6 novembre 2009 1
27 nov. 2006 à 14:08
1/ RecordCount n'est renseigné que si tu as déplacé le curseur à la fin des enregistrements :



dim nombredenregistrements as integer,rst as recordset




'Sous Access

set rst=currentdatabase.openrecordset("select * from matable")

'Sous VB : .RecordSource=...




if not rst.eof then



rst.movelast



nombredenregistrements=rst.RecordCount



else



nombredenregistrements=0

end if
rst.close


2/La clause WHERE est suivie d'une expression qui doit renvoyer une valeur booléenne (TRUE ou FALSE)


...WHERE PrestID  sera toujours vraie (si PrestID est différente de 0) et ne veux rien dire
WHERE PrestID="458977" renvoie vrai si l'égalité est vérifiée.

Jcbé[^]
3
lap2 Messages postés 36 Date d'inscription mardi 3 août 2004 Statut Membre Dernière intervention 9 novembre 2007
27 nov. 2006 à 08:41
Merci à toi, je n'ai déjà plus cette erreur de syntaxe. Mais maintenant, le ctrlData2.RecordSet.RecordCount reste désespérément vide ! Malgré que la base contient des éléments qui répondent aux critères. Manque-t-il aussi des quotes pour encadrer l'expression :

With ctrlData2

       .recourdsource = "SELECT * FROM Habilitation WHERE PrestID ?

Peux-tu encore m'aider ?

Le message d'erreur est : "pas d'enregistrement" et le plantage se passe au niveau de .Move Last du ctrlData2.

@+

Lap2
0
lap2 Messages postés 36 Date d'inscription mardi 3 août 2004 Statut Membre Dernière intervention 9 novembre 2007
30 nov. 2006 à 15:07
Ok, j'ai compris. Merci, beaucoup.

Je me suis aussi aperçu que ".Refresh" ne peut pas être utilisé sur un recordsource issu d'un recordset avec ce type de DAO !

Que faire ?
0
Rejoignez-nous