J'y pige quedal ! addnew, update, 3022, etc... :( [Résolu]

Signaler
Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
-
Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
-
lut!

je voudrais ajouter un nouvel enregistrement dans ma table qui prenne la valeur de ma textbox. Pour ceci je fais :

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim Request As String
Set db = CurrentDb
Request = "select devis FROM FACTURE"
Set rs = db.OpenRecordset(Request)
rs.AddNew
rs.Fields("Devis") = Date
rs.Update


date étant ma textbox.

Il me fait une erreur 3022 (5 lignes en allemand, j'y comprend rien :-O)
et le déboagage me renvoie a cette ligne :
rs.Update

Quel est le pb avec clé primaire ? ou qqch dans le genre (c'est la seule chose que j'ai compris de l'erreur)

Ma table contient :
ID : clé primaire,
devis : text

merci

13 réponses

Messages postés
69
Date d'inscription
vendredi 27 février 2004
Statut
Membre
Dernière intervention
26 novembre 2005

Si order est bien un nombre dans la table, essaie
Request "select * FROM FACTURE where order " & cint(order)
Set rs = db.OpenRecordset(Request)

si le nombre n'est pas un entier mais un réel utilise cdbl

Mais je pense que Request "select * FROM FACTURE where order " & cint(order)Set rs = db.OpenRecordset(Request)
marche tout aussi bien

si order est un champ texte dans la table essaieRequest "select * FROM FACTURE where order '" & cint(order) & "'"
Set rs = db.OpenRecordset(Request)

kenavo!
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

Messages postés
69
Date d'inscription
vendredi 27 février 2004
Statut
Membre
Dernière intervention
26 novembre 2005

Excuse moi, j'ai oublié les crochets !
Request "select * FROM FACTURE where [order] " & cint(order)
Set rs = db.OpenRecordset(Request)

Kenavo !
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

Messages postés
69
Date d'inscription
vendredi 27 février 2004
Statut
Membre
Dernière intervention
26 novembre 2005

Salut,

ton code comporte un petite erreur:

tu as écrit:

rs.AddNew
rs.Fields("Devis") = Date
rs.Update

en fait tu dois écrire:

rs.AddNew
rs("Devis") = Date
rs.Update

(je suppose que ta table contient effectivement un champ "devis")

bye !
Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
6
merci de ta réponse mguilhem, mais en fait c t juste que j'essayais de rentrer plusieurs fois une même valeur dans un champ défini "sans doublon" -> d'ou l'erreur dès le 2 eme passage.

ps: ca marche tres bien avec rs.field("devis")

par contre pour ce pb de "sans doublon", je veux d'abord tester ma table. Il ne faut pas que mon n° de facture soit déjà présent, je fais ca, mais ca marche pas :
Request "select * FROM FACTURE  where order order ;"
Set rs  = db.OpenRecordset(Request)
rs.MoveLast
If rs.RecordCount <> 0 Then
    'ce n° d'order existe déjà
    Order = ""
    MsgBox "Erreur, ce n° d'order existe déjà", vbCritical
    rs.Close
    db.Close
    Exit Sub
End If


je sais d'ou ca couille, mais je sais pas comment le résoudre.
ma table contient un champ "order" qui est "sans doublon". Je dois rechercher dans ma table '* from FACTURE" n'importe quel champ ayant le n° d'order rentré dans la textbox (qui s'appelle order)

erreur obtenue : erreur 3145, syntaxe de la clause WHERE

ps: ca marche bien si je ne met pas de where il me trouve un recordcount > 0, mais je veux une condition where forcément !
Messages postés
69
Date d'inscription
vendredi 27 février 2004
Statut
Membre
Dernière intervention
26 novembre 2005

L'erreur vient bien de la requête:
Request "select * FROM FACTURE where order order;"

en fait faudrait écrire:
Request "select * FROM FACTURE where order " & order

(si order est un text ce sera order ' " & order & " ' )

Bye !
Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
6
yes order est un text dans ma table, et une textbox dans ma form.

pourrais tu m'écrire la requete complete stp , car j'ai du mal entre les ' et les " :)
Request "select * FROM FACTURE where Order ' " & Order & " '"
c ca ? je pense pas ca met tjrs erreur "where"
Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
6
oups non je t dit une bétise, order est une textbox sur ma form, mais c'est un nombre dans ma table...
Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
6
je pense que:
Request "select * FROM FACTURE where order " & cint(order)

est la bonne requete , ca donne bien :Request "select * FROM FACTURE where order 1 "
si ma textbox contient "1"

Mais ca me met toujours erreur de syntaxe dans la clause Where !

est-ce que ca peut venir de l'autre order, celui a gauche de = ?
J'ai lu des exmples d'utilisation de where, et il est bien marqué :
"select * from noms where prenom = 'pierre' "

bah dans mon cas ca marche po :(

est-ce qu'il recherche bien dans le champ "order" de la table FACTURE ?

j'ai essayé :_Request "SELECT order FROM FACTURE WHERE Order " & CInt(Order)_Request "SELECT Order FROM FACTURE WHERE Order " & CInt(Order) ,Order avec O majuscule exactement comme dans la table_Request "SELECT * FROM FACTURE WHERE Order " & CInt(Order)

marche pô
Messages postés
437
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
10 août 2010
1
Normalement la requête devrait marcher avec les crochets.

Néanmoins j'aurais un conseil à te donner, quand tu définis des noms de table, de champs ou autre, EVITES D'UTILISER DES MOTS-CLEFS DU LANGAGE.
Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
6
Yes ca marche correctement avec les crochets ^^

le code qui marches est donc (en entier) :

Private Sub BoutonOK_Click()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim Request As String
Set db = CurrentDb
Request "SELECT * FROM FACTURE WHERE [Order] " & CInt(Order)
Set rs = db.OpenRecordset(Request)

'ce n° d'order existe déjà
If rs.RecordCount <> 0 Then
    Order = ""
    MsgBox "Erreur, ce n° d'order existe déjà", vbCritical
    rs.Close
    db.Close
    Exit Sub
End If
rs.Close

Request = "select * FROM FACTURE"
Set rs = db.OpenRecordset(Request)
'ajoute une nouvelle facture  vierge:
rs.AddNew
'remplit les champs des textbox:
rs("Devis") = Devis
rs.Fields("order") = Order
rs.Fields("DateEcheance") = DateEcheance
rs.Fields("encharge") = Employe
rs.Fields("client") = Client
rs.Fields("description") = Description
rs.Fields("livre") = Livre
rs.Fields("factureredigee") = FactureRedigee
rs.Fields("factureverifiee") = FactureVerifiee
rs.Fields("factureenvoyee") = FactureEnvoyee
rs.Fields("Reclamations") = Reclamations
rs.Fields("paye1") = Paye1
rs.Fields("rappel") = Rappel
rs.Fields("paye2") = Paye2

rs.Update
rs.Close
db.Close

End Sub


Voila, maintenant qu'entend tu par mot clé ? je sais qu'il est préférable d'utiliser des mots différents du langage, mais la qu'est-ce que j'ai utiliser de mal ?
request ?
order ?

bisous béco et encore merci !
Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
6
par contre, je sais pas pourquoi tu m'a dis d'utiliser cint, car si je rentre un nombre trop grand il y a dépassement, je préfère utiliser int tout court apparemment ca marche aussi bien sauf que ca va plus loin ^^
Messages postés
69
Date d'inscription
vendredi 27 février 2004
Statut
Membre
Dernière intervention
26 novembre 2005

Salut 8-) !

le message "mot clé" n'était pas de moi, mais je pense qu'il te conseille d'utiliser des noms différents des mots propres au langage VBA. En effet, order est une propriété de vba (regarde dans l'index de l'aide tu verras).

J'aimerais rajouter qu'il serait préférable de donner un nom différent au contrôle de destination. Appeler order le textbox alors que le champ source s'appelle order peut porter à confusion. Certes le code tourne sans problème, mais le programmeur peut ne plus comprendre le code par la suite.
Par exemple appelle ton textbox, textbox_order, c'est plus clair.

Pour ce qui est de cint et int, ce ne sont pas les mêmes fonctions:
cint convertit au format integer(par exemple la chaîne "132" devient le nombre 123)
tandis que int arrondit à l'entier le plus proche.

Mais je pense que cint ou int ne sont pas indispensables dans ton code, on peut s'en passer(à tester) je crois.

Bye,
Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
6
en effet, je viens de tester sans cint, ni int :
Request "SELECT * FROM FACTURE WHERE [Order] " & Order

ca marche sans problème.
J'avais pô vu que le message était de phillipe. Je vais essayer de renommer mes contrôles et variables comme il faut ^^