Visual Basic.NET - Traer valor de campo SALDO a VBASIC desde tabla de SQL SERVER

   
Vista:
Imágen de perfil de nano

Traer valor de campo SALDO a VBASIC desde tabla de SQL SERVER

Publicado por nano blacksense@ono.com (20 intervenciones) el 08/08/2015 21:25:47
Muy buenas a todos!!!
Me acaba de surgir mi primera duda con un proyecto simple que consiste en generar una aplicación que contabilice los gastos generales de una casa en estos tiempos de crisis.
Estoy usando Visual Basic con tablas de SQL SERVER y me he quedado atascado en un campo SALDO que contiene mi tabla REGISTROS que necesito que acumule el valor anterior y lo modifique según el registro siguiente de ingreso o gasto.
Para traerme el valor de ese campo había pensado en un select:
select saldo from registros where id_registro =(select max(id_registro) from registros)
Con este select consigo el último valor del campo para poder sumar o restar el siguiente registro. El problema es que no se ni como ni donde ponerlo!!!

Os adjunto mi código generado hasta ahora aunque esté en fase muy beta así como un par de imágenes del form y de la tabla de SQL.
AVISO: Hay varias líneas comentadas de pruebas que he ido realizando y que prefiero dejar por si me llegara la inspiración.
Muchas gracias de antemano por el tiempo que os tomais en ayudar a los que no sabemos pero queremos saber.
Un saludo,
Nano.

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
Public Class Form1
    Dim vista As New misdatosDataContext
    Dim valorsaldo As Double
    'Dim saldofinal = "select saldo from registros where id_registro =(select max(id_registro) from registros)"
 
    Private Sub datos()
        Dim datos = From actuales In vista.registros
        cuadricula.datasource = datos
    End Sub
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' TextBoxFecha.Focus()
        'valorsaldo = TextBoxSaldo.Text
        ComboBox1.Text = ""
        ComboBox2.Text = ""
        'TODO: esta línea de código carga datos en la tabla 'ContaHomeDataSet5.registros' Puede moverla o quitarla según sea necesario.
        Me.RegistrosTableAdapter.Fill(Me.ContaHomeDataSet5.registros)
        'TODO: esta línea de código carga datos en la tabla 'ContaHomeDataSet3.subcategorias' Puede moverla o quitarla según sea necesario.
        Me.SubcategoriasTableAdapter.Fill(Me.ContaHomeDataSet3.subcategorias)
        'TODO: esta línea de código carga datos en la tabla 'ContaHomeDataSet2.categorias' Puede moverla o quitarla según sea necesario.
        Me.CategoriasTableAdapter.Fill(Me.ContaHomeDataSet2.categorias)
        'TODO: esta línea de código carga datos en la tabla 'ContaHomeDataSet1.terceros' Puede moverla o quitarla según sea necesario.
        Me.TercerosTableAdapter.Fill(Me.ContaHomeDataSet1.terceros)
        'TODO: esta línea de código carga datos en la tabla 'ContaHomeDataSet.operaciones' Puede moverla o quitarla según sea necesario.
        Me.OperacionesTableAdapter.Fill(Me.ContaHomeDataSet.operaciones)
 
        TextBoxId.Text = 0
        TextBoxId.Enabled = False
 
        'saldofinal = TextBoxSaldo.Text
        'TextBoxSaldo.Text = saldofinal
 
    End Sub
 
    Private Sub RadioButton1_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton1.CheckedChanged
        TextBoxIngreso.Text = TextBoxImporte.Text
        TextBoxGasto.Text = 0
        valorsaldo = valorsaldo + (Val(TextBoxIngreso.Text) - TextBoxGasto.Text)
        TextBoxSaldo.Text = valorsaldo
    End Sub
 
    Private Sub RadioButton2_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton2.CheckedChanged
        TextBoxGasto.Text = TextBoxImporte.Text
        TextBoxIngreso.Text = 0
        valorsaldo = valorsaldo + (Val(TextBoxIngreso.Text) - TextBoxGasto.Text)
        TextBoxSaldo.Text = valorsaldo
    End Sub
 
    Private Sub ButtonGrabar_Click(sender As Object, e As EventArgs) Handles ButtonGrabar.Click
 
        Dim respuesta = MsgBox("Desea agregar el nuevo registro?", MsgBoxStyle.YesNo)
        If (respuesta = MsgBoxResult.Yes) Then
            Try
                Dim nuevoregistro As New registros With {.id_registro = TextBoxId.Text, .fecha_valor = TextBoxFecha.Text, .importe = TextBoxImporte.Text, .tipo_operacion = ComboBox1.Text, .descripcion_tercero = ComboBox2.Text, .nota = TextBoxObservacion.Text, .descripcion_categoria = ComboBox3.Text, .descripcion_subcategoria = ComboBox4.Text, .ingreso = TextBoxIngreso.Text, .gasto = TextBoxGasto.Text, .saldo = TextBoxSaldo.Text}
                vista.registros.InsertOnSubmit(nuevoregistro)
                vista.SubmitChanges()
                datos()
            Catch ex As Exception
                MsgBox("Error en la grabación del registro")
            End Try
        Else
            MsgBox("Registro de ContaHome grabado correctamente", MsgBoxStyle.Information)
        End If
        TextBoxFecha.Text = ""
        TextBoxImporte.Text = ""
        ComboBox1.Text = ""
        ComboBox2.Text = ""
        TextBoxObservacion.Text = ""
        ComboBox3.Text = ""
        ComboBox4.Text = ""
        TextBoxIngreso.Text = ""
        TextBoxGasto.Text = ""
 
    End Sub
 
    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles ButtonVerRegistros.Click
        datos()
    End Sub
 
End Class

