Guardar datos en un formulario independiente

29/10/2012 - 10:22 por Toni | Informe spam
Buenos dias,

Tengo un formulario independiente con un menu desplegable que lee el ID de los registros de una tabla. Mi intención es que, en un evento AfterUpdate, el formulario se cargue con todos los datos del registro escogido en el menu desplegable.

Como debo hacerlo? Muchas gracias!
Toni

Preguntas similare

Leer las respuestas

#1 José Mª Fueyo
29/10/2012 - 10:56 | Informe spam
Hola
Puedes generar un script sql con los datos de los controles

<pego>
On Error GoTo mierror
Dim sSQL As String
sSQL = "INSERT INTO tblPruebas(Nombre, Apellidos) " & _
"VALUES ('" & Me.txtNombre.Value & "','" & Me.txtApellidos.Value & "');"
'Desactivo las advertencias momentaneamente
DoCmd.SetWarnings False
DoCmd.RunSQL sSQL
DoCmd.SetWarnings True
'Limpio los cuadros de texto
Me.txtNombre.Value = ""
Me.txtApellidos.Value = ""
Call MsgBox("Registro insertado correctamente", vbInformation, "Inserción terminada")
Exit Sub
mierror:
Dim sError As String
sError = "Se ha producido un error al insertar el registro:" & _
" Número: " & Err.Number & _
" Descripción: " & Err.Description
Call MsgBox(sError, vbCritical, "Error al insertar el registro")
</pego>

Salu2,
José Mª Fueyo
[MS MVP Access]
Respuesta Responder a este mensaje
#2 Toni
29/10/2012 - 12:41 | Informe spam
Veo que propones una instruccion Sql INSERT INTO, con esto consigo insertar un registro en la tabla, peró no és lo que busco.

Mi intención es que los cuadros de texto del formulario independiente se carguen con los valores de todos los campos del registro escogido en el desplegable, para luego poder trabajar con ellos.

No se si me he explicado, o a lo mejor no te entendí...


On Monday, October 29, 2012 10:56:02 AM UTC+1, José Mª Fueyo wrote:
Hola

Puedes generar un script sql con los datos de los controles



<pego>

On Error GoTo mierror

Dim sSQL As String

sSQL = "INSERT INTO tblPruebas(Nombre, Apellidos) " & _

"VALUES ('" & Me.txtNombre.Value & "','" & Me.txtApellidos.Value & "');"

'Desactivo las advertencias momentaneamente

DoCmd.SetWarnings False

DoCmd.RunSQL sSQL

DoCmd.SetWarnings True

'Limpio los cuadros de texto

Me.txtNombre.Value = ""

Me.txtApellidos.Value = ""

Call MsgBox("Registro insertado correctamente", vbInformation, "Inserción terminada")

Exit Sub

mierror:

Dim sError As String

sError = "Se ha producido un error al insertar el registro:" & _

" Número: " & Err.Number & _

" Descripción: " & Err.Description

Call MsgBox(sError, vbCritical, "Error al insertar el registro")

</pego>



Salu2,


José Mª Fueyo

[MS MVP Access]
Respuesta Responder a este mensaje
#3 José Mª Fueyo
29/10/2012 - 13:32 | Informe spam
Perdona, te entendí mal.
En lugar de after update, puedes usar el evento Click del combo.
Crea una sentencia SQL de igual manera, solo que en lugar de ejecutarlo con el método RunSQL del objeto DoCmd, creas un recordset de solo lectura (para mejorar el rendimiento) y a cada cuadro de texto (que te recomiendo nombres como "txt"+Nombre del campo) le asignas a su propiedad Value, el valor del campo.

Salu2
José Mª Fueyo
[MS MVP Access]
Respuesta Responder a este mensaje
#4 Toni
29/10/2012 - 14:33 | Informe spam
Ahí me cogiste, José Mª!!!

Sabía que la cosa va por los derroteros del RecordSet, però no sé cómo funciona el tema. He buscado por internet, pero me cuesta encontrar la solución.

Puedes hecharme un cable?


On Monday, October 29, 2012 1:32:38 PM UTC+1, José Mª Fueyo wrote:
Perdona, te entendí mal.

En lugar de after update, puedes usar el evento Click del combo.

Crea una sentencia SQL de igual manera, solo que en lugar de ejecutarlo con el método RunSQL del objeto DoCmd, creas un recordset de solo lectura (para mejorar el rendimiento) y a cada cuadro de texto (que te recomiendo nombres como "txt"+Nombre del campo) le asignas a su propiedad Value, el valor del campo.



Salu2


José Mª Fueyo

[MS MVP Access]
Respuesta Responder a este mensaje
#5 José Mª Fueyo
30/10/2012 - 10:11 | Informe spam
Hola
Este ejemplo está desarrollado con una copia del formulario "Empleados" de Neptuno (o Northwind). Ten en cuenta que la tabla está copiada para eliminar acentos de los nombres. Los cuadros de texto están nombrados como "txt"+Nombre del campo.
<pego>
Option Compare Database
Option Explicit

'
' Procedure : RecuperarEmpleado
' Author :
' Date : 30/10/2012
' Purpose : Función que se ejecuta cada vez que se hace click al combo.
' Se pasa como parámetro el Id de empleado
'
'
Private Sub RecuperarEmpleado(lId As Long)
Dim sSQL As String
On Error GoTo RecuperarEmpleado_Error

sSQL = "SELECT * FROM _Empleados WHERE IdEmpleado=" & lId
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset(sSQL, dbOpenForwardOnly)
Dim ctl As Control
For Each ctl In Me.Controls
If TypeOf ctl Is TextBox Then
If rs.RecordCount = 0 Then
ctl.Value = ""
Else
Dim sCampo As String
sCampo = Mid(ctl.Name, 4)
ctl.Value = rs.Fields(sCampo).Value
End If
End If
Next
rs.Close
Set rs = Nothing

On Error GoTo 0
Exit Sub

RecuperarEmpleado_Error:

MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure RecuperarEmpleado of Documento VBA Form__Empleados_INDEPENDIENTE"
End Sub

'
' Procedure : cbxEmpleado_Click
' Author :
' Date : 30/10/2012
' Purpose : Código que se ejecuta en el evento click del combo
'
'
Private Sub cbxEmpleado_Click()
Call RecuperarEmpleado(Me.cbxEmpleado.Column(0))
End Sub

'
' Procedure : Form_Load
' Author :
' Date : 30/10/2012
' Purpose : Establece el valor por defecto del combo de empleados
' El combo tiene dos columnas, el Id y el nombre. El Id está oculto
'
'
Private Sub Form_Load()
Me.cbxEmpleado.Value = 0
End Sub
</pego>

Salu2,
José Mª Fueyo
[MS MVP Access]
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida