Pb recordset

vanyou Messages postés 17 Date d'inscription lundi 24 mai 2004 Statut Membre Dernière intervention 28 décembre 2004 - 1 juin 2004 à 16:21
vanyou Messages postés 17 Date d'inscription lundi 24 mai 2004 Statut Membre Dernière intervention 28 décembre 2004 - 2 juin 2004 à 09:30
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

cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
1 juin 2004 à 18:49
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
0
vanyou Messages postés 17 Date d'inscription lundi 24 mai 2004 Statut Membre Dernière intervention 28 décembre 2004
2 juin 2004 à 09:17
merci énormémént pour toutes ces infos je vais tester...
à tout à l'heure...

vanyou
0
vanyou Messages postés 17 Date d'inscription lundi 24 mai 2004 Statut Membre Dernière intervention 28 décembre 2004
2 juin 2004 à 09:30
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
0