Visual Basic.NET - Un valor de tipo '1-matriz dimensional de WinDemo22.Saldo' no se puede convertir en 'WinDemo22.Saldo

 
Vista:
sin imagen de perfil

Un valor de tipo '1-matriz dimensional de WinDemo22.Saldo' no se puede convertir en 'WinDemo22.Saldo

Publicado por Carlos (2 intervenciones) el 28/10/2015 22:52:06
Necesito ayuda por favor, tengo el siguiente código de una clase llamada "Transferencias", pero cuando hago el return de la función GetSaldos(), linea N° 36 me muestra un error que dice:


Un valor de tipo '1-matriz dimensional de WinDemo22.Saldo' no se puede convertir en 'WinDemo22.Saldo'.


Agradeceré su ayuda para solucionar este problema,



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Imports System.Data.OleDb
Public Structure Saldo
    Public IdCaja As Integer
    Public Saldo As Double
End Structure
 
Public Class Transferencias
    Private Con As OleDbConnection
    Public Sub New()
        Con = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Copy\Carlos\Cervero\VideoTutoriales\WinDemo22\Transferencias.accdb")
        Try
            Con.Open()
        Catch ex As Exception
            MessageBox.Show("No Se Puede Conectar a la Base de Datos")
        End Try
    End Sub
    Public Sub Dispose()
        If Con.State <> ConnectionState.Closed Then
            Con.Close()
        End If
End Sub
 
Public Function GetSaldos() As Saldo
        Dim Com As New OleDbCommand("SELECT * FROM Caja", Con)
        Dim dr As OleDbDataReader
        Dim Saldos(1) As Saldo
        Try
            dr = Com.ExecuteReader()
            Dim Cont As Integer = 0
            Dim SaldoCaja As Saldo
            While dr.Read
                SaldoCaja.IdCaja = CType(dr.GetValue(0), Integer)
                SaldoCaja.Saldo = CType(dr.GetValue(2), Double)
                Saldos(Cont) = SaldoCaja
                Cont += 1
            End While
            dr.Close()
            Return Saldos
        Catch ex As Exception
            MessageBox.Show("Error al Cargar los Saldos")
            Return Nothing
        End Try
    End Function
    Public Sub Transferir(ByVal pIdCajaOrigen As Integer, ByVal pIdCajaDestino As Integer, ByVal pCantidad As Double)
 
    End Sub
End Class
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Un valor de tipo '1-matriz dimensional de WinDemo22.Saldo' no se puede convertir en 'WinDemo22.Saldo

Publicado por Marcelo (69 intervenciones) el 29/10/2015 00:00:06
Hola,

La definición de tu Función dice que al procesarse esta va a devolver una sola Estructura de tipo Saldo. Pero tu código esta devolviendo un Array de tipo Saldo. O sea estas devolviendo una array con Saldos en vez de un solo saldo.

Cambia la definición de tu Función en la cual devuelves un Array en vez de un solo saldo. Te dejo el siguiente código como ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Public Class Form1
 
    Structure Saldo
        Public _transaccionID As Integer
        Public _Saldo As Double
    End Structure
 
    ‘Esta seria la definición de la Función
    Public Function DevolverSaldos() As Saldo()
        Dim Resultado() As Saldo
        Dim mySaldo As Saldo
        Dim numero_de_records As Integer = 2
        ReDim Resultado(numero_de_records)
        For i As Integer = 0 To numero_de_records
            mySaldo = New Saldo
            mySaldo._transaccionID = i
            mySaldo._Saldo = 1000 + i
            Resultado(i) = mySaldo
        Next
        Return Resultado
    End Function
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
	‘hacemos la petición a la función
        Dim TodosLosSaldos() As Saldo = DevolverSaldos()
        For Each x As Saldo In TodosLosSaldos
            Debug.Print(“Transacción: " & x._transaccionID & " Saldo: " & x._Saldo)
        Next
    End Sub
End Class
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Un valor de tipo '1-matriz dimensional de WinDemo22.Saldo' no se puede convertir en 'WinDemo22.Saldo

Publicado por Carlos (2 intervenciones) el 29/10/2015 14:45:25
Gracias por la respuesta, pero no comprendo muy bien el código, soy nuevo en la programación y me gustaría que me explicaras un poco mejor, para poder entenderlo. Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Un valor de tipo '1-matriz dimensional de WinDemo22.Saldo' no se puede convertir en 'WinDemo22.Saldo

Publicado por Marcelo (69 intervenciones) el 29/10/2015 19:53:32
Hola,
Enfoquemonos en la función GetSaldos(). Basado en la definición de esta función dice que al ser ejecutada devuelve un resultado tipo Saldo.

Pero lo que pasa dentro de la función es algo como esto:
‘Definimos la matriz Saldos
Dim Saldos(1) as Saldo

‘Primer Variable Saldo
Dim miSaldo2 as New Saldo
miSaldo1.IdCaja = 1
miSaldo1.Saldo = 25

‘Segunda Variable Saldo
Dim miSaldo1 As New Saldo
miSaldo2.IdCaja = 2
miSaldo2.Saldo = 50

‘Insertamos las Variables de tipo Saldo en la Matriz Saldos()
Saldos(0) = miSaldo1
Saldos(1) = miSaldo2

La definición de la función dice que va a devolver como resultado un solo objeto/estructura tipo saldo. Lo que devuelves es una matriz compuesta de varios Saldos...

Una analogia es que vas a la verdulería y pides un kilo de manzanas y el dependiente dice aqui te van 2 o 3 kilos de manzanas. He ahi el conflicto…

He subrayado los cambios que he hecho a la función para que la compares y veas la diferencia…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
'Cambio: As Saldo -> As Saldo()
Public Function GetSaldos() As Saldo()
        Dim Com As New OleDbCommand("SELECT * FROM Caja", Con)
        Dim dr As OleDbDataReader
        'Este es un cambio
        Dim Saldos() As Saldo
        Try
            dr = Com.ExecuteReader()
            Dim Cont As Integer = 0
            Dim SaldoCaja As Saldo
            While dr.Read
	        'Nueva linea
                Redim Preserve Saldos(Cont) ‘Para agregar un espacio mas a la matriz para albergar el nuevo valor.
                SaldoCaja.IdCaja = CType(dr.GetValue(0), Integer)
                SaldoCaja.Saldo = CType(dr.GetValue(2), Double)
                Saldos(Cont) = SaldoCaja
                Cont += 1
            End While
            dr.Close()
            Return Saldos
        Catch ex As Exception
            MessageBox.Show("Error al Cargar los Saldos")
            Return Nothing
        End Try
End Function

Espero que te sea de utilidad. Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar