Jump to content
Sign in to follow this  
laboss

Erro numa Query SQL so no VB

Recommended Posts

laboss

Boas ppl estou aqui com um problema bicudo estou a inserir produtos e movimentos e queria faze ro recalculo dos stocks mas ta complicado eu criei uma query no SQL Express Magnament que é esta:

SELECT Documentos.T_ID, SUM(DocumentosMovimentos.DM_Qtd) As QtdEntradas
                                                FROM DocumentosMovimentos
                                                INNER JOIN Documentos ON (Documentos.D_ID = DocumentosMovimentos.D_ID)
                                                WHERE Documentos.T_ID = 2 AND DocumentosMovimentos.P_ID = 1
                                                GROUP BY Documentos.T_ID

esta é executada em 0segundos ou seja e rapida a executar, ja no VB.net criei este codigo:

Public Shared Function Recalcular_Stocks(ByVal IDPorduto As Integer)
            Dim Ligacao As New SqlConnection(ConnectionString)
            Dim Comando As New SqlCommand

            Try
                Dim TotalEntradas As Decimal
                Dim TotalSaidas As Decimal

                Dim TotalEntradasDR As String

                Ligacao.Open()


                Dim SQL As String = <a><![CDATA[sELECT SUM(DocumentosMovimentos.DM_Qtd) As QtdEntradas, Documentos.T_ID
                                                FROM DocumentosMovimentos
                                                INNER JOIN Documentos ON (Documentos.D_ID = DocumentosMovimentos.D_ID)
                                                WHERE Documentos.T_ID = 2 AND DocumentosMovimentos.P_ID = 1
                                                GROUP BY Documentos.T_ID
                                                ]]></a>.Value

                With Comando
                    .CommandText = SQL
                    .Connection = Ligacao
                End With
                TotalEntradasDR = Comando.ExecuteScalar



                Return True

            Catch ex As Exception
                MsgBox(ex.ToString)
                Return False
            Finally
                Ligacao.Close()
                Ligacao.Dispose()
                Comando.Dispose()
            End Try
        End Function

Esta comando da sempre timeout a executar nao estou a entender pk! Alguém me poderia ajudar?

Cumprimentos

Share this post


Link to post
Share on other sites
Lfscoutinho

Boas,

Eu não sou de VB, mas a tua variável SQL não deveria ser só... !? :

Dim SQL As String = "SELECT SUM(DocumentosMovimentos.DM_Qtd) As QtdEntradas, Documentos.T_ID
                                                        FROM DocumentosMovimentos
                                                INNER JOIN Documentos ON (Documentos.D_ID = DocumentosMovimentos.D_ID)
                                                WHERE Documentos.T_ID = 2 AND DocumentosMovimentos.P_ID = 1
                                                GROUP BY Documentos.T_ID"

Share this post


Link to post
Share on other sites
Caça

E também estás a fazer um scalar a dois campos


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
laboss

Assim como esta funciona supostamente bem, mas ja tentei assim:

             Dim SQL As String = "SELECT SUM(DocumentosMovimentos.DM_Qtd) As QtdEntradas, Documentos.T_ID FROM DocumentosMovimentos INNER JOIN Documentos ON (Documentos.D_ID = DocumentosMovimentos.D_ID) WHERE Documentos.T_ID = 2 And DocumentosMovimentos.P_ID = 1 GROUP BY Documentos.T_ID"


                With Comando
                    .CommandText = SQL
                    .Connection = Ligacao
                End With
                TotalEntradasDR = Comando.ExecuteReader

mas o resultado e o mesmo, nao consigo entender porque que ele da timeout a executar o comando :|

-- Andei a debugar isto e meti a funcion num botao e funciona 5 estrelas se meter no procedimento que grava os movimentos fica lento o procedimento ta assim:

    Sub Gravar_Movimentos()

        Dim ComandoGravaLinhas As New SqlCommand

        For Each linha As DataGridViewRow In Me.dgvMovimentos.Rows

            If Not linha.IsNewRow Then
                Dim IDLinha As Integer = linha.Index

                With ComandoGravaLinhas
                    .Connection = LigacaoGuardar
                    .Transaction = TransaccaoGravarTudo
                    .CommandText = "sp_CriarDocumentoMovimentos"
                    .CommandType = CommandType.StoredProcedure

                    .Parameters.Clear()


                    .Parameters.Add(New SqlParameter("@DM_ID", SqlDbType.BigInt)).Value = ProStocks.Util.RetornaValorBD(CType(linha.Cells(11).Value, Integer), "", "Integer")

                    .Parameters.Add(New SqlParameter("@D_ID", SqlDbType.BigInt)).Value = ID
                    .Parameters.Add(New SqlParameter("@P_ID", SqlDbType.BigInt)).Value = CType(linha.Cells(8).Value, Integer)

                    .Parameters.Add(New SqlParameter("@DM_IVA", SqlDbType.Decimal)).Value = CType(linha.Cells(2).Value, Decimal)
                    .Parameters.Add(New SqlParameter("@DM_PrecoUnit", SqlDbType.Decimal)).Value = CType(linha.Cells(3).Value, Decimal)
                    .Parameters.Add(New SqlParameter("@DM_Desconto", SqlDbType.Decimal)).Value = CType(linha.Cells(4).Value, Decimal)
                    .Parameters.Add(New SqlParameter("@DM_Qtd", SqlDbType.Float)).Value = CType(linha.Cells(6).Value, Decimal)

                    .Parameters.Add("@IdentidadeDoRegisto", SqlDbType.BigInt).Direction = ParameterDirection.Output

                    .ExecuteNonQuery()

                    linha.Cells(11).Value = CInt(ComandoGravaLinhas.Parameters("@IdentidadeDoRegisto").Value)
                End With

                '
                ' Actualizar Stocks
                If String.IsNullOrEmpty(linha.Cells(11).Value) Then
                    ProStocks.Documentos.ActualizarStocks(CType(linha.Cells(8).Value, Integer), ID_Tipo_Documento, CType(linha.Cells(6).Value, Decimal))
                Else
                    ProStocks.Documentos.Recalcular_Stocks(CType(linha.Cells(8).Value, Integer))
                End If

            End If
        Next
        ComandoGravaLinhas = Nothing

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.