Ms access - actualizar registro

Tengo un problema al actualizar los datos de un registro, me da un error '3075' al parecer de error de sintaxis.
Lo he repasado varias veces y aunque no tengo mucha experiencia, me parece que está bien.
¿Le podrías dar un ojeada al código y decirme que es lo que hago mal?.
Private Sub ActualizarMaquinas()
   ' Este procedimiento genera la modificación de los datos de un registro
   ' Que ya existe en la tabla "Máquinas"
   Dim sqlM As String
   sqlM = "UPDATE Maquinas " & _
           "SET " & _
           "Maquinas.MaqCliente = Me.txtCodigoCliente " & _
           "Maquinas.MaqCentro = Me.numCentroCliente " & _
           "Maquinas.MaqGrupo = Me.numGrupoCliente " & _
           "Maquinas.MaqFisica = Me.cboMaquinaFisica " & _
           "Maquinas.MaqLogica = Me.cboMaquinaLogica " & _
           "Maquinas.MaqFechaAlta = Me.datFechaAlta " & _
           "Maquinas.MaqFechaBaja = Me.datFechaBaja " & _
           "Maquinas.MaqComentarios = Me.txtMaquinaComentarios " & _
           "WHERE Maquinas.MaqNumero = Me.txtNumeroMaquina"
   DoCmd.RunSQL (sqlM)
   strMensaje = strMensaje & "1.- Modificado los datos del registro" & vbCrLf
End Sub
Más información:
Se trata de un formulario que todos los controles son "independientes", ya que lo único que hace es recoger diferentes datos y posteriormente, actualizar uno o dos registros de una tabla (depende de una condición de un control) y añadir nuevos registros a otras dos tablas más (también dependiendo de una condición en un control).
El error que te indico anteriormente ya se produce en la actualización de un registro (que es la primera tabla a actualizar, ya que es la única que siempre se debe actualizar, el resto de tablas v en función de una condición como ya he indicado antes.
1

1 respuesta

Respuesta
1
Y perdón por la demora,
Tienes que "sacar" las referencias al formulario actual de dentro del string y poner las comas. También debes controlar el tipo de dato. Los textos entre apostrofes y las fechas entre almohadillas y en formato americano.
sqlM = "UPDATE Maquinas " & _
           "SET " & _
           "Maquinas.MaqCliente = " & Me.txtCodigoCliente ", " & _
           "Maquinas.MaqCentro = " & Me.numCentroCliente & ", " & _
           "Maquinas.MaqGrupo = " & Me.numGrupoCliente & ", " & _
           "Maquinas.MaqFisica = " & Me.cboMaquinaFisica & ", " & _
           "Maquinas.MaqLogica = " & Me.cboMaquinaLogica & ", " & _
           "Maquinas.MaqFechaAlta = #" & Me.datFechaAlta & ", " & _
           "Maquinas.MaqFechaBaja = #" & Format(Me.datFechaBaja, "mm/dd/yyyy") & "#, " & _
           "Maquinas.MaqComentarios = '" & Me.txtMaquinaComentarios & "', " & _
           "WHERE Maquinas.MaqNumero = " & Me.txtNumeroMaquina"
Veras que las fechas ya las he indicado como tales y que, de todos los campos, el único que lo he delimitado como texto es el de comentarios. Modifica los que creas oportunos.
Hola, buenos días,
Tengo un problema al actualizar los datos de un registro, me da un error '3075' al parecer de error de sintaxis.
Lo he repasado varias veces y aunque no tengo mucha experiencia, me parece que está bien.
¿Le podrías dar un ojeada al código y decirme que es lo que hago mal?.
Private Sub ActualizarMaquinas()
   ' Este procedimiento genera la modificación de los datos de un registro
   ' Que ya existe en la tabla "Máquinas"
   Dim sqlM As String
   sqlM = "UPDATE Maquinas " & _
           "SET " & _
           "Maquinas.MaqCliente = Me.txtCodigoCliente " & _
           "Maquinas.MaqCentro = Me.numCentroCliente " & _
           "Maquinas.MaqGrupo = Me.numGrupoCliente " & _
           "Maquinas.MaqFisica = Me.cboMaquinaFisica " & _
           "Maquinas.MaqLogica = Me.cboMaquinaLogica " & _
           "Maquinas.MaqFechaAlta = Me.datFechaAlta " & _
           "Maquinas.MaqFechaBaja = Me.datFechaBaja " & _
           "Maquinas.MaqComentarios = Me.txtMaquinaComentarios " & _
           "WHERE Maquinas.MaqNumero = Me.txtNumeroMaquina"
   DoCmd.RunSQL (sqlM)
   strMensaje = strMensaje & "1.- Modificado los datos del registro" & vbCrLf
End Sub
Más información:
Se trata de un formulario que todos los controles son "independientes", ya que lo único que hace es recoger diferentes datos y posteriormente, actualizar uno o dos registros de una tabla (depende de una condición de un control) y añadir nuevos registros a otras dos tablas más (también dependiendo de una condición en un control).
El error que te indico anteriormente ya se produce en la actualización de un registro (que es la primera tabla a actualizar, ya que es la única que siempre se debe actualizar, el resto de tablas v en función de una condición como ya he indicado antes.
Quedo a la espera de tu respuesta.
Gracias de antemano.
Hola Xavi,
Lo he probado con las modificaciones que me indicas (creo que lo he hecho bien), pero ahora me está dando un error:
Se ha producido el error '3144' en tiempo de ejecución:
Error de sintaxis en la instrucción UPDATE 
el código modificado es el siguiente:
sqlM = "UPDATE Maquinas " & _
"SET " & _
"Maquinas.MaqCliente = '" & txtCodigoCliente & "', " & _
"Maquinas.MaqCentro = " & numCentroCliente & ", " & _
"Maquinas.MaqGrupo = " & numGrupoCliente & ", " & _
"Maquinas.MaqFisica = '" & cboMaquinaFisica & "', " & _
"Maquinas.MaqLogica = '" & cboMaquinaLogica & "', " & _
"Maquinas.MaqFechaAlta = #" & Format(datFechaAlta, "mm/dd/yyyy") & "#, " & _
"Maquinas.MaqFechaBaja = #" & Format(datFechaBaja, "mm/dd/yyyy") & "#, " & _
"Maquinas.MaqComentarios = '" & txtMaquinaComentarios & "', " & _
"WHERE Maquinas.MaqNumero = '" & txtNumeroMaquina & "' "
DoCmd.RunSQL sqlM
¿Me puedes mirar donde puede estar el error?
Si con la instrucción UPDATE ya es bastante complejo (para mi) no quiero pensar que será con la instrucción INSERT INTO, ya que tengo 2 aactualizaciones de registro y 2 nuevos registros.
No sé que sería mejor, si utilizar instrucciones SQL o hacerlo a través de recordsets, aunque si no estoy muy puesto con SQL menos lo estoy con los recordsets, ¿cómo lo ves tú?
Gracias de antemano por tu colaboración.
Saludos
Pues con recordsets no es tan complicado...
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("SELECT * FROM Maquinas WHERE MaqNumero = '" & Me!txtNumeroMaquina & "'")
rst.Edit
rst!MaqCliente = Me!txtCodigoCliente
rst!MaqCentro = Me!numCentroCliente
etc, etc, etc
rst.Update
rst.Close
Set rst = Nothing
El uso de recordsets tiene la ventaja de que no debes controlar el tipo de dato.
Si lo que quieres es añadir un registro, utiliza rst. AddNew en lugar de rst. Edit
Hola Xavi,
Tienes toda la razón, con el recordset es más fácil y me ha funcionado perfectamente. El tema de las comillas dobles y simples en instrucciones SQL, son bastante complejas, si no las dominas claro.
Muchas gracias por tu ayuda, seguro que volveré a preguntarte algo más.
Saludos
Juanjo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas