Pb recordset

Signaler
Messages postés
17
Date d'inscription
lundi 24 mai 2004
Statut
Membre
Dernière intervention
28 décembre 2004
-
Messages postés
17
Date d'inscription
lundi 24 mai 2004
Statut
Membre
Dernière intervention
28 décembre 2004
-
bonjour,
je veux faire un recordset en VB Access mais la syntaxe n'est pas correcte, il me semble qu'il y ait un pb au niveau des valeur booléenne :

    Dim db As Database
    Dim rssql As DAO.Recordset
    Dim sql As String
    sql = ""
    Set db = DBEngine(0)(0)
    sql "SELECT * FROM TableDevis, TableFacturation WHERE TableDevis.N°deDevis TableFacturation.N°deDevis AND TableFacturation.Date>= " & Me.Texte0 & " AND TableFacturation.Date<= " & Me.Texte2 & "" ' AND TableFacturation.export='false'"
    
    Set rssql = db.OpenRecordset(sql)
                     
    While Not rssql.EOF
       Dim updte As String        updte "UPDATE TableFacturation SET export 'true' WHERE N°Facturation = " & rssql("N°Facturation")
        DoCmd.RunSQL updte
    rssql.MoveNext
    Wend


d'avance merci...
vanyou

3 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Salut vanyou
Règles de base du SQL :
- Toujours mettre un espace en les noms de champs et le reste. Exemple : TableFacturation.Date <= ...
- Quand tu utilises des noms de champ ou de table comportant des espaces (et peut-être des caractères spéciaux comme °), encadre-les avec des crochets []. Exemple : TableDevis.[N°deDevis]
- Quand tu as un champ de type Booléen, il faut le comparer à des False ou True, mais en tant que donnée : pas de '. Exemple : TableFacturation.export = False

Cas en fonction des types de champs (*) :
- Texte : Encadrer le texte avec des '. Exemple : MonChamp = 'Coucou'
- Numérique : Là, pas de '. Exemple : MonChamp = 4012
- Date : Il faut considérer les dates somme des textes, donc avec des ', mais en plus, il est préférable d'ajouter des #. Exemple : TableFacturation.Date <= '#" & Me.Texte2 & "#' "
(*) Il s'agit des types de champ tels que déclarés dans la DB.

En plus, je pense que tu as mis un " de trop après Texte2 + un espace de trop avant le ' : la syntaxe de la chaine de caractères en VB doit le refuser, déjà.

Fais ces corrections et voit si ça change qqchose.
Comme on est gentils sur Codes-Sources, voilà le code modifié :
sql "SELECT * FROM TableDevis, TableFacturation WHERE TableDevis.[N°deDevis] TableFacturation.[N°deDevis] AND TableFacturation.Date >= '#" & Me.Texte0 & "#' AND TableFacturation.Date <= '#" & Me.Texte2 & "#' AND TableFacturation.export = False"


Nota 1 : Bizarre le "Set db = DBEngine(0)(0)" ! je ne connais pas cette syntaxe.
Nota 2 : Dans la ligne "updte = ...", la syntaxe devrait-être rssql.Fields("N°Facturation")
Nota 3 : Evite de mettre des Dim à l'intérieur d'une boucle, ça ralentit

Vala
Jack
Messages postés
17
Date d'inscription
lundi 24 mai 2004
Statut
Membre
Dernière intervention
28 décembre 2004

merci énormémént pour toutes ces infos je vais tester...
à tout à l'heure...

vanyou
Messages postés
17
Date d'inscription
lundi 24 mai 2004
Statut
Membre
Dernière intervention
28 décembre 2004

Hello !

Lorsque je retourne la requête, j'ai :

SELECT * FROM TableFacturation WHERE TablaFacturation.Date >= '#10/05/2004#' AND TablaFacturation.Date >= '#15/05/2004#' AND TableFacturation.export = False


Et le message d'erreur est :

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


Voici le code :

    Dim updte As String
    Dim db As Database
    Dim rssql As DAO.Recordset
    Dim sql As String
    sql = ""
    Set db = DBEngine(0)(0)

    sql = "SELECT * FROM TableFacturation WHERE TableFacturation.Date >= '#" & Me.Texte0 & "#' AND TableFacturation.Date <= '#" & Me.Texte2 & "#' AND TableFacturation.export = False"
    MsgBox (sql)
    
    Set rssql = db.OpenRecordset(sql)
        
    Set EnrFich = CreateObject("Scripting.FileSystemObject")  'Création objet
    On Error Resume Next
    Set FicLog = EnrFich.CreateTextFile(App.Path & "\MonFichier.txt", False)
    Set FicLog = EnrFich.GetFile(App.Path & "\MonFichier.txt") 'Chargement du fichier
    Set FicLogBis = FicLog.OpenAsTextStream(8, -2) 'Ouverture du fichier
        
    While Not rssql.EOF
    
        FicLogBis.WriteLine (rssql("N°Facturation") & ";" & rssql("HT"))    'Ecriture dans le fichier
                   updte "UPDATE TableFacturation SET export True WHERE N°Facturation = " & rssql.Fields("N°Facturation")
        MsgBox (updte)
        DoCmd.RunSQL updte
    rssql.MoveNext
    Wend
    
    FicLogBis.Close 'Fermeture
    Set FicLogBis = Nothing
    FicLog.Close 'Fermeture du fichier
    Set FicLog = Nothing


vanyou