Duda Visual Basic + Access

Iniciado por ka0s, 23 Agosto 2009, 02:55 AM

0 Miembros y 1 Visitante están viendo este tema.

jack06

a uhmm por lo visto creo k estas cometiendo dos posibles problemas

1.- Si te fijas que en el modulo estas poniendo la conexion a la BDD, eh en el form1 no lo estas llamando, entonces el el form load ponle Call Conectar.

2.- Y si te fijas en ese Sub Reload estas declarando una nueva conexion y fijate k stas poniendo RST y fijate que tu estas poniendo asi Set grilla.Recordset = rs, te comistes la t  :xD

FORM1
Código (vb) [Seleccionar]
Private Sub reload()
Set rst = New ADODB.Recordset
rst.Open sql, CN
Set grilla.Recordset = rst '<----------Te falto la T
grilla.Refresh
End Sub

Private Sub Form_Load()
Call Conectar '<--------- Te Falto esa
sql = "select * from socios order by id"
Call reload
End Sub


weno creo que esos dos era el problema cualkier cosa avisa Salu2  :¬¬
(̅_̅̅_̅(̅_̅_̅_̅_̅() ڪ €l $åßîø nø d nµn¢å tødø lø qµ£ Þî£n$å, Þ£®ø $î£mÞ®£ Þî£n$å tødø lø qµ£ d (̅_̅̅_̅(̅_̅_̅_̅_̅() ڪ

cassiani

ah bueno, lo que pasa por no hacer uso del "option explicit" ...... pero ellos creen que es broma xDD

ka0s

#12
Cita de: jack06 en 24 Agosto 2009, 19:43 PM
a uhmm por lo visto creo k estas cometiendo dos posibles problemas

1.- Si te fijas que en el modulo estas poniendo la conexion a la BDD, eh en el form1 no lo estas llamando, entonces el el form load ponle Call Conectar.

2.- Y si te fijas en ese Sub Reload estas declarando una nueva conexion y fijate k stas poniendo RST y fijate que tu estas poniendo asi Set grilla.Recordset = rs, te comistes la t  :xD

FORM1
Código (vb) [Seleccionar]
Private Sub reload()
Set rst = New ADODB.Recordset
rst.Open sql, CN
Set grilla.Recordset = rst '<----------Te falto la T
grilla.Refresh
End Sub

Private Sub Form_Load()
Call Conectar '<--------- Te Falto esa
sql = "select * from socios order by id"
Call reload
End Sub


weno creo que esos dos era el problema cualkier cosa avisa Salu2  :¬¬


Es verdad, no me di cuenta de eso.
Arreglé como me dijiste pero seguía teniendo problemas.
El error que arrojaba ahora es:

"Runtime error '3001': Argumentos incorrectos, fuera del intervalo permitido o en conflicto con otros"

Le dí depurar y la línea que marcaba con error es la siguiente:

Código (vb) [Seleccionar]
Private Sub reload()
Set RST = New ADODB.Recordset
RST.Open sql, CN 'ESTA LINEA ARROJABA EL ERROR!!
Set grilla.Recordset = RST
grilla.Refresh
End Sub

Private Sub Form_Load()
Call Conectar
sql = "Select * from socios order by id"
Call reload
End Sub

y lo que hice fue borrar la variable SQL del form_load y poner el comando directamente, y ahí si funciono y cargó la grilla completamente, así:

Código (vb) [Seleccionar]
Private Sub reload()
Set RST = New ADODB.Recordset
RST.Open "select * from socios order by id", CN '-->LO MODIFIQUE DIRECTAMENTE
Set grilla.Recordset = RST '
grilla.Refresh
End Sub

Private Sub Form_Load()
Call Conectar
'ACA ESTABA LA VARIABLE Y LA QUITÉ!
Call reload
End Sub




Alguien sabe porque era ese error ya que estamos?

Desde ya muchas gracias a todos por la ayuda, me lo solucionaron perfectamente!

Saludos!

cassiani

#13
declaraste "sql" en algun lado? es una variable local o global? insisto con lo del option explicit, nunca le estas pasando parámetros a tu rutina.

lo puedes pasar como parametro:
CitarPrivate Sub Form_Load()
Call Conectar
sql = "Select * from socios order by id"
Call reload(sql) <--
End Sub

Private Sub reload(Byval sql as string) <--
Set RST = New ADODB.Recordset
RST.Open sql, CN
Set grilla.Recordset = RST '
grilla.Refresh
End Sub

o declarandolo como global dentro del formulario
Citar
dim sql as string <--
Private Sub Form_Load()
Call Conectar
sql = "Select * from socios order by id"
Call reload()
End Sub

Private Sub reload()
Set RST = New ADODB.Recordset
RST.Open sql, CN
Set grilla.Recordset = RST '
grilla.Refresh
End Sub

saludos!!

ka0s

Ahora sí, no molesto más por ahora.
Muchas gracias cΔssiΔnі !!

ka0s

Gente sigo escribiendo en este post para no abrir otros al pedo.
Mi duda es la siguiente:
Tengo en la grilla ya cargada varios datos, y cuando marco un campo de la grilla o sea seleccionarlo y después ir al BOTON BORRAR, lo que se me borra a mi es el REGISTRO QUE ESTA ARRIBA DE TODO y no el que seleccione.

¿Porque puede ser esto?

Les muestro el source:

Código (vb) [Seleccionar]
Private Sub grilla_Click()
'Si la grilla esta vacia
If RST.EOF = True Then
'Muestra mensaje
   MsgBox "La grilla está vacia", vbInformation, "Información"
Else
'Sino, Almacena el valor del registro
borrarregistro = RST!Id
End If
End Sub


Y acá pongo el BOTON BORRAR:

Código (vb) [Seleccionar]
Private Sub cmdborrar_Click()
'Borra el registro seleccionado
cn.Execute ("DELETE FROM socios where id= ") & borrarregistro, cn
'Llama a la función LOAD para que cargue la grilla nuevamente.
'Por lo tanto SE ACTUALIZA.
Call Form_Load
End Sub


O sea supuestamente el código está bien, pero PROBÉ PONIENDO
msgbox rst!id cuando clickeaba y lo que me figuraba siempre era el VALOR DE ID DEL PRIMERO DE TODOS de la grilla Y NO EL QUE MARCABA  :-\

Espero que me hayan entendido, sino trato de ser más claro.

Muchas gracias!

ssccaann43 ©

Código (vb) [Seleccionar]

Private Sub cmdborrar_Click()'Borra el registro seleccionado
<->cn.Execute ("DELETE FROM socios where id= ") & borrarregistro, cn
'Llama a la funcion LOAD para que cargue la grilla nuevamente.
'Por lo tanto SE ACTUALIZA.
Call Form_Load
End Sub


Coloca un punto de Interrupción allí <-> y verifica que valor tiene borrarregistro.

Por otro lado, te recomiendo que en vez de borrarregistro, indiques el index donde te encuentras posicionado en la grilla.

Por ejemplo usando un listview sería. ListView1.SelectedItem.Text
- Miguel Núñez
Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio...
"I like ^TiFa^"

MCKSys Argentina

Cita de: ssccaann43 en 26 Agosto 2009, 22:04 PM
Código (vb) [Seleccionar]

Private Sub cmdborrar_Click()'Borra el registro seleccionado
<->cn.Execute ("DELETE FROM socios where id= ") & borrarregistro, cn
'Llama a la funcion LOAD para que cargue la grilla nuevamente.
'Por lo tanto SE ACTUALIZA.
Call Form_Load
End Sub


El error esta en la SQL (falta el "*"). Deberia ser:

cn.Execute ("DELETE * FROM socios where id= ") & borrarregistro, cn

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


ssccaann43 ©

Amigo, deberías hacer un cursito de Querys.

La instrucción DELETE no lleva "*", solo si el motor de BD es Access lo permite. Pero no se usa ya que no le dices en el query si deseas eliminar solo unos campos o todo, no tienes la potestad para hacerlo, con esa instrucción eliminas todo el registro. Espero haberme hecho entender. Y no lo tomes a mal, pero leete un manual de BD. Hay Querys que podrían soprenderte.
- Miguel Núñez
Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio...
"I like ^TiFa^"

MCKSys Argentina

OK, pero sólo porque tú lo dices...


MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."