Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

VB 6.0 con base de datos en Access 2003

Estas en el tema de VB 6.0 con base de datos en Access 2003 en el foro de Visual Basic clásico en Foros del Web. Buenas a todos, Antes de hablarles de mi problema les mostrare el marcador actual: Maligno Programa del Mal(XD): 1280090 Pts. Golpeado Remedo de Programador: 12 ...
  #1 (permalink)  
Antiguo 23/04/2009, 18:14
 
Fecha de Ingreso: abril-2009
Ubicación: Caracas, Venezuela
Mensajes: 2
Antigüedad: 15 años
Puntos: 0
Exclamación VB 6.0 con base de datos en Access 2003

Buenas a todos, Antes de hablarles de mi problema les mostrare el marcador actual:

Maligno Programa del Mal(XD): 1280090 Pts.

Golpeado Remedo de Programador: 12 Pts.

Ya establecido eso pues bueno al problema, pues verán estoy haciendo un programa sencillo que va a manejar dos bases de datos una para modificar cuentas de usuario y otra para almacenar archivos de texto (preferiblemente imágenes) o si no tengo la capacidad (lo más probable) simplemente los datos de un Textbox, sin embargo después de recibir muchas golpizas me he quedado estancado en este punto:

Private Sub cmdAgregar1_Click()
Call IniciarConexion
Dim rs As ADODB.Recordset
If formMuser.txtPass <> formMuser.txtCpass Then
MsgBox "La Clave y la Confirmación de esta deben ser iguales", vbOKOnly, "Error"
Else
Data1.ConnectionString = "C:\Documents and Settings\Jean Paul\Escritorio\Programas\2-Programa\Base de Datos\BD.mdb"
With rs
.Open "C:\Documents and Settings\Jean Paul\Escritorio\Programas\2-Programa\Base de Datos\BD.mdb" & "Select DARPA, Username, Contraseña * From Tabla1" & "Where DARPA='txtCautorization', Username='txtUsername', Contraseña='txtPass'", cnn, adOpenDynamic, adLockBatchOptimistic
.AddNew "DARPA", txtCautorization.Text
.AddNew "Username", txtUsername.Text
.AddNew "Contraseña", txtPass.Text
End With
End If
End Sub


Como verán lo resaltado en rojo es mi problema ya que el VB 6.0 me sigue repitiendo:

Error '91' en tiempo de ejecución:

Variable de tipo Object o la variable de bloque With no está establecida.

Debido a esto estoy totalmente detenido, les explico no soy una persona que le guste pedir ayuda pero después de cinco días sin dormir trabajando en este programa, decidí digerir mi orgullo y preguntar.
  #2 (permalink)  
Antiguo 23/04/2009, 18:26
 
Fecha de Ingreso: abril-2009
Mensajes: 136
Antigüedad: 15 años
Puntos: 1
Respuesta: VB 6.0 con base de datos en Access 2003

Ok prueba debajo del dim
set rs = new adodb.recordset

prueba con eso y me comentas ya que no entiendo la variable data1 no la aperturas le indicas la ruta pero no la abres estas usando la variable cnn que entiendo que la tienes declarada en otro modulo asi mismo no entiendo si quieres llamar el usuario y cotraseña o solo insertarlos en la base de datos saludos.....
  #3 (permalink)  
Antiguo 23/04/2009, 19:05
 
Fecha de Ingreso: enero-2008
Ubicación: Lima - Perú
Mensajes: 1.127
Antigüedad: 16 años, 3 meses
Puntos: 10
Respuesta: VB 6.0 con base de datos en Access 2003

Tio has activado la referencia Microsoft activeX data object 2.1 library?
Puedes poner el codigo de la funcion Call IniciarConexion, ademas donde esta ubicada esta funcion en el mismo form o en un modulo
  #4 (permalink)  
Antiguo 23/04/2009, 19:25
 
Fecha de Ingreso: abril-2009
Ubicación: Caracas, Venezuela
Mensajes: 2
Antigüedad: 15 años
Puntos: 0
Respuesta: VB 6.0 con base de datos en Access 2003

Gracias Vicentecamesella y franko1809

Vincent, con respecto a tu pregunta Data1 era como quien dice uno de los tantos residuos de la batalla, se me había olvidado borrarle en la última codificación, probé tu código y agregue unas cosas más.

Franko: De hecho ni siquiera me aparece en el listado Franko, y lo de Call IniciarConexion lo tengo en un modulo y el IniciarConexion está declarado como público.

Ahora después de una mutación mas así es como lo llevo:

Private Sub cmdAgregar1_Click()
Dim sPathBase As String
Dim rst As ADODB.Recordset
Dim cnn As ADODB.Connection
Set cnn = New ADODB.Connection
Set rst = New ADODB.Recordset
Call IniciarConexion
Dim rs As ADODB.Recordset
If txtPass <> txtCpass Then
MsgBox "La Clave y la Confirmación de esta deben ser iguales", vbOKOnly, "Error"
Else
sPathBase = "C:\Documents and Settings\Jean Paul\Escritorio\Programas\2-Programa\Base de Datos\BD.mdb"
cnn.ConnectionString = "Provider= Microsoft.Jet.OLEDB.4.0; Data Source=" & sPathBase & ";"
cnn.Open
With rst
.Open "INSERT INTO Tabla1(DARPA, Username, Contraseña)VALUES('txtCautorization.text','txtUser name.text','txtPass.text')"
.AddNew "DARPA", txtCautorization.Text
.AddNew "Username", txtUsername.Text
.AddNew "Contraseña", txtPass.Text
End With
End If
End Sub

Ok luego de unos martillazos termine desarrollando esto gracias a un amigo (Si insisto llegue tarde a la repartición de cerebros, al menos lo compenso con amigos *.*) y me salió este error:

Error 3709

No se puede utilizar la conexión para realizar esta operación. Está cerrada o no es válida en el contexto.

Este programa ha probado ser un reto de un paso adelante y cinco para atrás.
  #5 (permalink)  
Antiguo 23/04/2009, 20:21
 
Fecha de Ingreso: enero-2008
Ubicación: Lima - Perú
Mensajes: 1.127
Antigüedad: 16 años, 3 meses
Puntos: 10
Respuesta: VB 6.0 con base de datos en Access 2003

Tio sino agregas esa referencia no puedes utilizar ADOBD
Ve al menu proyesto/referencias/y activa Microsoft activeX data object 2.1 library

Suponiendo que tu conexion esta asi dentro de un modulo bas

Código:
Public dbConex As New Connection

Public Sub IniciarConexion()

     dbConex.CursorLocation = adUseClient
     dbConex.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.path & "\nombre-base-dato.mdb;Password=;Persist Security Info=false"

End Sub
De esta manera ingresas datos

Código:
Dim rst As Recordset

Private Sub cmdAgregar1_Click()

call IniciarConexion

Set rst = New Recordset

'Con esta linea abres el recordset sino te va decir que esta cerrado
rst.Open "SELECT * FROM Tabla1", dbConex, adOpenStatic, adLockOptimistic

'Insertas los datos
With rst

.AddNew
!DARPA = txtCautorization.Text
!Username = txtUsername.Text
!Contraseña = txtPass.Text
.Update

End With
End Sub
Este error sale por que no tienes activo la referencia que te digo
Error '91' en tiempo de ejecución:
Variable de tipo Object o la variable de bloque With no está establecida.
  #6 (permalink)  
Antiguo 23/04/2009, 20:39
 
Fecha de Ingreso: abril-2009
Mensajes: 136
Antigüedad: 15 años
Puntos: 1
De acuerdo Respuesta: VB 6.0 con base de datos en Access 2003

Ok lo que voy hacer no lo acostumbro pero tratare de depurar tu codigo aver si asi te echo una mano

Private Sub cmdAgregar1_Click()
Dim rs As ADODB.Recordset

Call IniciarConexion
Set Rs = New ADODB.recordset

If txtPass <> txtCpass Then
MsgBox "La Clave y la Confirmación de esta deben ser iguales"," & _
" vbOKOnly,"Error""
Else
Call IniciarConexion
cnn.Open
cnn. execute "INSERT INTO Tabla1(DARPA, Username, Contraseña) " & _
"VALUES(' " & txtCautorization.text & " '," & _
" ' & txtUser name.text & " ',' " & txtPass.text & " ')"
End If
End Sub

Ok No lo e probado pero creo que seria eso lo que quieres ojos varios consejos
- Uno crea un modulo donde declares todas las variables asi evitaras tener tan sucio el codigo
- dos create un modulo con este metodo sub main () en el declara una sola vez la conexion y la dejas abierta todo el tiempo solo abre y cierra los recordset

Aparte no se si en call IniciarConexion tu primero revisas el estado aver si esta abierta o cerrada la conexion si no lo haces y la conexion esta abierta te arroajara un error en ese caso deberias revisarla con el siguiente bloque

Sub comprobar_cnn()

If cnn.State = adStateOpen Then
cnn.Close
End If

End Sub

Bueno espero te sirva mi msn es [email protected] si quieres me agregas y te echo una mano saludos.....
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:12.