OVH Cloud OVH Cloud

CurrentDb.Execute "UPDATE ne s"execute pas?

15 réponses
Avatar
Pascal
bonjour,
j'ai retourné cela dans tout les sens, je ne comprends pas pourquoi
je me permet de vous soumettre ce problème
merci de vos réflexions
Pascal
CurrentDb.Execute "UPDATE
ne s'execute plus
Dans l'ordre: ouverture formulaire form OPEN test if table exist si non
création
tout cela OK
le problème se pose a l'appel de function fchargementImprimantes
la table se remplis mais le champ ts_selection ne se coche pas??????

ensuite form LOAD le test échoue puisque aucune case cochée dans la table


'-------------------------------------------------------------------
Private Sub Form_Open(Cancel As Integer)
'si la table n'a pas étée initialisée, il faut la créer
'vérification de l'existence de la table d'imprimante
If Not ExistTable("tbPrtList") Then
'créer table
CréerTableDAO
'remplissage de la table imprimante
fChargementImprimantes
End If
End Sub


'-----------forcement nomPRt ne vaut jamais rien-------
'-----------et cocher case imprimante ne peut
fonctionner-------------------------------------
Private Sub Form_Load()
Dim NomRécupérer As String
Dim NomPrt As String
Dim rs As Recordset

