Access - Mejorar codigo VBA

 
Vista:

Mejorar codigo VBA

Publicado por lucho (22 intervenciones) el 20/11/2009 02:57:44
Hola y gracias a todos desde ya. Tengo el siguiente código en un formulario de ingreso que realmente funciona muy bien... es el siguiente:

Private Sub Insertar_Click()
Dim SQL As String
Dim SQL2 As String

SQL = "INSERT INTO tPersonas (id_Personas,Nombre,Apellido,DNI,F_Nac,id_Localidad) Values(" & Me.id_Personas & ",'" & Me.Nombre & "','" & Me.Apellido & "'," & Me.DNI & ",# " & Me.F_Nac & " #," & Me.cboLocalidad & ")"

SQL2 = "INSERT INTO tDestinos (id_Persona, id_des, Comisaria) Values(" & Me.id_Personas & "," & Me.id_des & ",'" & Me.Comisaria & "')"

DoCmd.SetWarnings False

DoCmd.RunSQL SQL
DoCmd.RunSQL SQL2

End Sub

Mi pregunta es cómo puedo hacer para que antes le que inserte el registro le pregunte al operador si confirma o no el ingreso?
Otra pregunta, me gustaría que ustedes que saben mucho más que yo me digan mejoras para este humilde código, hecho con esfuerzo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Mejorar codigo VBA

Publicado por Enrique (1299 intervenciones) el 20/11/2009 15:11:11
Hola Lucho:
A ver si te vale esto:

Private Sub Insertar_Click()
Dim SQL As String, SQL2 As String
Dim pregunta1 As Integer, Pregunta2 As Integer

Pregunta1 = MsgBox("¿ Confirma la inserción en la Tabla Personas ?", _
vbQuestion + vbYesNo + vbDefaultButton1, "Confirmar o Cancelar")
If pregunta1 = vbYes Then
SQL = "INSERT INTO tPersonas (id_Personas,Nombre,Apellido,DNI,F_Nac,id_Localidad) Values(" & Me.id_Personas & ",'" & Me.Nombre & "','" & Me.Apellido & "'," & Me.DNI & ",# " & Me.F_Nac & " #," & Me.cboLocalidad & ")"
Else
MsgBox "Inserción cancelada.", vbInformation, "Tabla Personas"
End If

Pregunta2 = MsgBox("¿ Confirma la inserción en la Tabla Destinos ?", _
vbQuestion + vbYesNo + vbDefaultButton1, "Confirmar o Cancelar")
If pregunta2 = vbYes Then
SQL2 = "INSERT INTO tDestinos (id_Persona, id_des, Comisaria) Values(" & Me.id_Personas & "," & Me.id_des & ",'" & Me.Comisaria & "')"
Else
MsgBox "Inserción cancelada.", vbInformation, "Tabla Destinos"
End If

DoCmd.SetWarnings False
DoCmd.RunSQL SQL
DoCmd.RunSQL SQL2
End Sub

Un saludo
Enrique
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Para Enrique

Publicado por lucho (22 intervenciones) el 20/11/2009 21:10:02
Perfecto Enrique estoy muy agradecido con tu aporte. Te cuento que el usuario sólo debe confirmar una sola vez porque los datos deben insertarse en ambas tablas necesariamente. Yo hice dos consultas SQLs porque no pude hacer todo en una sola línea. No sé si esto esta bien, pero fue la forma que encontré para insertar los registros.
Traté de usar la forma del insert into siguiente:

INSERT INTO (tabla1,tabla2) VALUES (tabla1.campo,tabla2.campo2) pero no me funcionó. Si me puedes dar tu opinión y enseñarme otra forma esta me vendría barbaro para mis futuros trabajos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Mejorar codigo VBA

Publicado por Enrique (1299 intervenciones) el 20/11/2009 22:07:06
No te compliques la vida Lucho, deja solo una variable "pregunta" y mete todo dentro de la misma sentencia If - Then - Else - End If. Es mejor usar dos SQL's, una por cada consulta de inserción, porque además creo que no se puede hacer todo en la misma SQL puesto que son dos Tablas con campos diferentes y aunque se pudiera hacer, no merece la pena.

Saludos
Enrique
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Mejorar codigo VBA

Publicado por Para Enrique (22 intervenciones) el 21/11/2009 04:29:44
Gracias Enrique por responderme. Te cuento que me puse muy contento al leer este úlitmo mail tuyo, primero porque me decís que está bien lo de ambas consultas y segundo porque hice tal cual lo que me dijiste de dejar sólo una pregunta. Te paso el código que además le hice un ultimo agregado y de paso te hago una preguntita:

Private Sub Comando20_Click()
Dim SQL As String, SQL2 As String
Dim pregunta1 As Integer

pregunta1 = MsgBox("¿ Confirma la inserción de los datos en las tablas de la base de datos PRUEBA.mdb ?", _
vbQuestion + vbYesNo + vbDefaultButton1, "Confirmar o Cancelar")

If pregunta1 = vbYes Then

SQL = "INSERT INTO tPersonas (id_Personas,Nombre,Apellido,DNI,F_Nac,id_Localidad) Values(" & Me.id_Personas & ",'" & Me.Nombre & "','" & Me.Apellido & "'," & Me.DNI & ",# " & Me.F_Nac & " #," & Me.cboLocalidad & ")"
SQL2 = "INSERT INTO tDestinos (id_Persona, id_des, Comisaria) Values(" & Me.id_Personas & "," & Me.id_des & ",'" & Me.Comisaria & "')"

DoCmd.SetWarnings False
DoCmd.RunSQL SQL
DoCmd.RunSQL SQL2

Else
MsgBox "Inserción cancelada por el operador!.", vbInformation, "Tabla Personas"
End If

LimpiarControles

End Sub

Public Sub LimpiarControles()

Dim Control As Control

For Each Control In Me.Controls
If TypeOf Control Is TextBox Then
Control.Value = ""
End If
Next

End Sub

Enrique, cómo verás hice un agregado para limpiar los controles del form. Funciona a medias porque los cuadros de texto sí me los limpia pero no así los cuadros combinados que conservan el último valor ingresado. Tendrás alguna idea para ayudarme?

PD: te cuento que estoy encantado con access, empece hace unos meses a usarlo porque debe entregar un trabajo en la facu.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Mejorar codigo VBA

Publicado por Enrique (1299 intervenciones) el 21/11/2009 11:26:02
Hola Lucho:
Pués se hace simplemente incorporando el tipo de controles ComboBox en la línea de código, de esta forma:

If TypeOf Control Is TextBox Or TypeOf Control Is ComboBox Then

Un saludo
Enrique
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: Para Enrique

Publicado por lucho (22 intervenciones) el 21/11/2009 18:04:25
Hola Enrique, te cuento muy agradecido por toda tu gran ayuda. No quiero abusar de tí pero podrías indicarme que debo leer para poder en este mismo código validar los datos. Te explico, cuando ingreso un registro con la misma clave principal que otro ya existente en el formulario se ve como que se ingresa pero no es así ya que en la tabla no. Cómo puedo hacer para indicarle al operador que la clave principal duplicaría el registro?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar