Como guardo datos de textxbox en access 2007
Yo de nuevo y con la misma duda aun no consigo guardar los datos que tengo en mis textbox en una base de datos que cree con access 2007
la verdad nunca había hecho nada parecido a esto ya lo intente mediante un data y a la hora de elegir la base de datos me la selecciona pero para elegir la tabla eso no lo hace y me manda el siguiente error
unrecognized database format ...
No se a que se deba o que, también me gustaría saber si existe alguna otra forma de hacerlo he oído sobre una conexión mediante un object provider o algo así
Seria mucha molestia si me lo explicaran con manzanitas (osea paso a paso)alguien ayúdeme por favor se los agradeceré infinitamente
<address></address>
la verdad nunca había hecho nada parecido a esto ya lo intente mediante un data y a la hora de elegir la base de datos me la selecciona pero para elegir la tabla eso no lo hace y me manda el siguiente error
unrecognized database format ...
No se a que se deba o que, también me gustaría saber si existe alguna otra forma de hacerlo he oído sobre una conexión mediante un object provider o algo así
Seria mucha molestia si me lo explicaran con manzanitas (osea paso a paso)alguien ayúdeme por favor se los agradeceré infinitamente
<address></address>
1 Respuesta
Respuesta de calvuch
1
1
calvuch, las fallas constantes de esta web me cansaron!! me voy a...
Puedes conectar a la base mediante ADO y manejarla mediate objetos recordset, para ello lo primero debes agregar al proyecto la referencia "Microsoft Activex Data Objects 2.8 library" o superior
luego debes declarar en un modulo las variable para la conexión
Public Conexion As ADODB.Connection
Public ruta As String
ahora debes realizar la conexion, puedes realizarlo desde un boton o si lo prefieres desde sub sub main()
lo primero identificar el path de la base, se lo pasa a la variable ruta
ruta = (App.Path & "\base.mdb")
luego conectas:
Set Conexion = New ADODB.Connection ' crea la conexion odb
Conexion.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ruta & ";Persist Security Info=True;Jet OLEDB:Database Password=HOY" ' cadena para apertura de base con password
Conexión.Open ' abre la conexión
y listo ya estas conectada a la base
para cerrar la conexion:
Conexion.close
set conexion=nothing ' libera la instancia
bien una vez que estableciste la conexion, queda operar con las tablas y los datos
para ello debes declarar los Recordset
dim r1 As ADODB.Recordset ' declara objeto recordset
una vez declarado si desearas por ejemplo asignar el text1 de tu form a la tabla : "mitabla", seria:
Set r1 = New ADODB.Recordset
r1.Open "Select * from mitabla", Conexion, adOpenStatic, adLockOptimistic
r1.AddNew ' indica que agregara un nuevo dato a la tabla mitabla
r1!campo1=text1 ' agrega el registro al campo: campo1 de la tabla
r1.update ' actualiza la tabla
r1.close ' cierra el recordet
set r1=nothing ' libera la instancia
eso es basicamente
bye
luego debes declarar en un modulo las variable para la conexión
Public Conexion As ADODB.Connection
Public ruta As String
ahora debes realizar la conexion, puedes realizarlo desde un boton o si lo prefieres desde sub sub main()
lo primero identificar el path de la base, se lo pasa a la variable ruta
ruta = (App.Path & "\base.mdb")
luego conectas:
Set Conexion = New ADODB.Connection ' crea la conexion odb
Conexion.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ruta & ";Persist Security Info=True;Jet OLEDB:Database Password=HOY" ' cadena para apertura de base con password
Conexión.Open ' abre la conexión
y listo ya estas conectada a la base
para cerrar la conexion:
Conexion.close
set conexion=nothing ' libera la instancia
bien una vez que estableciste la conexion, queda operar con las tablas y los datos
para ello debes declarar los Recordset
dim r1 As ADODB.Recordset ' declara objeto recordset
una vez declarado si desearas por ejemplo asignar el text1 de tu form a la tabla : "mitabla", seria:
Set r1 = New ADODB.Recordset
r1.Open "Select * from mitabla", Conexion, adOpenStatic, adLockOptimistic
r1.AddNew ' indica que agregara un nuevo dato a la tabla mitabla
r1!campo1=text1 ' agrega el registro al campo: campo1 de la tabla
r1.update ' actualiza la tabla
r1.close ' cierra el recordet
set r1=nothing ' libera la instancia
eso es basicamente
bye
De antemano gracias por responder a la pregunta, sino es mucha molestia podría decirme si la conexión la debo de cerrar en la sección en la que usted me mostró donde se cerraba dicha conexión o hasta el final. Ah y otra cosita si es que tengo varios campos una misma tabla en los cuales voy a ingresar datos es necesario declarar varios recordsets de la forma en como me lo indico:
" bien una vez que estableciste la conexion, queda operar con las tablas y los datos
para ello debes declarar los Recordset
dim r1 As ADODB.Recordset ' declara objeto recordset
una vez declarado si desearas por ejemplo asignar el text1 de tu form a la tabla : "mitabla", seria:
Set r1 = New ADODB.Recordset
r1.Open "Select * from mitabla", Conexion, adOpenStatic, adLockOptimistic
r1.AddNew ' indica que agregara un nuevo dato a la tabla mitabla
r1!campo1=text1 ' agrega el registro al campo: campo1 de la tabla
r1.update ' actualiza la tabla
r1.close ' cierra el recordet
set r1=nothing "
" bien una vez que estableciste la conexion, queda operar con las tablas y los datos
para ello debes declarar los Recordset
dim r1 As ADODB.Recordset ' declara objeto recordset
una vez declarado si desearas por ejemplo asignar el text1 de tu form a la tabla : "mitabla", seria:
Set r1 = New ADODB.Recordset
r1.Open "Select * from mitabla", Conexion, adOpenStatic, adLockOptimistic
r1.AddNew ' indica que agregara un nuevo dato a la tabla mitabla
r1!campo1=text1 ' agrega el registro al campo: campo1 de la tabla
r1.update ' actualiza la tabla
r1.close ' cierra el recordet
set r1=nothing "
En cuanto a los recordset no es necesario uno para cada campo, si uno para cada tabla o inclusive podrías operar todas las tablas ( en forma individual, con un solo recordset, abriéndolo, utilizándolo y "cerrandolo" eso si antes de pasar a ocuparlo en otra tabla.
Respecto a este tema si tu tabla tiene 50 campos diferentes y deseas ocuparlos todos para pasarle datos bastaría con:
Set r1 = New ADODB.Recordset
r1.Open "Select * from mitabla", Conexion, adOpenStatic, adLockOptimistic
r1.AddNew ' indica que agregara un nuevo dato a la tabla mitabla
r1!campo1=text1 ' agrega el registro al campo: campo1 de la tabla
r1!campo2=text2 ' agrega el registro al campo: campo1 de la tabla
r1!campo3=text10 ' agrega el registro al campo: campo1 de la tabla
r1!campo4=text40 ' agrega el registro al campo: campo1 de la tabla
r1.update ' actualiza la tabla
r1.close ' cierra el recordet
set r1=nothing "
Cuando pienses en recordset piensa en lo que es "un conjunto de registros"
Nota: una buena forma de operar con recordset es diseñar eficientemente una tabla en la base de datos, es decir si en una tabla tienes por ejemplo solo 2 campos nombre y país
fíjate bien de darle el largo necesario para cada campo y definir bien el tipo de dato que allí se alojara, ¿por ejemplo en access cada campo puede tener un largo max de 255 caracteres pero seria conveniente dar ese largo al campo nombre?... existe alguien con un nomber tannnn largo... pues no creo, el detalle puede sonar trivial pero que pasa si das ese alrgo al campo, aunque tengas datos de largo max de 40 caracteres para ca da registro en campo nombre, cada vez que llames a la tabla que contiene ese campo, la maquina vera la estructira de la tabla y separara la cantidad de memoria necesaria para n registros de largo 255 ( en función que son más cortos), entonces estarás perdiendo memoria y haciendo lenta la ejecucipn de la consulta si tienes muchos registros, en resumen aprovechar bien el espacio de memoria es fundamental.
Aquí ves que utilizas tantos campos como desees, en el ejemplo campo1 campo2, etc son los nombres de los campos, si en tu base el campos se llaman tomate pera lechuga
deberías utilizar la siguiente forma
r1! Tomate=text2 ' agrega el registro al campo: campo1 de la tabla
r1! Lechuga=text3 ' agrega el registro al campo: campo1 de la tabla
etc.
Ahora respecto al cierre de la conexión, tu puedes cerrarla cuando desees, pero te sugiero la cierres una vez que ya hayas realizado todas las operaciones que deseabas con tu base ( podría ser cuando finalizas la aplicación, cuando descargas el form o en un botón, no se, tu decides), eso si si cierras la conexión, no podrás operar con el recordset hasta que establezcas otra vez la conexión, ¿eso se entiende verdad?.
Estas lineas
R1. Close ' cierra el recordet
set r1=nothing "
Las insertas en el procedimiento que desees y cerrara la conexión, te dará error si intentas cerrar una conexión que previamente no ha sido abierta ( no se puede cerrar una puerta cerrada).
Bueno.
Respecto a este tema si tu tabla tiene 50 campos diferentes y deseas ocuparlos todos para pasarle datos bastaría con:
Set r1 = New ADODB.Recordset
r1.Open "Select * from mitabla", Conexion, adOpenStatic, adLockOptimistic
r1.AddNew ' indica que agregara un nuevo dato a la tabla mitabla
r1!campo1=text1 ' agrega el registro al campo: campo1 de la tabla
r1!campo2=text2 ' agrega el registro al campo: campo1 de la tabla
r1!campo3=text10 ' agrega el registro al campo: campo1 de la tabla
r1!campo4=text40 ' agrega el registro al campo: campo1 de la tabla
r1.update ' actualiza la tabla
r1.close ' cierra el recordet
set r1=nothing "
Cuando pienses en recordset piensa en lo que es "un conjunto de registros"
Nota: una buena forma de operar con recordset es diseñar eficientemente una tabla en la base de datos, es decir si en una tabla tienes por ejemplo solo 2 campos nombre y país
fíjate bien de darle el largo necesario para cada campo y definir bien el tipo de dato que allí se alojara, ¿por ejemplo en access cada campo puede tener un largo max de 255 caracteres pero seria conveniente dar ese largo al campo nombre?... existe alguien con un nomber tannnn largo... pues no creo, el detalle puede sonar trivial pero que pasa si das ese alrgo al campo, aunque tengas datos de largo max de 40 caracteres para ca da registro en campo nombre, cada vez que llames a la tabla que contiene ese campo, la maquina vera la estructira de la tabla y separara la cantidad de memoria necesaria para n registros de largo 255 ( en función que son más cortos), entonces estarás perdiendo memoria y haciendo lenta la ejecucipn de la consulta si tienes muchos registros, en resumen aprovechar bien el espacio de memoria es fundamental.
Aquí ves que utilizas tantos campos como desees, en el ejemplo campo1 campo2, etc son los nombres de los campos, si en tu base el campos se llaman tomate pera lechuga
deberías utilizar la siguiente forma
r1! Tomate=text2 ' agrega el registro al campo: campo1 de la tabla
r1! Lechuga=text3 ' agrega el registro al campo: campo1 de la tabla
etc.
Ahora respecto al cierre de la conexión, tu puedes cerrarla cuando desees, pero te sugiero la cierres una vez que ya hayas realizado todas las operaciones que deseabas con tu base ( podría ser cuando finalizas la aplicación, cuando descargas el form o en un botón, no se, tu decides), eso si si cierras la conexión, no podrás operar con el recordset hasta que establezcas otra vez la conexión, ¿eso se entiende verdad?.
Estas lineas
R1. Close ' cierra el recordet
set r1=nothing "
Las insertas en el procedimiento que desees y cerrara la conexión, te dará error si intentas cerrar una conexión que previamente no ha sido abierta ( no se puede cerrar una puerta cerrada).
Bueno.
Nuevamente gracias y disculpe si es que provoco molestias con mis preguntas que quizá sean un poco absurdas pero en verdad me esta sirviendo de mucho su ayuda.
Tengo algunos problemitas quizá ud. pueda ayudarme a solucionarlos, ¿primeramente todo el código debe estar en el modulo o como?
ya lo ingrese en todo el modulo y cuando intento complira primeramente me marca COMPILE ERROR : INVALID OUTSIDE PROCEDURE y marca la linea de código ruta = (App.Path & "\med_term.mdb")
Tengo algunos problemitas quizá ud. pueda ayudarme a solucionarlos, ¿primeramente todo el código debe estar en el modulo o como?
ya lo ingrese en todo el modulo y cuando intento complira primeramente me marca COMPILE ERROR : INVALID OUTSIDE PROCEDURE y marca la linea de código ruta = (App.Path & "\med_term.mdb")
Te dejo un ejemplo completo de lo que utilizo habitualmente para conectar a bases de acceses
En el mismo modulo:
Option Explicit
Public Conexion As ADODB.Connection
Public ruta As String
Public r1 As ADODB.Recordset
Private Sub Main()
If App.PrevInstance = True Then
MsgBox "La Aplicación ya esta en Ejecución", vbCritical, "Atención"
Exit Sub
Else
On Error GoTo 1
ruta = (App.Path & "\LABASE.mdb")
Set Conexion = New ADODB.Connection ' crea la conexion odb
Conexion.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ruta & ";Persist Security Info=True;Jet OLEDB:Database Password=cadena" ' cadena para apertura d base con password
Conexion.Open
GoTo 2
End If
1:
MsgBox "No se encuentra la base de datos -" & "Error: " & Err.Description & " -Error #: " & Err.Number, vbCritical, "Atención": End
2:
Form1.Show ' llama el formulario form1
End Sub
Este sub se llama main, para correrlo debes antes que nada debes modificar el modo de arranque de la aplicación, por default arranca con el form1, pero en este ejemplo le decimos que debe comenzar por main.
En el menú de Visual basic ve a "Proyecto" luego a "Propiedades de..." en la pestaña General indica... form1 debes modificarlo a Sub Main.
Entonces cada vez que arranque tu aplicación hará primero todo lo del sub main. Si te fijas, la linea final del main llama al form1, es decir establece la conexión y luego presenta el form.
El cierre de la conexión ya lo vimos y eso puede estar en un botón o en el evento de cierre del form si lo deseas.
¿El tema de recordset supongo que no te da problemas o todavía tienes dudas?
Prueba de esta forma, ejecuta paso a paso y verifica que todo este ok antes de compilar
bye
En el mismo modulo:
Option Explicit
Public Conexion As ADODB.Connection
Public ruta As String
Public r1 As ADODB.Recordset
Private Sub Main()
If App.PrevInstance = True Then
MsgBox "La Aplicación ya esta en Ejecución", vbCritical, "Atención"
Exit Sub
Else
On Error GoTo 1
ruta = (App.Path & "\LABASE.mdb")
Set Conexion = New ADODB.Connection ' crea la conexion odb
Conexion.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ruta & ";Persist Security Info=True;Jet OLEDB:Database Password=cadena" ' cadena para apertura d base con password
Conexion.Open
GoTo 2
End If
1:
MsgBox "No se encuentra la base de datos -" & "Error: " & Err.Description & " -Error #: " & Err.Number, vbCritical, "Atención": End
2:
Form1.Show ' llama el formulario form1
End Sub
Este sub se llama main, para correrlo debes antes que nada debes modificar el modo de arranque de la aplicación, por default arranca con el form1, pero en este ejemplo le decimos que debe comenzar por main.
En el menú de Visual basic ve a "Proyecto" luego a "Propiedades de..." en la pestaña General indica... form1 debes modificarlo a Sub Main.
Entonces cada vez que arranque tu aplicación hará primero todo lo del sub main. Si te fijas, la linea final del main llama al form1, es decir establece la conexión y luego presenta el form.
El cierre de la conexión ya lo vimos y eso puede estar en un botón o en el evento de cierre del form si lo deseas.
¿El tema de recordset supongo que no te da problemas o todavía tienes dudas?
Prueba de esta forma, ejecuta paso a paso y verifica que todo este ok antes de compilar
bye
Nuevamente gracias he hecho las cosas como me lo ha indicado y a la hora de iniciar el programa todo bien pero me marca un error en la linea en la cual se establece la conexión me marca Run-Time error '424' object requiered y cuando elijo degub es cuando me marca la linea de conexión con la base de datos.
¿Es posible saber a que se refiere este error o a caso falta instalar algo en la computadora?
¿Es posible saber a que se refiere este error o a caso falta instalar algo en la computadora?
- Compartir respuesta
- Anónimo
ahora mismo