On Error GoTo Sortie
'rechercher l'imprimante qui est mise par défaut dans la table tbPrtList
Set rs = CurrentDb().OpenRecordset("SELECT * FROM tbPrtList WHERE
ts_selection = true")

If Not rs.EOF And Not rs.BOF Then
NomRécupérer = rs.Fields("tx_PrtNom")
End If
'ajoute les guillemets puisque un String
NomPrt = """" & NomRécupérer & """"

'aficher dans le combo
Me.cboImprimante.DefaultValue = NomPrt
'met a jour la table tbPrtList
CocherCaseImprimante (NomPrt)

Sortie:

Set rs = Nothing
end sub


'-------currentdb n'est pas pris en compte--------------------
Function fChargementImprimantes()
' Fonction permettant de remplir une fois la table des imprimantes
' A lancer si nouvelle imprimante créée ou nouveau driver installé

Dim tampon As String
Dim i As Integer
Dim itNbPrt As Integer
Dim rs As Recordset
Static atagDevices() As aht_tagDeviceRec

On Error GoTo GestErr

Set rs = CurrentDb().OpenRecordset("tbPrtList", dbOpenDynaset)

' Suppression des enregistrements de la table
DoCmd.RunSQL "DELETE * FROM tbPrtList"

' Détermine le nombre d'imprimantes en cours sur le poste
itNbPrt = ahtGetPrinterList(atagDevices())

' Ajoute les imprimantes dans la table
For i = 1 To itNbPrt
rs.AddNew
rs![no_Prt].Value = i
rs![tx_prtNom].Value = atagDevices(i).drDeviceName
tampon = atagDevices(i).drDeviceName

rs![tx_Prtport].Value = atagDevices(i).drPort
rs![tx_prtdriver].Value = atagDevices(i).drDriverName

rs.Update

Next i

' coche la dernière imprimante selectionnée contenue dans Tampon pour
initialiser la table
CurrentDb.Execute "UPDATE tbPrtList SET ts_Selection = True " & "WHERE
tx_PrtNom = '" & tampon & "';"

FinLoad:
' Fermeture des objets
rs.Close
Set rs = Nothing

Exit Function
' Gestion des erreurs
GestErr:

MsgBox "Erreur dans fChargementImprimantes : " & Error & " (" & Err &
")"

Resume FinLoad

End Function

'---------------------------------------
Function CocherCaseImprimante(NomImprimante As String)
' cette fonction permet de cocher la case d'imprimante choisie
' NomImprimante est celui de l'imprimante repris dans le combo sur le
formulaire
'coche l'imprimante selectionnée
CurrentDb.Execute "UPDATE tbPrtList SET ts_Selection = True " & "WHERE
tx_PrtNom = '" & NomImprimante & "';"
'Décoche toutes les autres imprimantes
CurrentDb.Execute "UPDATE tbPrtList SET ts_Selection = false " & "WHERE
tx_PrtNom <> '" & NomImprimante & "';"
End Function

5 réponses

1 2
Avatar
Eric
Mets dans une bd au format Access2000 que le minimum : table, formulaire
et procédures et API.
Compactes ta bd, zippes la et postes sur cjoint.com. Je vais la tester.

hello Eric,
bien vu pour l'espace mais cela ne change toujours rien
merci à toi
Pascal



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Pascal
Hello Eric,
merci de la peine
la voici réduite à sa + simple expression
http://cjoint.com/?ddagQjNmTE
bien à toi
Pascal

"Eric" a écrit dans le message de news:

Mets dans une bd au format Access2000 que le minimum : table, formulaire
et procédures et API.
Compactes ta bd, zippes la et postes sur cjoint.com. Je vais la tester.

hello Eric,
bien vu pour l'espace mais cela ne change toujours rien
merci à toi
Pascal



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr



Avatar
Eric
Bonjour Pascal,

Il s'agissait d'un problème de quote(') et de double guillemets ("")
En affichant ton SQL, on obtenait par exemple :
"UPDATE tbPrtList SET ts_Selection = True WHERE tx_PrtNom = '"Acrobat
Distiller"';
et lors de l'exécution la mise à jour demandée ne se faisait pas car pas
de Printer ayant pour nom "Acrobat Distiller" entre guillemets. De plus
la ligne suivante CurrentDb.Execute désélectionnait toutes les
imprimantes pour ce motif.

Les modifications:
1-Dans la procédure : Function CocherCaseImprimante(NomImprimante As
String) remplacement de :
CurrentDb.Execute "UPDATE tbPrtList SET ts_Selection = True WHERE
tx_PrtNom = '" & NomImprimante & "';"
par
CurrentDb.Execute "UPDATE tbPrtList SET ts_Selection = True WHERE
tx_PrtNom = " & Chr(34) & NomImprimante & Chr(34) & ";"

Idem pour le CurrentDb.Execute de la ligne suivante.

2-Dans la procédure Private Sub Form_Load() du formulaire Menu Logex:
NomPrt = NomRécupérer au lieu de NomPrt = """" & NomRécupérer & """"
et
Me.cboImprimante.DefaultValue = Chr(34) & NomPrt & Chr(34) au lieu de
Me.cboImprimante.DefaultValue = NomPrt

Toujours dans cette procédure, pourquoi exécuter la procédure
CocherCaseImprimante (NomPrt) puisque la 1ère fois la dernière
imprimante lue est mise par défaut ou si l'initialisation a déjà été
faite, c'est cette dernière qui est activée car récupérée dans la table
tbPrtList? (Ligne mise en remarque dans la procédure)

J'ai testé sans la table tbPrtList, donc création --> Ok
puis ensuite en modifiant l'imprimante par défaut, là encore Ok.
A toi de faire d'autres tests ;-)

La base en retour: http://cjoint.com/?ddjni6LScR

PS : Penses à compacter ta bd (Menu Outils|Utilitaires de bd|Compacter).
Après cette opération, la taille de la bd est passée de 2 Mo a 300 Ko.

Hello Eric,
merci de la peine
la voici réduite à sa + simple expression
http://cjoint.com/?ddagQjNmTE
bien à toi
Pascal



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Pascal
Maitre Eric,

je te remercie, l'évidence ne m'avait pas sauté au yeux!
je n'avais jamais remarqué l'espace devant le nom, promis je change de
lunettes

Toujours dans cette procédure, pourquoi exécuter la procédure
CocherCaseImprimante (NomPrt)
oui, une ligne que j'avais oublié d'enlever, j'avais commencé à écrire

différement
c'est ce qui fait toute la différence entre un amateur comme moi et un
maître (ceci dit :sans flateries aucunes)

j'ai beaucoup apprécié ton aide et t'en suis reconnaissant
Tout fonctionne très bien maintenant
Bien à toi
Pascal




"Eric" a écrit dans le message de news:

Bonjour Pascal,

Il s'agissait d'un problème de quote(') et de double guillemets ("")
En affichant ton SQL, on obtenait par exemple :
"UPDATE tbPrtList SET ts_Selection = True WHERE tx_PrtNom = '"Acrobat
Distiller"';
et lors de l'exécution la mise à jour demandée ne se faisait pas car pas
de Printer ayant pour nom "Acrobat Distiller" entre guillemets. De plus la
ligne suivante CurrentDb.Execute désélectionnait toutes les imprimantes
pour ce motif.

Les modifications:
1-Dans la procédure : Function CocherCaseImprimante(NomImprimante As
String) remplacement de :
CurrentDb.Execute "UPDATE tbPrtList SET ts_Selection = True WHERE
tx_PrtNom = '" & NomImprimante & "';"
par
CurrentDb.Execute "UPDATE tbPrtList SET ts_Selection = True WHERE
tx_PrtNom = " & Chr(34) & NomImprimante & Chr(34) & ";"

Idem pour le CurrentDb.Execute de la ligne suivante.

2-Dans la procédure Private Sub Form_Load() du formulaire Menu Logex:
NomPrt = NomRécupérer au lieu de NomPrt = """" & NomRécupérer & """"
et
Me.cboImprimante.DefaultValue = Chr(34) & NomPrt & Chr(34) au lieu de
Me.cboImprimante.DefaultValue = NomPrt

Toujours dans cette procédure, pourquoi exécuter la procédure
CocherCaseImprimante (NomPrt) puisque la 1ère fois la dernière imprimante
lue est mise par défaut ou si l'initialisation a déjà été faite, c'est
cette dernière qui est activée car récupérée dans la table tbPrtList?
(Ligne mise en remarque dans la procédure)

J'ai testé sans la table tbPrtList, donc création --> Ok
puis ensuite en modifiant l'imprimante par défaut, là encore Ok.
A toi de faire d'autres tests ;-)

La base en retour: http://cjoint.com/?ddjni6LScR

PS : Penses à compacter ta bd (Menu Outils|Utilitaires de bd|Compacter).
Après cette opération, la taille de la bd est passée de 2 Mo a 300 Ko.

Hello Eric,
merci de la peine
la voici réduite à sa + simple expression
http://cjoint.com/?ddagQjNmTE
bien à toi
Pascal



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr



Avatar
Eric
re,

...
c'est ce qui fait toute la différence entre un amateur comme moi et un
maître ...

Tout fonctionne très bien maintenant



Oh, je ne suis qu'un amateur au même titre que toi.
En fait, il est très fréquent que lors d'erreurs,
on ne les retrouve pas car trop imprégné du code.
Content que ca roule pour toi. Bonne continuation.
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

1 2