programa de vb6 a vb.net

03/08/2006 - 10:55 por tonid | Informe spam
hola gente

he migrado un programa de vb6 a vb.net y ejecutando el programa me da
la siguiente excepcion

Dim recperiodo As Object

'UPGRADE_WARNING: No se puede resolver la propiedad predeterminada del
objeto recperiodo.Fields.


lblPeriodo.Text = recperiodo.Fields("Dato")


error: La conversión del tipo 'Field' en el tipo 'String' no es
válida.

Preguntas similare

Leer las respuestas

#1 tonid
03/08/2006 - 11:18 | Informe spam
en vb6 el codigo era

Private Sub Form_Activate()
Set dbdatos = OpenDatabase(Path & "datos.mdb")
Set recperiodo = dbdatos.OpenRecordset("SELECT * FROM Datos_Grupo
WHERE Tema='Jugada'")
Set recGrupo = dbdatos.OpenRecordset("SELECT * FROM Datos_Grupo
WHERE Tema='Grupo'")
lblPeriodo = recperiodo.Fields("Dato")
recperiodo.Close
lblGrupo = recGrupo.Fields("Dato")
recGrupo.Close

dbdatos.Close
End Sub




y en vb.net

Dim recGrupo As Object
Dim recperiodo As Object
Dim dbdatos As Object

dbdatos = DAODBEngine_definst.OpenDatabase(Path & "datos.mdb")
recperiodo = dbdatos.OpenRecordset("SELECT * FROM Datos_Grupo WHERE
Tema='Jugada'")
recGrupo = dbdatos.OpenRecordset("SELECT * FROM Datos_Grupo WHERE
Tema='Grupo'")
lblPeriodo.Text = recperiodo.Fields("Dato")

recperiodo.Close()
lblGrupo.Text = recGrupo.Fields("Dato")
recGrupo.Close()
Respuesta Responder a este mensaje
#2 SoftJaén
03/08/2006 - 16:06 | Informe spam
"tonid" escribió:

he migrado un programa de vb6 a vb.net y ejecutando el programa
me da la siguiente excepcion

'UPGRADE_WARNING: No se puede resolver la propiedad
predeterminada del objeto recperiodo.Fields.

lblPeriodo.Text = recperiodo.Fields("Dato")
error: La conversión del tipo 'Field' en el tipo 'String' no es
válida.



Por si lo desconoces, te comento que en el marco de trabajo de .net, existe
el proveedor de datos .net OleDb para trabajar con bases de datos Microsoft
Access, porque trabajar en Visual Basic .net con la antigua biblioteca de
DAO en los tiempos actuales, no creo que sea muy prudente. :-)

El mensaje que obtienes no es una excepción; es un aviso de actualización
producido por la herramienta para actualizar el código de Visual Basic 6.0,
el cual ignora por completo la propiedad predeterminada de un objeto
Field de DAO. La excepción la obtienes después, cuando intentas ejecutar el
código.

Lo primero que tienes que hacer, ya que vas a trabajar con DAO, es
referenciar dicha biblioteca en tu proyecto, y a continuación activar la
instrucción «Option Strict», para que observes en tiempo de diseño los
errores de código.

Una vez referencia la biblioteca de DAO, declararías las correspondientes
variables objeto, de la siguiente manera:

Dim recGrupo As dao.Recordset
Dim recperiodo As dao.Recordset
Dim dbdatos As dao.Database

' Creamos una nueva instancia del objeto DBEngine,
' lo cual no hacía falta hacerlo en Visual Basic 6.0.
'
Dim dbe As New dao.DBEngine

' Abrimos la base de datos
'
dbdatos = dbe.OpenDatabase(Path & "datos.mdb")

Como podrás observar, varía la forma de utilizar la biblioteca de DAO en
Visual Basic .net.

Por último, para que no obtengas la excepción, si tu intención es leer el
valor de un campo, debes de indicar expresamente la propiedad «Value», que
si bien no hacía falta indicarla en Visual Basic 6.0 (porque se suponía que
era la propiedad predeterminada de un objeto Field), en Visual Basic .net,
gracias a Dios, es un requisito indispensable.

Para leer el valor del campo, ejecuta lo siguiente:

lblPeriodo.Text = recperiodo.Fields("Dato").Value.ToString

Vuelvo a insistirte que mejor será que trabajes con el proveedor de datos
.net OleDb, porque la biblioteca de DAO 3.6 está ya obsoleta. La siguiente
versión de la biblioteca de DAO, saldrá a la luz cuando aparezca Microsoft
Office 2007, y ya no se trata de un componente COM si no de un componente
.net, dentro del espacio de nombres «Microsoft.Office.Interop.Access».

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Respuesta Responder a este mensaje
#3 tonid
04/08/2006 - 20:06 | Informe spam
Muchas gracias por tu ayuda ,me ha sido de gran utilidada,si no te
importa te hago una pregunta más

'

Dim recAlmacen As DAO.Recordset

Private Sub HacerDescuentoMonturas(ByRef Cantidad As Double)

recMonturas.Fields("Coste").Value = (0.98 * recMonturas.Fields("Coste
unidad").Value * Cantidad + recMonturas.Fields("Coste").Value *
recMonturas.Fields("Almacen").Value) /
(recMonturas.Fields("Almacen").Value + Cantidad)

/*me da esto error*/ Option Strict On prohíbe operandos de tipo Object
para el operador '*'.
End sub


De nuevo muchas gracias
Respuesta Responder a este mensaje
#4 tonid
04/08/2006 - 21:02 | Informe spam
otra cosa sabes como es el tipo frame en vb.net

el problema es

fraGrupo.Visible = False
Respuesta Responder a este mensaje
#5 SoftJaén
05/08/2006 - 12:13 | Informe spam
"tonid" escribió:

/*me da esto error*/ Option Strict On prohíbe operandos de tipo Object
para el operador '*'.



¿De verdad crees que merece la pena trabajar en .net con la antigua
biblioteca de DAO? Te advierto que vas a tener innumerables problemas con la
conversión de los tipos de datos.

En Visual Basic .net, la propiedad «Value» de un objeto DAO.Field, devuelve
un valor «Object», por lo que no están permitidas las operaciones
matemáticas entre objetos, es decir, no puedes sumar, restar, multiplicar o
dividir dos objetos. Para que lo comprendas mejor, es como si deseas sumar
un objeto Database y un objeto Recordset.

Para no obtener la excepción que comentas, tienes que convertir expresamente
a un tipo de dato válido, el valor devuelto por la propiedad «Value» de un
objeto DAO.Field.

Por ejemplo, si el campo «Coste» almacena valores «Double», tienes que
convertir a «Double» todos los valores de los campos que deseas sumar,
restar, multiplicar o dividir. El procedimiento quedaría de la siguiente
manera:

Private Sub HacerDescuentoMonturas(ByRef Cantidad As Double)

recMonturas.Fields("Coste").Value = (0.98 _
* Convert.ToDouble(recMonturas.Fields("Costeunidad").Value) _
* Cantidad _
+ Convert.ToDouble(recMonturas.Fields("Coste").Value) _
* Convert.ToDouble(recMonturas.Fields("Almacen").Value) _
/ (Convert.ToDouble(recMonturas.Fields("Almacen").Value) _
+ Cantidad))

End Sub

Por supuesto, tienes que hacer la conversión explícita porque tienes
activada la instrucción «Option Strict». Si no la tuvieras activada (cosa
que no te recomiendo), pues no obtendrías ningún mensaje de excepción, y
trabajarías en Visual Basic .net de la misma manera que lo hacías en Visual
Basic 6.0.

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida