{Access} Utilisation de requête Update sous vb

Resuelto
jph71390 -  
moiced59 Mensajes publicados 1161 Estado Miembro -
Hola,
Estoy en Access desde una semana y estoy con un pequeño proyecto y me estoy enfrentando a una dificultad desde hace 2 días. Tengo una tabla prêts (con tres campos: id-prêt, id-utilisateur, id-tiers, montant y date) y un formulario que me permite modificar estos distintos campos.

Entonces, al principio quería hacer una lista desplegable de búsqueda que muestre los distintos campos; el usuario elige uno de ellos, esta lista devuelve el id-prêt, ahí voy, ya lo tengo. A

Después de mi formulario tengo otros 4 campos que me permiten introducir los nuevos valores para id-utilisateur, id-tiers, montant y date y ahí quisiera que el usuario solo tenga que hacer clic en el botón modificar para que los campos se modifiquen automáticamente y ahí es donde me estoy dando vueltas.
aquí están mis diferentes intentos:
1)
Dim req As String
Dim rs As Recordset
Dim mabase As Database
Set mabase = CurrentDb()
' Ejecución de la consulta
req = "Update PRÊT Set PRÊT.IDENTIFIANT_TIERS = '" & txtNomTier & "', PRÊT.IDENTIFIANT_UTILISATEUR = '" & ValeurNumUtilisateur & "', PRÊT.MONTANT_PRÊT = '" & txtMontantAvoir & "', PRÊT.DATE_PRÊT = '" & txtDateAvoir & "' Where PRÊT.IDENTIFIANT_PRÊT = '" & txtNumAvoir & "'"
Set rs = mabase.OpenRecordset(req)

2)
Dim sdl As String
Dim rs As DAO.Recordset
sql = "Update PRÊT Set PRÊT.IDENTIFIANT_TIERS = '" & txtNomTier & "', PRÊT.IDENTIFIANT_UTILISATEUR = '" & ValeurNumUtilisateur & "', PRÊT.MONTANT_PRÊT = '" & txtMontantAvoir & "', PRÊT.DATE_PRÊT = '" & txtDateAvoir & "' Where PRÊT.IDENTIFIANT_PRÊT = '" & txtNumAvoir & "';"
Set rs = CurrentDb.OpenRecordset(sql)

3)
Set db = CurrentDb
Set req = db.OpenRecordset("PRÊT")
req.Edit
req("IDENTIFIANT_TIERS") = txtNomTier
req("IDENTIFIANT_UTILISATEUR") = ValeurNumUtilisateur
req("MONTANT_PRÊT") = txtMontantAvoir
req("DATE_PRÊT") = txtDateAvoir
req.Update
req.Close

Avec cette dernière méthode j’arrive à faire une mise à jour mais sur la première ligne de ma table je n’arrive pas à lui dire d’aller à l’id-prêt qui est retourné par la liste de recherche

Cordialement merci de votre aide
jph
Configuration: Windows XP Firefox 3.5.6

13 respuestas

fiu
 
Hola

No conozco Access, pero te puedo garantizar que tus consultas de actualización no te devuelven un recordset (por lo que hay pocas probabilidades de que OpenRecordset logre ejecutar una actualización).
debe existir una instrucción tipo ExecuteCommand para hacer que se ejecuten tus consultas de actualización.
0
jph71390
 
Hola,
ok gracias voy a buscarlo

++
0
moiced59 Mensajes publicados 1161 Estado Miembro 60
 
hola

puedes hacer:

docmd.runsql(sql)
o sql es igual a tu consulta
0
jph71390
 
Hola,
ok intentaré esto hacia el mediodía porque ahora mismo no estoy en mi PC y no tengo acceso a mi archivo, les mantendré informados y gracias de nuevo

++
0
jph71390
 
Hola, vengo a probar con esto y esto es lo que obtengo
Dim sdl As String
sql = "Update PRÊT Set PRÊT.IDENTIFIANT_TIERS = '" & txtNomTier & "', PRÊT.IDENTIFIANT_UTILISATEUR = '" & ValeurNumUtilisateur & "', PRÊT.MONTANT_PRÊT = '" & txtMontantAvoir & "', PRÊT.DATE_PRÊT = '" & txtDateAvoir & "' Where PRÊT.IDENTIFIANT_PRÊT = '" & txtNumAvoir & "';"
DoCmd.RunSQL (sql)

et il m a mit une erreur qui est :
type de de donnée incompatible dans l'expression du critère

