Codigo para guardar desde VB
Resuelto/Cerrado
Consulta también:
- Codigo para guardar en visual basic
- Código postal chile 83422 ✓ - Foro Internet
- Cuál es el código postal de Chile - Foro Internet
- Código postal chile 2023 - Guide
- Código universal para desbloquear netbook gobierno ✓ - Foro portátiles
- ¿Código postal de Chile es 83422? ✓ - Foro mensajerías y chat
10 respuestas
Quizás llgué un poco tarde, pero por lo que he leído, mucho ruido y pocas nueces... jajaja. Te voy a dar una alternativa sencilla, y de manera dinámica. No sé si estás usando controles para la conexión, yo te recomiendo lo siguiente.
Primero, abrís un Block de notas y en blanco lo guardás como Conexion.udl en la carpeta donde va a estar el ejecutable del sistema. Cuando le des doble click a ese udl, te vas a ubicar en seguida. Te parás sobre la pestaña Proveedor y seleccionás (en tu caso porque es Access, recomiendo siempre SQL): Microsoft Jet 4.0 OLE DB Provider, click en siguiente, pestaña conexión y ahí seleccionás tu base de datos. Click a Probar conexión y seguramente te dirá: La prueba ha sido exitosa. Bien vamos al código ahora.
En un Modulo, vas a declarar un procedimiento llamado Main, y desde el menú del IDE (Ventana de Visual Basic, donde programás) Proyecto, Propiedades, y en la misma pestaña General que se abre en esa ventanita, cambiás la opción de arranque te aparece en el combo dejándo como Objeto Iniciar: Sub Main. A Programar carajo. Vamos a crear una conexión de manera dinámica. La cual tiene que estar declarada fuera del main a nivel general del módulo para que todo tu proyecto pueda verla.
Modulo
-----------------------------------------------------------------------------------------------------------------------
Public Cn as new Adodb.connection
Private Sub Main ()
On Error GoTo NotConnect 'Siempre es bueno implementar control de errores ... Cuestión de estabilidad
Cn.Open "File Name=" & App.Path & "\Conexion.udl" 'Abrimos la conexión, App.Path contiene el directorio
'De tu sistema, y Conexion.udl, la ruta a la base. Así si cambiás la base de directorio, siempre podrás indicarle al sistema donde está. Luego sí, le dás inicio a tu formulario principal.
FRMinicial.Show 'Ojo FRMinicial, porque no sé como se llama tu formulario.
Exit sub 'Esto es para que si no existe error el flujo no pase hacia lo que viene acá abajo.
NotConnect:
Msgbox "No se puede establecer la conexión a la Base de Datos. Comuníquese con el administrador del sistema", vbCritical, "Error al conectar"
end sub
Redondeando, declaramos una conexión dinámica que usará todo el sistema. Vamos a tu duda. Lo mejor a la hora de guardar es trabajar mediate parámetros, siempre parametrizando todo a funciones o procedimientos en Módulos, los .bas, que se encarguen de guardar los datos. Seguramente tendrás un ABM (Altas, bajas y modificaciones) de lo que estés ingresando. Supongamos Clientes, hasta casi puedo ver los objetos insertados: TXTnombre.Text, TXTapellido.Text, seguramente los tendrás así. A la hora de guardar, antes mediante una función Booleana, verifica la integridad de tu formulario, es decir, que no falten datos escenciales. Vamos al código. Un botón guardar, una función de Comprobación, y un procedimiento de guardado codificado en un módulo, y que usará una consulta SQL.
Private Sub CMDguardar_Click() 'De tu formulario de ALTA DE CLIENTES, no de MODIFICACION
If VerificarFRM = True Then 'Y acá es donde vamos a ver si todo está en orden, sólo verificarás los campos que vos consideres estrictamente necesarios.
Call GuardarCliente (True, Val(TXTIdCliente.Text), TXTnombre, TXTapellido) 'En caso de ser verdadera la comprobación entrará en el if y es entonces cuando mandarás los parámetros al procedimiento que los guardará. Recuerda que tiene que estar en un módulo y tiene que ser Público. Y con los parámetros exactos que recibirá.
Verás que como primer parámetro hay una valor verdadero, eso es porque voy a usar el mismo procedimieto para guardar clientes nuevos o guardar cambios de clientes existentes, si el Valor es TRUE, se agregará un nuevo Registro, si es valor es False, buscará el registro que has levantado para modificar. Deberías tener en el formulario, un campo, en modo Disable, TextBox, donde vayas mostrando el Nro de Cliente, si en nuevo el cliente, claro está que mostrarás un número que será el próximo registro, si el cliente existe, a la hora de guardar cambios, ese será el parámetro para encontrar el registro en Base y poder modificarlo.
'*Saltamos al módulo y el procedimiento de Guardado.
End if
end sud
Private Function VerificarFRM () as Boolean
VerificarFRM = False ' Por defecto la consideramos falsa. Y comprobaremos sólo nombre y apellido.
If TXTnombre.Text = "" Then
Msgbox "Debe ingresar el nombre del cliente para su alta.", vbInformation, "Faltan Datos"
TXTnombre.Setfocus 'Posiciona el cursor en el Textbox TXTnombre
Exit Function 'Esto significa que si se cumple la condición al entrar en el If, saldrá de la Función.
end if
If TXTapellido.Text = "" Then
Msgbox "Debe ingresar el nombre del cliente para su alta.", vbInformation, "Faltan Datos"
TXTapellido.Setfocus
Exit Function
end if
VerificarFRM = True ' ESto significa que en caso de no cumplirse las condiciones anteriores, la función devolverá valor verdadero, y tu formulario estará completado de acuerdo a tus deseos.
End Function
Módulo Donde está el Procedimiento que Guarda.
------------------------------------------------------------------------------------------------------------------------
Public Sub GuardarCliente (Condicion as Boolean, Id as integer, Nombre as String, Apellido as String)
Dim Rs as New Adodb.Recordset 'Declaramos localmente el objeto que se va a encargar de meter los datos en la Base, usando la conexión que te enseñé al principio. Vamos a ver como lo abrimos usando Sentencias SQL.
If Condicion = True then 'Significa que el cliente es nuevo.
Rs.Open "Select * From Clientes", Cn, adOpenDynamic, adLockOptimistic
'La consulta Select, lo que hará es abrir todos los campos de esa tabla, Clientes. Cn es la conexión global a tu sistema, y siempre que vayas a manipular datos y necesites un cursor Bidireccional, usarás esos parámetros posteriores.
Rs.Addnew 'Hacemos que abra un nuevo registro en la Base de Datos.
Else 'Si la condicion no es verdadera, es porque el clientes no es nuevo, y el parámetro debería provenir desde tu formulario de Modificación, o bien usando un Flag, Global a tu FRM, una bandera, de tipo Booleana, eso significaría que en caso de que uses el mismo FRM para hacer altas y modificaciones, lo manejarías así, cuando abris el FRM, seteas en el Load, tu Flag con Valor True, si trajiste los datos de un registro existente, la seteas con Valor False, y simplemente como parámetro pasas el nombre de tu Variable
Rs.Open "Select * From Clientes Where IdCliente=" & Id, Cn, AdOpenDinamic, AdLockOptimistic "Abrimos tu recordset, usando como parámetro el Número de cliente que fue cargado a la hora de modificar los datos. Sencillamente abrimos sólo el registro que pertenece a ese número de cliente.
End if
'Procedemos con la asignación de datos para terminar con la clase.
Rs.Fields("Nombre") = Nombre
Rs.Fields("Apellido") = Apellido
Rs.Update
If Rs.State = AdStateOpen then
Rs.Close
Set Rs = Nothing
End if
End Sub
-----------------------------------------------------------------------------------------------------------------------------
Bueno finalmente al salir de ese procedimiento, volverás al procedimiento del botón guardar, y seguramente tendrás un Msgbox que informe que los datos han sido guardados con éxito, y una llamada a un procedimiento que realice una limpieza de Formulario. En caso de que tengas ese campo donde vas mostrando el Número de Cliente, podrías usar ésta Función.
Suponiendo que tu TextBox se llame NroCte, entonces:
NroCte.Text = Str(BuscarNroCte)
Public Function BuscarNroCte () As Integer
Dim Rs as New Adodb.Recordset
Rs.Open "Select IdCliente From Clientes", Cn, AdOpenDinamic, AdLockOptimistic
If Not Rs.Eof Then (Eso es para verificar que tu tabla no esté vacía, sino tendrías un error
Rs.Movelast
BuscarNroCte = Rs.Fields("IdCliente") + 1 'O sea el nuevo cliente que se va a ingresar
Else 'Si no hay registros...
BuscarNroCte = 1
End if
End sub
Cualquier consulta, o duda, mi mail es renzo@asiscomputacion.com.ar Te Ayudaré con Gusto. Espero que tanta Sanata te haya sido de utilidad, admiro a los iniciantes por cuenta propia...
Primero, abrís un Block de notas y en blanco lo guardás como Conexion.udl en la carpeta donde va a estar el ejecutable del sistema. Cuando le des doble click a ese udl, te vas a ubicar en seguida. Te parás sobre la pestaña Proveedor y seleccionás (en tu caso porque es Access, recomiendo siempre SQL): Microsoft Jet 4.0 OLE DB Provider, click en siguiente, pestaña conexión y ahí seleccionás tu base de datos. Click a Probar conexión y seguramente te dirá: La prueba ha sido exitosa. Bien vamos al código ahora.
En un Modulo, vas a declarar un procedimiento llamado Main, y desde el menú del IDE (Ventana de Visual Basic, donde programás) Proyecto, Propiedades, y en la misma pestaña General que se abre en esa ventanita, cambiás la opción de arranque te aparece en el combo dejándo como Objeto Iniciar: Sub Main. A Programar carajo. Vamos a crear una conexión de manera dinámica. La cual tiene que estar declarada fuera del main a nivel general del módulo para que todo tu proyecto pueda verla.
Modulo
-----------------------------------------------------------------------------------------------------------------------
Public Cn as new Adodb.connection
Private Sub Main ()
On Error GoTo NotConnect 'Siempre es bueno implementar control de errores ... Cuestión de estabilidad
Cn.Open "File Name=" & App.Path & "\Conexion.udl" 'Abrimos la conexión, App.Path contiene el directorio
'De tu sistema, y Conexion.udl, la ruta a la base. Así si cambiás la base de directorio, siempre podrás indicarle al sistema donde está. Luego sí, le dás inicio a tu formulario principal.
FRMinicial.Show 'Ojo FRMinicial, porque no sé como se llama tu formulario.
Exit sub 'Esto es para que si no existe error el flujo no pase hacia lo que viene acá abajo.
NotConnect:
Msgbox "No se puede establecer la conexión a la Base de Datos. Comuníquese con el administrador del sistema", vbCritical, "Error al conectar"
end sub
Redondeando, declaramos una conexión dinámica que usará todo el sistema. Vamos a tu duda. Lo mejor a la hora de guardar es trabajar mediate parámetros, siempre parametrizando todo a funciones o procedimientos en Módulos, los .bas, que se encarguen de guardar los datos. Seguramente tendrás un ABM (Altas, bajas y modificaciones) de lo que estés ingresando. Supongamos Clientes, hasta casi puedo ver los objetos insertados: TXTnombre.Text, TXTapellido.Text, seguramente los tendrás así. A la hora de guardar, antes mediante una función Booleana, verifica la integridad de tu formulario, es decir, que no falten datos escenciales. Vamos al código. Un botón guardar, una función de Comprobación, y un procedimiento de guardado codificado en un módulo, y que usará una consulta SQL.
Private Sub CMDguardar_Click() 'De tu formulario de ALTA DE CLIENTES, no de MODIFICACION
If VerificarFRM = True Then 'Y acá es donde vamos a ver si todo está en orden, sólo verificarás los campos que vos consideres estrictamente necesarios.
Call GuardarCliente (True, Val(TXTIdCliente.Text), TXTnombre, TXTapellido) 'En caso de ser verdadera la comprobación entrará en el if y es entonces cuando mandarás los parámetros al procedimiento que los guardará. Recuerda que tiene que estar en un módulo y tiene que ser Público. Y con los parámetros exactos que recibirá.
Verás que como primer parámetro hay una valor verdadero, eso es porque voy a usar el mismo procedimieto para guardar clientes nuevos o guardar cambios de clientes existentes, si el Valor es TRUE, se agregará un nuevo Registro, si es valor es False, buscará el registro que has levantado para modificar. Deberías tener en el formulario, un campo, en modo Disable, TextBox, donde vayas mostrando el Nro de Cliente, si en nuevo el cliente, claro está que mostrarás un número que será el próximo registro, si el cliente existe, a la hora de guardar cambios, ese será el parámetro para encontrar el registro en Base y poder modificarlo.
'*Saltamos al módulo y el procedimiento de Guardado.
End if
end sud
Private Function VerificarFRM () as Boolean
VerificarFRM = False ' Por defecto la consideramos falsa. Y comprobaremos sólo nombre y apellido.
If TXTnombre.Text = "" Then
Msgbox "Debe ingresar el nombre del cliente para su alta.", vbInformation, "Faltan Datos"
TXTnombre.Setfocus 'Posiciona el cursor en el Textbox TXTnombre
Exit Function 'Esto significa que si se cumple la condición al entrar en el If, saldrá de la Función.
end if
If TXTapellido.Text = "" Then
Msgbox "Debe ingresar el nombre del cliente para su alta.", vbInformation, "Faltan Datos"
TXTapellido.Setfocus
Exit Function
end if
VerificarFRM = True ' ESto significa que en caso de no cumplirse las condiciones anteriores, la función devolverá valor verdadero, y tu formulario estará completado de acuerdo a tus deseos.
End Function
Módulo Donde está el Procedimiento que Guarda.
------------------------------------------------------------------------------------------------------------------------
Public Sub GuardarCliente (Condicion as Boolean, Id as integer, Nombre as String, Apellido as String)
Dim Rs as New Adodb.Recordset 'Declaramos localmente el objeto que se va a encargar de meter los datos en la Base, usando la conexión que te enseñé al principio. Vamos a ver como lo abrimos usando Sentencias SQL.
If Condicion = True then 'Significa que el cliente es nuevo.
Rs.Open "Select * From Clientes", Cn, adOpenDynamic, adLockOptimistic
'La consulta Select, lo que hará es abrir todos los campos de esa tabla, Clientes. Cn es la conexión global a tu sistema, y siempre que vayas a manipular datos y necesites un cursor Bidireccional, usarás esos parámetros posteriores.
Rs.Addnew 'Hacemos que abra un nuevo registro en la Base de Datos.
Else 'Si la condicion no es verdadera, es porque el clientes no es nuevo, y el parámetro debería provenir desde tu formulario de Modificación, o bien usando un Flag, Global a tu FRM, una bandera, de tipo Booleana, eso significaría que en caso de que uses el mismo FRM para hacer altas y modificaciones, lo manejarías así, cuando abris el FRM, seteas en el Load, tu Flag con Valor True, si trajiste los datos de un registro existente, la seteas con Valor False, y simplemente como parámetro pasas el nombre de tu Variable
Rs.Open "Select * From Clientes Where IdCliente=" & Id, Cn, AdOpenDinamic, AdLockOptimistic "Abrimos tu recordset, usando como parámetro el Número de cliente que fue cargado a la hora de modificar los datos. Sencillamente abrimos sólo el registro que pertenece a ese número de cliente.
End if
'Procedemos con la asignación de datos para terminar con la clase.
Rs.Fields("Nombre") = Nombre
Rs.Fields("Apellido") = Apellido
Rs.Update
If Rs.State = AdStateOpen then
Rs.Close
Set Rs = Nothing
End if
End Sub
-----------------------------------------------------------------------------------------------------------------------------
Bueno finalmente al salir de ese procedimiento, volverás al procedimiento del botón guardar, y seguramente tendrás un Msgbox que informe que los datos han sido guardados con éxito, y una llamada a un procedimiento que realice una limpieza de Formulario. En caso de que tengas ese campo donde vas mostrando el Número de Cliente, podrías usar ésta Función.
Suponiendo que tu TextBox se llame NroCte, entonces:
NroCte.Text = Str(BuscarNroCte)
Public Function BuscarNroCte () As Integer
Dim Rs as New Adodb.Recordset
Rs.Open "Select IdCliente From Clientes", Cn, AdOpenDinamic, AdLockOptimistic
If Not Rs.Eof Then (Eso es para verificar que tu tabla no esté vacía, sino tendrías un error
Rs.Movelast
BuscarNroCte = Rs.Fields("IdCliente") + 1 'O sea el nuevo cliente que se va a ingresar
Else 'Si no hay registros...
BuscarNroCte = 1
End if
End sub
Cualquier consulta, o duda, mi mail es renzo@asiscomputacion.com.ar Te Ayudaré con Gusto. Espero que tanta Sanata te haya sido de utilidad, admiro a los iniciantes por cuenta propia...