Foros del Web » Programación para mayores de 30 ;) » .NET »

No puedo declarar variables cuando ya he leído un OleDbDataReader??

Estas en el tema de No puedo declarar variables cuando ya he leído un OleDbDataReader?? en el foro de .NET en Foros del Web. Buenas gente! Lo siento por el título, pero no he sabido resumirlo mejor. Vereis, me he encontrado en que, mientras esto funciona: Código: Dim var1 ...
  #1 (permalink)  
Antiguo 24/02/2009, 09:06
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 10 meses
Puntos: 9
No puedo declarar variables cuando ya he leído un OleDbDataReader??

Buenas gente!
Lo siento por el título, pero no he sabido resumirlo mejor.
Vereis, me he encontrado en que, mientras esto funciona:
Código:
Dim var1 As String
Conn.Open()
Dim dR As OleDbDataReader = miCM.ExecuteReader
If dR.Read Then
  var1 = dR("Campo1")
End If
Lo siguiente no funciona:
Código:
Conn.Open()
Dim dR As OleDbDataReader = miCM.ExecuteReader
If dR.Read Then
  Dim var1 As String = dR("Campo1")
End If
El funciona o no funciona, me refiero a que var1 toma el valor o no lo toma.
También os aseguro que de las dos formas, entra en el IF.
Lo único que ocurre, es que declarando la variable dentro del propio IF no toma el valor.
Depurando esto, me dice algo como que "la variable no está declarada".
Me he estado comiendo la cabeza con esto un buen rato.
Aunque, una vez lo encontré, aún me he quedado peor
¿¿¿Por qué razón no puedo declarar la variable directamente dentro del bloque "If dR.Read Then" ???
¿Alguien sabe?
__________________
..:: moNTeZIon ::..
  #2 (permalink)  
Antiguo 24/02/2009, 14:21
Avatar de freegirl
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: Catalonia
Mensajes: 4.334
Antigüedad: 21 años, 1 mes
Puntos: 156
Respuesta: No puedo declarar variables cuando ya he leído un OleDbDataReader??

sí se pueden declarar variables dentro de un reader. Yo lo había hecho muchas veces, e incluso por curiosidad lo he vuelto a probar de nuevo, y no me da problema.

La única diferencia contigo es que le digo el tipo de campo a obtener, por ejemplo: dr.GetString ("campo1") , etc....si te da error el string, prueba: dr.GetValue("campo")

No sé si tiene que ver en tu caso...

saludos
  #3 (permalink)  
Antiguo 25/02/2009, 03:43
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 10 meses
Puntos: 9
Respuesta: No puedo declarar variables cuando ya he leído un OleDbDataReader??

Hola freegirl!
Cuanto tiempo Anda! Pero si eres "Colaborador"! Felicidades!
En principio ya lo tengo funcionando de la forma que dije que SI funciona.
Pero he querido insistir con este tema, y acabo de realizar las pruebas que comentas.
En principio no he tenido éxito con ninguna de ellas ya que, tanto GetString como GetValue, esperan como parámetro un Integer, y no un nombre de campo.
Y por este hecho me dan error las dos opciones, porqué intenta convertir un String (nombre del campo) a un Integer (parámetro que está esperando la funcion).. No puedorrr Jarl!!!
Pero... ¿¿¿Dices que a ti te ha funcionado el caso tal cual lo puse???
Yo lo veo muy obvio tambiém, y estoy casi seguro de haberlo usado otras veces así, pero en este caso no entiendo por qué no me deja.
Voy a poner todo el código, a ver si alguien ve algo "extraño"
Código:
        Dim miConn As New OleDbConnection(Datos.ConnStr)
        Dim miCM As New OleDbCommand("SELECT Tarifa, [Grupo Descuento] AS GrupoDescuento FROM Clientes WHERE Codigo = '" & CodigoCliente & "'", miConn)
        Dim sSQL As String
        miConn.Open()
        Dim dR As OleDbDataReader = miCM.ExecuteReader
        If dR.Read Then
            Dim miTarifa As String = dR("Tarifa")
            Dim miGrupoDescuento As String = dR("GrupoDescuento")
            miConn.Dispose()
        Else
            miConn.Dispose()
            Throw New Exception("El cliente especificado no existe.")
        End If
Cuando depuro este código, intento obtener el valor de cada una de las variables una vez ha pasado por esas líneas, y veo lo siguiente:

- No se ha declarado el nombre 'miTarifa'

En cambio, declarando la variable antes, y sustituyendo esta línea por

miTarifa = dR("Tarifa")

Si que toma el valor correctamente, y cuando depuro y obtengo el valor de la variable, en este caso me muestra una "A" como debe ser, y no el mensaje que muestra en el caso anterior.
Muchas gracias y saludos!
__________________
..:: moNTeZIon ::..

Última edición por moNTeZIon; 25/02/2009 a las 03:50
  #4 (permalink)  
Antiguo 25/02/2009, 04:39
Avatar de freegirl
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: Catalonia
Mensajes: 4.334
Antigüedad: 21 años, 1 mes
Puntos: 156
Respuesta: No puedo declarar variables cuando ya he leído un OleDbDataReader??

Si, hacia tiempo que no pasaba por los posts de .NET

Cita:
¿¿¿Dices que a ti te ha funcionado el caso tal cual lo puse???
Si si. Lo único que ataca a una base de datos mía. Pero he puesto tu mismo código. Curioso si que es....

¿que versión estás usando de VB?

Yo lo he probado en VB 2003.

saludos
  #5 (permalink)  
Antiguo 25/02/2009, 07:05
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 10 meses
Puntos: 9
Respuesta: No puedo declarar variables cuando ya he leído un OleDbDataReader??

Yo 2005...
Pero... no se... Ya no entiendo nada...
Lo he probado en un formulario nuevo, dentro del mismo proyecto, y me funciona perfectamente!!
He copiado el código de la funcion, tal cual en el evento Form_Load del nuevo formulario, y lo he puesto como formulario de inicio.
Lo depuro, y las variables toman correctamentre los valores.
La verdad, estoy estupefacto.
¿El mismo código no me funciona en una Function? Esta es la funcion donde no me funciona el código. Será por el mero hecho de estar en una función?
Bueno, ya aclaro también que esta funcion se encuentra dentro de un Módulo...
Es que ya no se que explicar...
Código:
    Public Function DameDsConsultaDescuentos(ByVal CodigoCliente As String) As dsConsultaDescuentos
        Dim miConn As New OleDbConnection(Datos.ConnStr)
        Dim miCM As New OleDbCommand("SELECT Tarifa, [Grupo Descuento] AS GrupoDescuento FROM Clientes WHERE Codigo = '" & CodigoCliente & "'", miConn)
        Dim sSQL As String
        miConn.Open()
        Dim dR As OleDbDataReader = miCM.ExecuteReader
        If dR.Read Then
            Dim miTarifa As String = dR("Tarifa")
            Dim miGrupoDescuento As String = dR("GrupoDescuento")
            Dim miDA As New OleDbDataAdapter("", miConn)
            Dim dS As New dsConsultaDescuentos
            sSQL = "SELECT ..."
            miDA.SelectCommand.CommandText = sSQL
            miDA.Fill(dS, "Cabecera")
            sSQL = "SELECT ..."
            miDA.SelectCommand.CommandText = sSQL
            miDA.Fill(dS, "Lineas")
            miConn.Dispose()
            Return dS
        Else
            miConn.Dispose()
            Throw New Exception("El cliente especificado no existe.")
        End If
    End Function
Si que es curioso si...
Gracias!

Un saludo.
__________________
..:: moNTeZIon ::..
  #6 (permalink)  
Antiguo 25/02/2009, 07:09
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 17 años, 2 meses
Puntos: 87
Respuesta: No puedo declarar variables cuando ya he leído un OleDbDataReader??

el detalle montezion es el ambito de la variable mientras en el caso en el que si te funciona esta en el contexto del metodo en el 2do solo existe dentro del IF eso viene desde c++.

si lo declaras dentro del if al finalizar el if se pierde y no lo puedes usar fuera de el.

mira esto

http://www.lostechies.com/blogs/deri...nce-types.aspx

investiga sobre el scope de las variables.

http://www.java2s.com/Tutorial/VB/00...able-Scope.htm
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5

Última edición por Peterpay; 25/02/2009 a las 07:17
  #7 (permalink)  
Antiguo 25/02/2009, 08:54
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 10 meses
Puntos: 9
Respuesta: No puedo declarar variables cuando ya he leído un OleDbDataReader??

Hola Peter!
Como va todo? Gracias por tu respuesta.
Verás, entiendo lo que dices, de hecho este es un aspecto que tenemos que tener muy presente para programar.
Si declaro la variable dentro de un IF, cuando salgo del IF ya no existe tal variable. Bien.
De hecho, en este caso, no pretendo usar la variable fuera del IF, por eso precisamente la declaro dentro. Porqué una vez finaliza el IF no la necesito, como puedes ver en el código.
Esas dos variables las utilizo para construir las dos sentencias SQL que están un poquito más abajo, que no he querido escribir enteras, pero que se encuentran dentro del IF, igualmente.
Por lo tanto, en ese punto deberían ser accesibles, verdad?
Me explico un poco más.
Cuando estoy depurando paso a paso, si me paro justo en la línea posterior a las declaraciones, debería poder ver el valor que tiene la variable en ese momento, puesto que sigo estando dentro del IF. Pero no es así, cuando intento ver el valor mediante la ventana de inspección, por ejemplo, o posicionándome encima de la variable con el mouse, me muestra el mensaje que ya puse antes:

- No se ha declarado el nombre 'miTarifa'

¿Me estoy perdiendo algo?
Saludos!
__________________
..:: moNTeZIon ::..
  #8 (permalink)  
Antiguo 28/02/2009, 05:50
Avatar de freegirl
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: Catalonia
Mensajes: 4.334
Antigüedad: 21 años, 1 mes
Puntos: 156
Respuesta: No puedo declarar variables cuando ya he leído un OleDbDataReader??

es que si la intentara leer fuera del IF ya no le dejaría ni debugar...A veces puede pasar por despiste que declares una variable, por ej. dentro de un Try, y luego la quieres leer fuera, y ya te da error antes de debugar...

Si mal no he entendido, él no puede leerla ni al momento ¿correcto? Es decir aquí:

Dim miTarifa As String = dR("Tarifa")



Yo es que he probado su mismo código, es más tengo aplicaciones con variables declaradas así, y funciona bien...

Lo he probado incluso en VB2005, por si era alguna particularidad de esta versión, y me funciona igualmente bien. He creado un módulo con una función y he declarado la varibale dentro del IF:

Cita:
Dim dR As OleDb.OleDbDataReader = miCM.ExecuteReader
If dR.Read Then
Dim miTarifa As String = dR("Tarifa")
Dim miGrupoDescuento As String = dR("GrupoDescuento")
Return miTarifa
Else
miConn.Dispose()
Throw New Exception("El cliente especificado no existe.")
End If
Entra y devuleve bien el valor....

¿tienes el VB2005 con las últimas actualizaciones? Es por descartar...porque es muy raro. A mi me habían pasado cosas raras en VB2003 y era porque me faltaba una actualización.


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 22:58.