• Domingo 22 de Diciembre de 2024, 13:31

Autor Tema:  Esto Estaría Bien?  (Leído 4012 veces)

Jess_Kapria

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Esto Estaría Bien?
« en: Jueves 8 de Marzo de 2007, 17:43 »
0
Hola , pues os voy a poner un procedimiento que yo creo que está bien y unos amigos (estudiantes) que están estudiando visual me dicen que está bien que no saben:

Citar
        Try
            Dim conexion As New OleDbConnection
            conexion.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=bd.mdb"

            conexion.Open()

            adaptador = New OleDbDataAdapter("SELECT * FROM pelisAlquiladas", conexion)
            datos = New DataSet()
            adaptador.Fill(datos, "pelisAlquiladas")

            adaptador2 = New OleDbDataAdapter("SELECT * FROM facturas", conexion)
            datos = New DataSet()
            adaptador2.Fill(datos, "facturas")

            conexion.Close()

            Dim filas As DataRow
            For Each filas In datos.Tables("pelisAlquiladas").Rows
                MsgBox(filas.Item("cod_factura"))
            Next

        Catch ex As Exception
            MsgBox("ERROR AL CREAR FACTURAS")
            MsgBox(ex.Message)
        End Try

Hemos creado instanciado ya las variables que utilizamos ahí

Citar
private conexion as oledbdataconnection
private adaptador,adaptador2 as oledbdataadapter
private datos as dataset

No quiero que me lo resuelvan y espero que no me echen la bronca, sólo quiero saber porque me da error (y con explicación please)

El error que me da es:

Citar
Referencia a objeto no establecia como instancia del objeto

No lo entiendo XD

lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Re: Esto Estaría Bien?
« Respuesta #1 en: Jueves 8 de Marzo de 2007, 17:49 »
0
A simple vista parece que esta bien.

en que parte de tu codigo te tira ese error ??

BYTE.
______________________________________________________________________________________
"No estoy de acuerdo con lo que dices, pero defenderé con mi vida tu derecho a expresarlo"

Cajami

  • Miembro MUY activo
  • ***
  • Mensajes: 298
    • Ver Perfil
Re: Esto Estaría Bien?
« Respuesta #2 en: Jueves 8 de Marzo de 2007, 17:54 »
0
hola, no estoy seguro pero si ia hicistes una instancia del DataSet porque vuelves ha hacer de nuevo'? aunque no lo he probado o tiene que hacerce asi??, tambien puede ser porue el nombre de tu campo no es filas.Item("cod_factura"), en que linea como dice lencho te sale error?
Lima - Perú

-------------------------------------------------------------------------------------------------------
"Persigue tus metas, tus objetivos, tus sueños, nunca t rindas si t caes 1000 veces levantat 1000 veces y sigue adelante..."

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Esto Estaría Bien?
« Respuesta #3 en: Jueves 8 de Marzo de 2007, 18:13 »
0
Código: Text
  1.             conexion.Close()
  2.  
  3.             Dim filas As DataRow
  4.             For Each filas In datos.Tables("pelisAlquiladas").Rows
  5.                 MsgBox(filas.Item("cod_factura"))
  6.             Next
  7.  

Esta mal porque estas cerrando la conexion cuando aun necesitas acceder al DataSet.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Cajami

  • Miembro MUY activo
  • ***
  • Mensajes: 298
    • Ver Perfil
Re: Esto Estaría Bien?
« Respuesta #4 en: Jueves 8 de Marzo de 2007, 18:16 »
0
hola, pero que tiene si el dataset ia tienes los datos de la tabla, ia no necesita que siga abierta la conexion, ia que el For Each está trabajando con los datos del DataSet
Lima - Perú

-------------------------------------------------------------------------------------------------------
"Persigue tus metas, tus objetivos, tus sueños, nunca t rindas si t caes 1000 veces levantat 1000 veces y sigue adelante..."

lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Re: Esto Estaría Bien?
« Respuesta #5 en: Jueves 8 de Marzo de 2007, 18:17 »
0
ummm, pero acaso el DataSet no funciona aun sin conexion ???, o estoy mal en conceptos !!!.

BYTE.
______________________________________________________________________________________
"No estoy de acuerdo con lo que dices, pero defenderé con mi vida tu derecho a expresarlo"

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Esto Estaría Bien?
« Respuesta #6 en: Jueves 8 de Marzo de 2007, 18:25 »
0
no uso mucho el rollo de los dataset porque no trabajo con eso.

Pero tengo un escenario... que pasa si se hace una consulta sobre una tabla de nada mas 70´000.000 de registros?

dudo que esta operación:

Código: Text
  1. adaptador2.Fill(datos, "facturas")
  2.  

traiga a la máquina local los 70',  (lo cual fácilmente son gigas y gigas de infromacion)

no traerá nada en tanto no se valla utilizar esa información, la primera vez que se necesita dicha información solo traerá una cantidad determinada mediante la operación llamada comúnmente a nivel de base de datos: Fetch

Ese fectch debe ser de por defecto algo asi como algunos 2000 registros y no se hara un nuevo fetch a la dbase en tanto no se soliciten mas datos a parte de los del fetch anterior...  

así que cuando se quiere utilizar un conjunto de datos al cual aun no se le ha hecho fetch entonces el dataset hace fetch a la base de datos para lo cual como es de suponerse se requiere conexión.

Habrá ocasiones  en que se haga el primero fetch con solo llamar a Fill? no lo se es posible que si., pero nunca sera un fecth enorme, siempre relacionado con el tope.

Otro escenario es que si el dataset se llena con una consulta relativamente pequeña este se llene entonces todo de una vez con un solo fetch asi que no requirira mas conexiones a la db.-
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Esto Estaría Bien?
« Respuesta #7 en: Jueves 8 de Marzo de 2007, 18:29 »
0
Cita de: "Cajami"
hola, no estoy seguro pero si ia hicistes una instancia del DataSet porque vuelves ha hacer de nuevo'? aunque no lo he probado o tiene que hacerce asi??, tambien puede ser porue el nombre de tu campo no es filas.Item("cod_factura"), en que linea como dice lencho te sale error?
esta también puede ser una opción aunque para el caso es un mensaje de error muy poco informativo  :blink:
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Re: Esto Estaría Bien?
« Respuesta #8 en: Jueves 8 de Marzo de 2007, 18:31 »
0
Cita de: "JuanK"
Cita de: "Cajami"
hola, no estoy seguro pero si ia hicistes una instancia del DataSet porque vuelves ha hacer de nuevo'? aunque no lo he probado o tiene que hacerce asi??, tambien puede ser porue el nombre de tu campo no es filas.Item("cod_factura"), en que linea como dice lencho te sale error?
esta también puede ser una opción aunque para el caso es un mensaje de error muy poco informativo  :blink:
claro, practicamente el error esta ahi, por que al volver a hacer NEW la tabla llenada anteriormente osea "pelisAlquiladas" ya no existe.

BYTE.
______________________________________________________________________________________
"No estoy de acuerdo con lo que dices, pero defenderé con mi vida tu derecho a expresarlo"

lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Re: Esto Estaría Bien?
« Respuesta #9 en: Jueves 8 de Marzo de 2007, 18:49 »
0
La propiedad STATE me dice si la conexion esta abierta o cerrada.

Código: Text
  1.  
  2.   Private Sub BtnVer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnVer.Click        
  3.         Dim Cn As New SqlConnection()
  4.         Cn.ConnectionString = "Server=(Local);DataBase=Empresa;Integrated Security=SSPI"
  5.         Dim Cmd As New SqlCommand()        
  6.         Cmd.CommandText = "Select * From Clientes Order By Nombre"
  7.         Cmd.Connection = Cn
  8.         'Crea el objeto DataAdapter
  9.         Dim Da As New SqlDataAdapter()
  10.         'Asigna el comando al objeto DataAdapter
  11.         Da.SelectCommand = Cmd
  12.         'Crea el objeto DataSet
  13.         Dim Ds As New DataSet()
  14.         MsgBox("Estado de la conexion antes de llenar el dataser:" & Cn.State.ToString)
  15.         'Llena el objeto DataSet con la información leida
  16.         Da.Fill(Ds, "Clientes")
  17.         'Muestra la información del objeto DataSet en el control DgClientes
  18.         DgClientes.DataSource = Ds.Tables("Clientes")        
  19.         'MsgBox("Estado de la conexion despues de llenar el dataser:" & Cn.State.ToString)
  20.     End Sub
  21.  

En el transcurso de este evento me mostrara dos mensajes, como pueden ver.
Lo interesante y nuevo para mi es que en los dos muestra que la conexion esta cerrada.

BYTE.
______________________________________________________________________________________
"No estoy de acuerdo con lo que dices, pero defenderé con mi vida tu derecho a expresarlo"

Cajami

  • Miembro MUY activo
  • ***
  • Mensajes: 298
    • Ver Perfil
Re: Esto Estaría Bien?
« Respuesta #10 en: Jueves 8 de Marzo de 2007, 19:08 »
0
hola, ps no veo que hayas hecho:

Código: Text
  1. Cn.Open
  2.  

ahora si te muestra los datos debe ser porquye le mismo DataAdapter es el que se encarga de abrir y cerrar la conecion con la bd
Lima - Perú

-------------------------------------------------------------------------------------------------------
"Persigue tus metas, tus objetivos, tus sueños, nunca t rindas si t caes 1000 veces levantat 1000 veces y sigue adelante..."

lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Re: Esto Estaría Bien?
« Respuesta #11 en: Jueves 8 de Marzo de 2007, 19:16 »
0
Cita de: "Cajami"
hola, ps no veo que hayas hecho:

Código: Text
  1. Cn.Open
  2.  

ahora si te muestra los datos debe ser porquye le mismo DataAdapter es el que se encarga de abrir y cerrar la conecion con la bd
pues segun yo veo, la conexion siempre peramece abierta y solo se abre en el momento en que se llena el DataSet.

BYTE.
______________________________________________________________________________________
"No estoy de acuerdo con lo que dices, pero defenderé con mi vida tu derecho a expresarlo"

Cajami

  • Miembro MUY activo
  • ***
  • Mensajes: 298
    • Ver Perfil
Re: Esto Estaría Bien?
« Respuesta #12 en: Jueves 8 de Marzo de 2007, 19:20 »
0
Citar
pues segun yo veo, la conexion siempre peramece abierta y solo se abre en el momento en que se llena el DataSet.

?????????? siempre permanece abierta y solo se abre en el momento.....????
Lima - Perú

-------------------------------------------------------------------------------------------------------
"Persigue tus metas, tus objetivos, tus sueños, nunca t rindas si t caes 1000 veces levantat 1000 veces y sigue adelante..."

lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Re: Esto Estaría Bien?
« Respuesta #13 en: Jueves 8 de Marzo de 2007, 19:27 »
0
Cita de: "Cajami"
Citar
pues segun yo veo, la conexion siempre peramece abierta y solo se abre en el momento en que se llena el DataSet.

?????????? siempre permanece abierta y solo se abre en el momento.....????
jajajja, me equivoque.
quize decir que siempre permanece cerrada, y solo se  abre cuando se llena el DataSet.

BYTE.
______________________________________________________________________________________
"No estoy de acuerdo con lo que dices, pero defenderé con mi vida tu derecho a expresarlo"

Cajami

  • Miembro MUY activo
  • ***
  • Mensajes: 298
    • Ver Perfil
Re: Esto Estaría Bien?
« Respuesta #14 en: Jueves 8 de Marzo de 2007, 19:37 »
0
Cita de: "lencho"
Cita de: "Cajami"
Citar
pues segun yo veo, la conexion siempre peramece abierta y solo se abre en el momento en que se llena el DataSet.

?????????? siempre permanece abierta y solo se abre en el momento.....????
jajajja, me equivoque.
quize decir que siempre permanece cerrada, y solo se  abre cuando se llena el DataSet.

BYTE.
por eso te digo el DataAdapter se encarga de abril al conecion cuando filtra al DataSEt y luego lo cierra
Lima - Perú

-------------------------------------------------------------------------------------------------------
"Persigue tus metas, tus objetivos, tus sueños, nunca t rindas si t caes 1000 veces levantat 1000 veces y sigue adelante..."

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Esto Estaría Bien?
« Respuesta #15 en: Jueves 8 de Marzo de 2007, 19:42 »
0
y con el otro tema de las conexiones con volumenes de datos...alguien ha hecho alguna aprueba?
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

xcx

  • Miembro MUY activo
  • ***
  • Mensajes: 175
  • Nacionalidad: cl
    • Ver Perfil
    • Fotos y captura
Re: Esto Estaría Bien?
« Respuesta #16 en: Jueves 8 de Marzo de 2007, 19:44 »
0
Vez que he ocupado el dataset, hago lo siguiente
Código: Text
  1.  
  2. ...
  3. ...
  4.  Try
  5.             CMD.Connection.Open()
  6.             dadlistado = New OleDbDataAdapter
  7.             dstlistado = New DataSet
  8.             dadlistado.SelectCommand = CMD
  9.             dadlistado.Fill(dstlistado, "Datos")
  10.             retorno = dstlistado
  11.             CMD.Connection.Close()
  12. Catch ex As Exception
  13.             retorno = Nothing
  14. End Try
  15. Return retorno
  16.  
  17.  
He trabajando con dataset de esa forma y hasta la fecha no he tenido problemas. solo al momento de trabajarlo pregunto si viene nulo o no y si viene con datos, lo trabajo.

lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Re: Esto Estaría Bien?
« Respuesta #17 en: Viernes 9 de Marzo de 2007, 13:35 »
0
Cita de: "JuanK"
y con el otro tema de las conexiones con volumenes de datos...alguien ha hecho alguna aprueba?
A cual te referis ??

Parece que el iniciador del post se perdio que no ha dicho nada  :lol:  :lol:  :lol: :devil:  :devil:  :devil:

BYTE.
______________________________________________________________________________________
"No estoy de acuerdo con lo que dices, pero defenderé con mi vida tu derecho a expresarlo"