contahome_error1
contahome_error2
contahome_error3
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
Imágen de perfil de Wilfredo Patricio Castillo

Traer valor de campo SALDO a VBASIC desde tabla de SQL SERVER

Es es muy simple, además si así lo quieres, no tienes que hacerlo tan extensa tu consulta, solo sería algo como esto:
select top(1) Saldo from Registros order by Id_registro desc


Dim Cmd as new SqlCommand

Cmd.CommandText="select top(1) Saldo from Registros order by Id_registro desc"
Cmd.CommandType=Text
Cmd.Connextion=TuConexion aquí
dim TuSaldo as decimal=Convert.ToDecimal(Cmd.ExecuteScalar)

TuSaldo lo puedes poner a tu textbox donde lo necesites.

Espero te de una luz
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
Imágen de perfil de nano

Traer valor de campo SALDO a VBASIC desde tabla de SQL SERVER

Publicado por nano (20 intervenciones) el 09/08/2015 22:34:21
Muchas gracias Wilfredo por la respuesta!!
Pero lo he probado y me aparece un error como que la variable Cmd no está declarada...

Te adjunto una imagen porque es posible que sea un problema de las versiones de Visual Studio.
Yo actualmente estoy trabajando con 2013 Ultimate...
Un saludo,
Nano.

contahome_errorsaldo
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
Imágen de perfil de Wilfredo Patricio Castillo

Traer valor de campo SALDO a VBASIC desde tabla de SQL SERVER

Por lo visto no tienes ni idea de programación con .NET

Bueno, en principio no veo donde lo estés declarando, pero lo que deberías hacer, al menos es ponerlo en el evento Load de tu formulario.

Al inicio de todo deberías hacer un

Imports System.Data.Sqlclient


y en el evento load poner lo que te dije, pero asegúrate de corregir cmd.Connection y no cmd.Conexion el código debería quedar así en el evento load de tu formulario:

Dim Cmd as new SqlCommand

Cmd.CommandText="select top(1) Saldo from Registros order by Id_registro desc"
Cmd.CommandType=Text
Cmd.Connection=TuConexion aquí
dim TuSaldo as decimal=Convert.ToDecimal(Cmd.ExecuteScalar)


TextBoxSaldo.text=TuSaldo.ToString


Yo no te dije que pusieras textboxsaldo.text en el commandtype, el código que te he pasado, es solo para que pongas tu cadena de conexion todo lo demas debe quedar tal cual.

Además sería bueno que leas y no solo copies y pegues a ciegas.


Saludos cordiales
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-2
Comentar
Imágen de perfil de nano

Traer valor de campo SALDO a VBASIC desde tabla de SQL SERVER

Publicado por nano (20 intervenciones) el 11/08/2015 19:04:51
Encima de no solucionar nada de nada te permites comentarios y juicios que nadie te ha concedido.
Limitate a responder las dudas y las percepciones o jucios personales de como gestionamos las respuestas o del nivel que tengamos cada uno en programación las puedes omitir, pues no son de tu incumbencia...
Y ya puestos te muestro como sería la solución correcta...

Dim cnn As New SqlConnection("Data Source=NANO-HPDV6\SQLEXPRESS;Initial Catalog=ContaHome;Integrated Security=True")
Dim sql As String = "select top(1) Saldo from Registros order by Id_registro desc"
Dim cmd As New SqlCommand(sql, cnn)
cnn.Open()
Dim saldo As Object = cmd.ExecuteScalar
cnn.Close()
TextBoxSaldo.Text = saldo


Has visto como se pueden publicar las cosas con sencillez, humildad y eduacación??
Espero no volver a coincidir.
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
Imágen de perfil de Wilfredo Patricio Castillo

Traer valor de campo SALDO a VBASIC desde tabla de SQL SERVER

Publicado por Wilfredo Patricio Castillo (340 intervenciones) el 12/08/2015 00:12:15
La verdad no sé porqué te ofuscas tanto, cuando dije que creo que no tenías idea de programación en .NET, no lo dije con la intención de ofenderte, sino que dije que por lo visto no tenías idea de programación en .NET, porque justamente, si sabías de programación en .NET, era obvio que deberías saber que había que declarar una cadena de conexión, es justamente por eso especifiqué "aquí tu cadena de conexión".

Si hasta la consulta que te puse lo estás poniendo la manera correcta que dices de como debe de ser, justamente porque esa es la manera.

Ahora:

En tu Dim Saldo, como verás estás especificando un Object, que no es tan correcto como crees, hay que castearlo a un decimal, ya que asumí que tu Saldo en algún momento tendrá cifras decimales por consiguiente tendrás que casterar el object a decimal, es por ello que lo declaré a decimal e hice la conversión a decimal, porque el ExecuteScalar te devuelve un tipo object.

Y fue una sugerencia que leas no te ofendí o es ofender sugerirte que leas?, si a mí alguien me dice deberías leer tal cosa para tal caso, yo agradecería porque me están dando una salida mas, para futuros problemas.


Pero si sugerirte que leas es ofensa para tí pues te ofrezco disculpas y en todo caso talvez te sea mejor decir nunca leas, no sé desde que punto de vista lo tomes.

En fín.

Saludos cordiales.
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
Imágen de perfil de nano

Traer valor de campo SALDO a VBASIC desde tabla de SQL SERVER

Publicado por nano (20 intervenciones) el 12/08/2015 09:26:22
Olvidalo...
Creo que hay muchas maneras de sugerir, y no me gusta que se me prejuzgue dando por hecho que me limito a copiar y pegar sin saber que se hace, cuando no sabes el tiempo y la dedicación que invierto en hacer estos proyectos, entenderlos y aplicarlos pues precisamente los hago de forma autodidacta con la finalidad de aprender.
Con esto damos el asunto por zanjado.
Nano.
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