En este grupo En todos

Foro de Excel



Modificar registros de access desde excel vba

gonzalo
Analisis de sistema duocuc- pontificia...
Escrito por Gonzalo Alarcon
el 10/06/2011

Hola amigos, busco modificar una fila x de una tabla access, tengo el siguiente cod. En donde busco segun lo ingresado en 1 textbox, luego cambio los datos del recset, hasta aqui todo bien... Pero como los modifico en la tabla, ya que esta sigue igual..

Gracias, Saludos


Private Sub Cmdmodifica_Click()

Dim datConnection As ADODB. Connection

Dim recSet As ADODB. Recordset

Dim strDB As String

StrDB = "R:\CARPETAS AREA\AASCS\LISTADOS DIVISION\BASE_BVQI\base. Mdb"

Set datConnection = New ADODB. Connection

Set recSet = New ADODB. Recordset

DatConnection. Open "Provider=Microsoft.Jet.OLEDB.4. 0;" & "Data Source =" & strDB & ";"


RecSet. Open "select * FROM BD where cl='" & TextBox7 & "'", datConnection, adOpenDynamic, adLockBatchOptimistic


If recSet. EOF = False Then

RecSet. Fields! Rut = TextBox2 'rut

RecSet. Fields! Clientes = TextBox3 'cliente

RecSet. Fields! Moneda = ComboBox9. Value 'moneda

RecSet. Fields! Pgq = TextBox5. Value 'pgq

RecSet. Fields! CTO = TextBox6. Value 'cto

RecSet. Fields! ID = TextBox1. Value 'id

RecSet. Fields! Iso = TextBox8. Value 'norma

RecSet. Fields! Fechaaudcert = TextBox9. Value 'fecha cer

RecSet. Fields! Valor = TextBox10. Value 'valor

RecSet. Fields! Md = TextBox11. Value 'md

RecSet. Fields! Visitas = TextBox12. Value 'visitas

RecSet. Fields! Responsable = TextBox33. Value 'responsable


RecSet. Update

MsgBox "Registros Modificados"

Else

MsgBox "Registros NO Modificados"

End If

'************************************

'Cerrar Coneccion con base de datos *

'************************************

RecSet. Close

Set recSet = Nothing

DatConnection. Close

Set datConnection = Nothing


End Sub

Cacho Rodríguez
Ing. electrónica u.n.r.
Escrito por Cacho Rodríguez
el 10/06/2011

Hola! Gonzalo.
La actualización viene dada por " RecSet. Update ".

Intenta verificar dos cosas:

a) Antes de
RecSet. Fields! Rut = TextBox2 'rut

incorpora un
MsgBox RecSet. RecordCount

para asegurarte que estás trabajando con UN registro específico.

b) Antes del "Update" verifica el contenido del campo "cl" (el campo por el que filtras):
MsgBox RecSet. Fields! Cl


Saludos, Cacho.

Gonzalo Alarcon
Analisis de sistema duocuc- pontificia...
Escrito por Gonzalo Alarcon
el 10/06/2011

Hola cacho,

El resultado del recordcount es -1

Y el campo de cl es ok, muestra el que busco..

Pero aun asi no graba en la base de datos


Saludos

Gonzalo Alarcon
Analisis de sistema duocuc- pontificia...
Escrito por Gonzalo Alarcon
el 10/06/2011

Copie el contenido del recset en una hoja y me copio bien los datos.


Saludos

Cacho Rodríguez
Ing. electrónica u.n.r.
Escrito por Cacho Rodríguez
el 10/06/2011

Pero Gonzalo: el "recordCount" no puede ser negativo. De hecho: debería ser "1"...

¿El campo "cl" es lo mismo que el campo "Clientes"?
¿Qué información contiene el TextBox7?

Gonzalo Alarcon
Analisis de sistema duocuc- pontificia...
Escrito por Gonzalo Alarcon
el 10/06/2011

El campo cl es un codigo interno que identifica al cliente
el campo cliente es el nombre.

Saludos

Cacho Rodríguez
Ing. electrónica u.n.r.
Escrito por Cacho Rodríguez
el 10/06/2011

¿"cl" es un campo numérico o de texto?

Si es numérico reemplaza
TextBox7

por:
CDbl(TextBox7)

Y en cualquier caso agrega:
RecSet. Fields! Cl = TextBox7 (ó Cdbl(TextBox7), si es el caso)

al resto de las asignaciones.

Insisto en que no es posible un "RecordCount" negativo... A lo sumo: Cero.

Saludos, Cacho.

Gonzalo Alarcon
Analisis de sistema duocuc- pontificia...
Escrito por Gonzalo Alarcon
el 11/06/2011

Ejemplo de cl : 23051/11

probe dejando un cl = 2, y nada, sigue siendo -1 el recodcount
tambien probe lo que me indicaste y nada.

saludos

Cacho Rodríguez
Ing. electrónica u.n.r.
Escrito por Cacho Rodríguez
el 11/06/2011

¿O sea que el TextBox7 contiene "23051/11"?

Te sugiero que vayas preparando -para subir al Foro- una muestra de la BD integrada por 2 a 4 registros.

Todavía no me estoy dando cuenta... Pero "algo" está "raro": ¡Quisiera verlo!
Saludos, Cacho.

Gonzalo Alarcon
Analisis de sistema duocuc- pontificia...
Escrito por Gonzalo Alarcon
el 11/06/2011

Ok Cacho

ya subi un archivo. Rar

saludos

Servando Villalon
Licenciado en sistemas universidad del...
Escrito por Servando Villalon
el 11/06/2011

Gonzalo:
La conexión a la base de datos solo la debes hacer una vez al activar o inicializar el userform… “Private Sub UserForm_Activate()”

Te pongo un ejemplo del botón “Modificar”

Private Sub CmdModify_Click()

recSet. Fields! Nombre = TextBox2

recSet. Fields! Depto= TextBox3

recSet. Fields! CodArea = TextBox4

recSet. Update

MsgBox "Registro actualizado"

recSet. MoveFirst

TextBox1 = recSet. Fields! Cve_Emp

TextBox2 = recSet. Fields! Nombre

TextBox3 = recSet. Fields! Depto

TextBox4 = recSet. Fields! CodArea

End Sub


Cacho Rodríguez
Ing. electrónica u.n.r.
Escrito por Cacho Rodríguez
el 11/06/2011

Hola! Gonzalo.

En lugar de
recSet. Open "SELECT * FROM BD where cl='" & TextBox7 & "'", datConnection, adOpenDynamic, adLockBatchOptimistic

intenta con:

recSet. Open "SELECT * FROM BD where cl='" & TextBox7 & "'", datConnection, adOpenDynamic, adLockOptimistic

(sustituyes el "adLockBatchOptimistic" por "adLockOptimistic")

Saludos, Cacho.

Gonzalo Alarcon
Analisis de sistema duocuc- pontificia...
Escrito por Gonzalo Alarcon
el 11/06/2011

Gracias Cacho, ahora si modifico.

saludos