Hola tengo una duda con actualización de datos

Mira tengo una tabla "Audiencias" en la que diariamente importo un numero N de registros desde una hoja de excel, resulta que tengo un campo llamado "Despacho" en la base de datos y en el libro de excel. En la base de datos existe una tabla con los despachos la cual me sirve para hacer un cuadro combinado en la tabla "Audiencias". En la base de datos los Despachos tienen un Código inicial incluido: "050013331001 - Despacho Uno". Pero en el archivo de Excel no tienen este código interno y solo dice "Despacho Uno" así que cuando importo los datos me toca cambiar manualmente "Despacho Uno" por "050013331001 - Despacho Uno" y así con todos los despachos dos, tres, cuatro etc (todos con diferente código)

Mi pregunta es la siguiente: ¿Existe alguna forma de crear un comando de actualización que reemplace de manera automática esta información dentro de la tabla después de realizada la importación?

Mil gracias

1 respuesta

Respuesta
1

Para el código que te voy a dar (que tendras que poner en un boton nuevo, o si tienes un boton "importar", se lo puedes añadir a ese) voy hacer dos suposiciones:

1º/ En tu tabla "Despachos", el campo se llama "Codigo", y siempre tiene esa estructura: código numerico - Despacho X

2º/ Los despachos son únicos, es decir, sólo hay un despacho uno, un despacho dos, y así...

El código:

Dim rst As DAO.Recordset

Dim vDespacho as String

'Creas el recordset sobre la tabla Audiencias

Set rst=CurrentDb.OpenRecordset("Audiencias",dbOpenDynaset)

'Si no hay registros, sale sin hacer nada

If rst.Recordcount=0 Then Goto Salida

'Inicias un bucle que recorra todos los registros

Do Until rst.EOF

'Si el campo Despacho empieza por un número, supones que está correcto

'Si NO empieza por un número, hay que actualizarlo

If Not IsNumeric(Left(rst("Despacho")),1) Then

'Buscas en la tabla "Despachos" el valor correcto

vDespacho=DLookUp("Codigo","Despachos","[Codigo] LIKE '" & rst("Despacho") & "'")

'Actualizas el valor de la tabla

rst.Edit

rst("Despacho")=vDespacho

rst.Update

End If

rst.MoveNext

Loop

'Lanzas mensaje de aviso, si quieres (si no, borra esta linea y la siguiente)

MsgBox "Actualización completada correctamente",vbInformation,"EXITO"

'Cierras conexiones y liberas memoria

Salida:

Rst. Close

Set rst=Nothing

Hola, me excuso decidí reemplazar el campo anteriormente descrito por otra opción, Te explico:

Tengo una tabla llamada (Despachos) en la cual hay dos campos:

Coddespacho (Texto, 12, Clave principal sin duplicados)

Despacho (Texto, 200, sin duplicados)

Y una tabla llamada (Audiencias) que contiene entre sus campos:

Coddespacho (Texto,12 con duplicados)

Despacho (Texto, 200, con duplicados)

Lo que quiero es que cuando yo digite el código en el campo CODDESPACHO, complete automáticamente el campo DESPACHO. o que cuando se importe o se seleccione la información el campo DESPACHO asigne automáticamente el código en el campo CODDESPACHO.

Mil gracias, saludos

Hasta el momento tengo el siguiente código en el evento después de actualizar del cuadrotxt perteneciente al CodDespacho del formulario Audiencias

Private Sub CodDespacho_AfterUpdate()
Dim db As Database
Dim rsDespachos As Recordset
Dim VCodDespacho As String
VCodDespacho = Me.CodDespacho.Value
Set db = CurrentDb
Set rsDespachos = db.OpenRecordset("Select * From Despachos")
rsJuzgados.FindFirst "[CodDespacho]='" & VCodDespacho & "'"
If rsDespachos.NoMatch Then
MsgBox "El Código del despacho que intenta ingresar no es válido"
Else
Me.Despacho.Value = rsDespachos!Despacho
End If
End Sub

pero no sé como hacer el resto. je je Mil gracias

El código lo puedes hacer mas senc:

Dim vDespacho as String

vDespacho=nz(dlookup("Despacho","Despachos","[Coddespacho]=" & Me.Coddespacho),"")

If vDespacho="" then

Msgbox "el código no es valido"

Else

Me.Despacho=vDespacho

End if

Ademas, en el evento Al activar registro del formulario, le pones el mismo.

Estos días estoy de viaje y sin pc, lo digo por si tardo en responder.

Hola, no me funciona saca un error "No Coinciden los tipos de datos. en la expresión de criterios" y me selecciona la siguiente linea:

vDespacho=nz(dlookup("Despacho","Despachos","[Coddespacho]=" & Me.Coddespacho),"")

Mil gracias. Espero tu ayuda.

Si, perdona, no me fije que coddespacho es de texto y no numérico.

Esto te funcionara:

vDespacho=nz(dlookup("Despacho","Despachos","[Coddespacho]='" & Me.Coddespacho & "'"),"")

Perfecto. Ahora si funciona. Ahora mi duda es como aplico esto a una importación de varios registros. estaba tratando de hacerlo con un Loop pero no hace nada. Me podrías indicar como?

Disculpa el abuso.

Saludos!

Tengo este código en un comando independiente al de importación, no saca error, pero tampoco actualiza los valores.

Dim rst As DAO.Recordset
Dim vCodDespacho As String
Set rst = CurrentDb.OpenRecordset("Agenda", dbOpenDynaset)
If rst.RecordCount = 0 Then GoTo Salida
Do Until rst.EOF
If rst("CodDespacho") = "" Then
vCodDespacho = DLookup("CodDespacho", "Despachos", "[Despacho]='" & rst("Despacho") & "'")
rst.Edit
rst("CodDespacho") = vCodDespacho
rst.Update
End If
rst.MoveNext
Loop
MsgBox "Actualización completada", vbInformation, "Actualización Exitosa"
Salida:
rst.Close
Set rst = Nothing

Bueno, me las arreglé para que funcionara anexé un Len a esta linea If rst("CodDespacho") = "" Then

Gracias, por tu ayuda. Luego le molestaré con algo más je je

Saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas