Visual Basic.NET - problema en un proyecto de visualbasic .net de gestion

 
Vista:
sin imagen de perfil
Val: 3
Ha aumentado su posición en 20 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

problema en un proyecto de visualbasic .net de gestion

Publicado por jose angel (3 intervenciones) el 13/04/2020 17:20:22
De antemano, agradecer a quien se moleste en leer mi problema y gratitud infinita si ademas me resuelve el mismo.
El problema es: proyecto de visual basic .net de gestion de facturacion,almacen,contabilidad etc. Estoy a punto de finalizarlo y de pronto y despues de hacer muchos formularios similares al del problema, desde hace unos dias, el proyecto se comporta de una forma extraña, paso a decribirlo.
El programa consiste en leer una tabla, recorrer un recordset o como se llame en .net, y por cada registro leido hacer un update de ese mismo registro leido. He hecho muchos similares y sin problema, desde hace una semana, no hace el update y da error de que no ejecuta la sentencia SQL de UPDATE. Ademas y segun parece no es cuestion de este programa y de esta tabla, he hecho otro y hace lo mismo, parece como si sqlserver o .net, tuviesen una variable que desde entonces al recorrer ese contenedor o recordset bloquea los registros.
Ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
dim cmd as new sqlcommand
dim dr as sqldatareader
dim SQL as string = ""
 
 
SQL= "Select * from articulos"
 
cmd = New SqlCommand(SQL, conexion)
dr=cmd.ExecuteReader
while dr.Read()
 
       SQL="Update articulos set nombre='boligrafo bic' where codigo=" & dr("codigo")
       ejecutar la sql mediante una funcion que tengo en otro trozo de codigo.
 
end while
 
cmd=nothing
dr=nothing


Este trozo de codigo no es el real pero es una muestra sencilla de lo que pasa ahora.
Pruebas que hice para averiguar que es lo que pasa; entre otras muchas una muy clara:
paro el programa en la sql, la copio, la llevo a sqlserver, la ejecuto y me queda colgada. Aparentemente es porque esta pillado ese articulo en el recorrido del recordset.
Despido el proyecto, ejecuto la sql en sqlserver directamente y la ejecuta de forma correcta.
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 Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

problema en un proyecto de visualbasic .net de gestion

Publicado por Phil Rob (1553 intervenciones) el 13/04/2020 21:33:36
Hola,

Dices “…paro el programa en la sql, la copio, la llevo a sqlserver … “. Comprendo que ejecutas el programa en sistemas SQL diferentes.
En este caso, debes verificar la ConnectionString. También tienes que verificar la librería que utilizas (SQLClient, MySql, …).

Dices “ … Este trozo de codigo no es el real pero es una muestra sencilla de lo que pasa ahora.”. Tiens que envias el código real para que comprendo mejor.

Saludos
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
Val: 3
Ha aumentado su posición en 20 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

problema en un proyecto de visualbasic .net de gestion

Publicado por jose angel (3 intervenciones) el 14/04/2020 08:21:00
Gracias por empezar a estudiar el problema que tengo.

Voy a tratar de escribir un fiel reflejo del problema.

En el proyecto tengo un modulo en el que estan todas las funciones standar que tengo en el proyecto, de las cuales dos son las que pongo a continuacion.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Module funcionesdb
      public conn as new SqlConnection("Data Source=DESKTOP-0UNOTQN\SQLSERVER;Database=Gestion;User Id=sa;Password=sasa; MultipleActiveResultSets=True")
      dim cmd5 as new SqlCommand
      dim dr5 as SqlDataReader
 
      Public Sub Conectarse()
            Try
                   conn.Open()
            Catch ex As Exception
                   msgbox("Imposible conectarse a la B.D.")
            End Try
      end sub
-----------------------------------------------------------------------------------------
      Public Function EjecutarSQL(byval sql as string) as boolean
           Try
                   cmd5=New SqlCommand(sql, conn)
                   dr5=cmd5.executeNomQuery()
                   EjecutarSQL=true
           Catch As Exception
                   EjecutarSQL = False
                   msgbox("No se pudo ejecutar la sentencia:" & sql)
           End Try
       End Function
End Module

Formulario que ejecuta la transaccion que tiene el problema descrito(nombre=frmHerramientas)

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
Imports System.Data
Imports System.Data.SqlClient
Imports System.IO
Imports.System.Data.OleDb
 
Public Class frmHerramientas
dim cmd as New SqlCommand
dim dr as SqlDataReader
      Private Sub frmHerramientas_Load(sender as Object, e as EventArgs) Handles Me.Load
             conectarse()
      End sub
      Private Sub Button1_Click(sender as Object, e as EventArgs) Handles Button1.Click
           Dim SQL as string = ""
           SQL="Select * from articulos"
           cmd=new SqlCommand(SQL, conn)
           dr=cmd.ExecuteReader
           while dr.Read()
                    SQL="Update articulos set nombre='boligrafo bic' where codigo=" & dr("codigo")
                    if ejecutarsql(SQL) = false then
                          msgbox("No se ha podido ejecutar la sentencia SQL:" & SQL)
                   end if
           end while
           cmd=nothing
           dr=nothing
           conn.close
           me.close
End Class

El problema no es que no conecte con la B.D. , ni que funcione mal la conexion, pues esta funcionando en decenas de formularios infinitamente mas complejos que esto que es sencillisimo. El problema esta centrado en que se recorre el recordset , queda pillado el registro, la tabla, la conexion o lo que sea y que hasta ahora nunca habia pasado. O la B.D. cambio alguna variable si esta existe o algo raro que no acierto a entender.
Gracias por vuestra atencion al problema.
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 Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

problema en un proyecto de visualbasic .net de gestion

Publicado por Phil Rob (1553 intervenciones) el 14/04/2020 09:22:10
Hola,

Si tienes estos codigos en module.vb y form.vb, envias en RAR o ZIP.
Si no, en la tarde, testaré de poner tu codigo en VB y compilar para comprender el problema.

Hasta pronto
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 Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

problema en un proyecto de visualbasic .net de gestion

Publicado por Phil Rob (1553 intervenciones) el 14/04/2020 12:54:17
Hola,

He escrito tu código en Visual Studio.

El código que has enviado no es real por que el compilador da errores. Lo he corregidos.

Gracias para testar el module escrito como esta :

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
Imports System.Data.SqlClient
Module funcionesdb
 
    Public conn As New SqlConnection("Data Source=DESKTOP-0UNOTQN\SQLSERVER;Database=Gestion;User Id=sa;Password=sasa; MultipleActiveResultSets=True")
    Dim cmd5 As New SqlCommand
    Dim dr5 As SqlDataReader
 
    Public Sub Conectarse()
        Try
            conn.Open()
        Catch ex As Exception
            MsgBox("Imposible conectarse a la B.D.")
        End Try
    End Sub
 
 
    Public Function EjecutarSQL(ByVal sql As String) As Boolean
        Try
            cmd5 = New SqlCommand(sql, conn)
            ' !!!!!!!!  dr5 = cmd5.ExecuteNonQuery()  ' el comando "NonQuery" no da resultado, no es un Query
            cmd5.ExecuteNonQuery()
            Return True
        Catch ' !!!!!!!!!!! As Exception
            Return False
            MsgBox("No se pudo ejecutar la sentencia:" & sql)
        End Try
    End Function
 
End Module

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