Voilà désolé mais je ne comprends pas, quelqu'un peut m'aider s'il vous plaît merci

++
0
blux Mensajes publicados 5021 Fecha de registro   Estado Moderador Última intervención   3 455
 
Hola,

seguro que es un campo numérico que pusiste entre comillas, cuando esas se reservan para cadenas...

¿ValorNumUtilisateur?
¿txtMontantAvoir?

--

A+ Blux           
 "Los tontos, se atreven a todo. Es incluso así como se reconocen"
0
moiced59 Mensajes publicados 1161 Estado Miembro 60
 
ya tu dim no es bueno:
dim sql como cadena
sql = "Update PRÊT Set PRÊT.IDENTIFIANT_TIERS = [txtNomTier], PRÊT.IDENTIFIANT_UTILISATEUR =ValeurNumUtilisateur , PRÊT.MONTANT_PRÊT =txtMontantAvoir, PRÊT.DATE_PRÊT = txtDateAvoir Where PRÊT.IDENTIFIANT_PRÊT = txtNumAvoir"

intenta a ver

no entiendo por qué concatenas todo; ¿ejecutas tu consulta desde vb? supongo que la ejecutas desde un botón situado en el formulario, así que no hace falta concatenar; tal vez habrá que ponerlos entre [ ]
0
jph71390
 
Sí, lo siento; debí aclarar que todo lo que txt...... son campos presentes en mi formulario y ValeurNumUtilisateur es una variable global que contiene mi id de usuario, porque para acceder a este formulario hay que autenticarse y guardo el número en esa variable, blux.

Voy a probar esa sintaxis de inmediato, gracias moiced59
++
0
moiced59 Mensajes publicados 1161 Estado Miembro 60
 
ok, manténos al tanto
0
jph71390
 
Entonces es genial, gracias mucho, sql as string
sql = "Update PRÊT Set PRÊT.IDENTIFIANT_TIERS = [txtNomTier], PRÊT.IDENTIFIANT_UTILISATEUR =ValeurNumUtilisateur , PRÊT.MONTANT_PRÊT =txtMontantAvoir, PRÊT.DATE_PRÊT = txtDateAvoir Where PRÊT.IDENTIFIANT_PRÊT = txtNumAvoir"

por cierto, solo una pequeña cosa más, ¿podrías explicarme o darme la dirección de un tutorial que explique exactamente cómo funciona, por qué hay que poner corchetes o nada o comillas y en qué caso también ^^ y además, cómo quitar el mensaje de alerta que aparece: "Vous allez mettre à jour une ligne(s). dès que vous cliquerez sur oui, il vous sera impossible de ......"

de nuevo gracias
++
0
blux Mensajes publicados 5021 Fecha de registro   Estado Moderador Última intervención   3 455
 
Se ponen [] cuando se hace referencia a un nombre que tiene un espacio en su interior, para evitar que Access piense que es un separador...

[campo 1] y no campo 1

Se ponen entre comillas (la comilla simple, la tecla 4 del teclado) los datos que son de tipo cadena. Los numéricos no necesitan eso, y para las fechas, hay que poner # al principio y al final...

SELECT * FROM [table 1] WHERE champ1 = 'toto' AND [champ suivant] = 12 AND champ_date = #01/01/2010#;


--

A+ Blux           
 "Los imbéciles, eso se atreven a hacer de todo. Es incluso así como se reconocen"
0
moiced59 Mensajes publicados 1161 Estado Miembro 60
 
entonces de corchetes: referencia a un campo del formulario
nada : referencia a una variable
"" : concadena texto plano ejemplo select * from persona where nom = pierre !!! where nom = ""pierre""
eliminar mensaje de alerta :
al inicio del código vb:
docmd.setwarnings false
al final del código
docmd.setwarnings true

valordijo
0
jph71390
 
OK gracias por tu ayuda
te deseo que pases unas buenas fiestas de fin de año y una buena jornada y gracias de nuevo
++
0
moiced59 Mensajes publicados 1161 Estado Miembro 60
 
los ' ' no funcionan en SQL Access !!!
0
blux Mensajes publicados 5021 Fecha de registro   Estado Moderador Última intervención   3 455
 
desde qué versión?

--

A+ Blux           
 "Los estúpidos, eso se atreve a todo. Es incluso así como se los reconoce"
0
moiced59 Mensajes publicados 1161 Estado Miembro 60
 
G nothing said it works !!!!
i thought not sorry ;)
0