none
TRY - IMPEDIR CONTINUAR SI MUESTRA ERROR

    Pregunta

  • Hola buenas tardes, tengo una duda, este es mi codigo cuando hago una inserccion pero el detalle es que supongamos que en el primer try me salga un error, como hago para que el sistema se quede ahi y no continué con el siguiente try, osea nose que me cierre la ventana algo, habrá alguna opción en el cual si me sale ese error me impida continuar

            Try
                Dim lsQuery As String
                lsQuery = "insert into tblControlEmbarques ([Col_CodArticulo]
               ,[Col_Cantidad]
               ,[Col_IdUserA]
               ,[Col_IdUbicacion]
               ,[Col_IdAlmacen]
               ,[Col_Fecha]
               ,[Col_Hora]
               ,[Col_BarrasAu]
               ,[Col_NroCorP]
               ,[Col_Aut]) values (@Col_CodArticulo
               ,@Col_Cantidad
               ,@Col_IdUserA
               ,@Col_IdUbicacion
               ,@Col_IdcAlmacen
               ,@Col_Fecha
               ,@Col_Hora
               ,@Col_BarrasAu
               ,@Col_NroCorP
               ,@Col_Aut)"
                ' crear comando para insertar registro en tabla ROUTER
                Using loComando As New SqlCommand(lsQuery, ERP_CNN)
                    'añadir parametros al comando 
                    loComando.Parameters.Add(New SqlParameter("@Col_CodArticulo", txtcodigoart.Text))
                    loComando.Parameters.Add(New SqlParameter("@Col_Cantidad", sumcant))
                    loComando.Parameters.Add(New SqlParameter("@Col_IdUserA", P2_IdUserA))
                    loComando.Parameters.Add(New SqlParameter("@Col_IdUbicacion", IIf(buscaidubica.Trim() = "", DBNull.Value, buscaidubica)))
                    loComando.Parameters.Add(New SqlParameter("@Col_IdcAlmacen", buscaidalm))
                    loComando.Parameters.Add(New SqlParameter("@Col_Fecha", CDate(FechaServidor)))
                    loComando.Parameters.Add(New SqlParameter("@Col_Hora", HoraServidor))
                    loComando.Parameters.Add(New SqlParameter("@Col_BarrasAu", BarraAut))
                    loComando.Parameters.Add(New SqlParameter("@Col_NroCorP", NroCorrP))
                    loComando.Parameters.Add(New SqlParameter("@Col_Aut", P3_Otncorr))
                    loComando.ExecuteNonQuery()
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try

      'insertamos lo que esta en el grid
            Try
                Dim lsQuery As String
                lsQuery = "insert into tblcontrolembarquesdet
    select @Col_NroCorp,Col_CodArticulo,Col_Cantidad,@Col_IdUserA from tblcontrolembarquestmp
    where Col_Aut=@Col_Aut"
                ' crear comando para insertar registro en tabla ROUTER
                Using loComando As New SqlCommand(lsQuery, ERP_CNN)
                    'añadir parametros al comando 
                    loComando.Parameters.Add(New SqlParameter("@Col_NroCorP", NroCorrP))
                    loComando.Parameters.Add(New SqlParameter("@Col_IdUserA", P2_IdUserA))
                    loComando.Parameters.Add(New SqlParameter("@Col_Aut", CInt(P3_Otncorr)))
                    loComando.ExecuteNonQuery()
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try

    martes, 24 de enero de 2017 19:11

Respuestas

  • Hola:

     Entiendo que intentas ejecutar dos sentencias SQL y que ambas acciones están dentro de un estructura TRY CATCH independiente, si esto es así y lo que deseas es que al fallar la primer sentencia la segunda no se ejecute, lo que debes de hacer es eliminar el primer control CATCH de la estructura TRY y dejar que la excepción sea atrapada en el segundo, de esta manera la consulta correspondiente al guardado del DataGridView jamas se ejecutara si la primera falla.

     Tu código seria mas o menos así:

    Try
        Dim lsQuery As String
        lsQuery = "insert into tblControlEmbarques ([Col_CodArticulo]
       ,[Col_Cantidad]
       ,[Col_IdUserA]
       ,[Col_IdUbicacion]
       ,[Col_IdAlmacen]
       ,[Col_Fecha]
       ,[Col_Hora]
       ,[Col_BarrasAu]
       ,[Col_NroCorP]
       ,[Col_Aut]) values (@Col_CodArticulo
       ,@Col_Cantidad
       ,@Col_IdUserA
       ,@Col_IdUbicacion
       ,@Col_IdcAlmacen
       ,@Col_Fecha
       ,@Col_Hora
       ,@Col_BarrasAu
       ,@Col_NroCorP
       ,@Col_Aut)"
        ' crear comando para insertar registro en tabla ROUTER
        Using loComando As New SqlCommand(lsQuery, ERP_CNN)
            'añadir parametros al comando 
            loComando.Parameters.Add(New SqlParameter("@Col_CodArticulo", txtcodigoart.Text))
            loComando.Parameters.Add(New SqlParameter("@Col_Cantidad", sumcant))
            loComando.Parameters.Add(New SqlParameter("@Col_IdUserA", P2_IdUserA))
            loComando.Parameters.Add(New SqlParameter("@Col_IdUbicacion", IIf(buscaidubica.Trim() = "", DBNull.Value, buscaidubica)))
            loComando.Parameters.Add(New SqlParameter("@Col_IdcAlmacen", buscaidalm))
            loComando.Parameters.Add(New SqlParameter("@Col_Fecha", CDate(FechaServidor)))
            loComando.Parameters.Add(New SqlParameter("@Col_Hora", HoraServidor))
            loComando.Parameters.Add(New SqlParameter("@Col_BarrasAu", BarraAut))
            loComando.Parameters.Add(New SqlParameter("@Col_NroCorP", NroCorrP))
            loComando.Parameters.Add(New SqlParameter("@Col_Aut", P3_Otncorr))
            loComando.ExecuteNonQuery()
        End Using
    
        Dim lsQuery As String
        lsQuery = "insert into tblcontrolembarquesdet
    	select @Col_NroCorp,Col_CodArticulo,Col_Cantidad,@Col_IdUserA from tblcontrolembarquestmp where Col_Aut=@Col_Aut"
        ' crear comando para insertar registro en tabla ROUTER
        Using loComando As New SqlCommand(lsQuery, ERP_CNN)
            'añadir parametros al comando 
            loComando.Parameters.Add(New SqlParameter("@Col_NroCorP", NroCorrP))
            loComando.Parameters.Add(New SqlParameter("@Col_IdUserA", P2_IdUserA))
            loComando.Parameters.Add(New SqlParameter("@Col_Aut", CInt(P3_Otncorr)))
            loComando.ExecuteNonQuery()
        End Using
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
     Como veras englobe todo en un sol TRY CATCH, espero te sea de utilidad.


    Saludos desde Monterrey, Nuevo León, México!!!


    martes, 24 de enero de 2017 21:11

Todas las respuestas

  • Hola, ese try lo estas llamando desde una función, porque puedes hacer esto

     Catch ex As Exception
      MessageBox.Show(ex.Message)
      Exit Sub
     End Try

    Colocas el exit sub, o exist function.

    Saludos.

    martes, 24 de enero de 2017 19:16
  • Hola:

     Entiendo que intentas ejecutar dos sentencias SQL y que ambas acciones están dentro de un estructura TRY CATCH independiente, si esto es así y lo que deseas es que al fallar la primer sentencia la segunda no se ejecute, lo que debes de hacer es eliminar el primer control CATCH de la estructura TRY y dejar que la excepción sea atrapada en el segundo, de esta manera la consulta correspondiente al guardado del DataGridView jamas se ejecutara si la primera falla.

     Tu código seria mas o menos así:

    Try
        Dim lsQuery As String
        lsQuery = "insert into tblControlEmbarques ([Col_CodArticulo]
       ,[Col_Cantidad]
       ,[Col_IdUserA]
       ,[Col_IdUbicacion]
       ,[Col_IdAlmacen]
       ,[Col_Fecha]
       ,[Col_Hora]
       ,[Col_BarrasAu]
       ,[Col_NroCorP]
       ,[Col_Aut]) values (@Col_CodArticulo
       ,@Col_Cantidad
       ,@Col_IdUserA
       ,@Col_IdUbicacion
       ,@Col_IdcAlmacen
       ,@Col_Fecha
       ,@Col_Hora
       ,@Col_BarrasAu
       ,@Col_NroCorP
       ,@Col_Aut)"
        ' crear comando para insertar registro en tabla ROUTER
        Using loComando As New SqlCommand(lsQuery, ERP_CNN)
            'añadir parametros al comando 
            loComando.Parameters.Add(New SqlParameter("@Col_CodArticulo", txtcodigoart.Text))
            loComando.Parameters.Add(New SqlParameter("@Col_Cantidad", sumcant))
            loComando.Parameters.Add(New SqlParameter("@Col_IdUserA", P2_IdUserA))
            loComando.Parameters.Add(New SqlParameter("@Col_IdUbicacion", IIf(buscaidubica.Trim() = "", DBNull.Value, buscaidubica)))
            loComando.Parameters.Add(New SqlParameter("@Col_IdcAlmacen", buscaidalm))
            loComando.Parameters.Add(New SqlParameter("@Col_Fecha", CDate(FechaServidor)))
            loComando.Parameters.Add(New SqlParameter("@Col_Hora", HoraServidor))
            loComando.Parameters.Add(New SqlParameter("@Col_BarrasAu", BarraAut))
            loComando.Parameters.Add(New SqlParameter("@Col_NroCorP", NroCorrP))
            loComando.Parameters.Add(New SqlParameter("@Col_Aut", P3_Otncorr))
            loComando.ExecuteNonQuery()
        End Using
    
        Dim lsQuery As String
        lsQuery = "insert into tblcontrolembarquesdet
    	select @Col_NroCorp,Col_CodArticulo,Col_Cantidad,@Col_IdUserA from tblcontrolembarquestmp where Col_Aut=@Col_Aut"
        ' crear comando para insertar registro en tabla ROUTER
        Using loComando As New SqlCommand(lsQuery, ERP_CNN)
            'añadir parametros al comando 
            loComando.Parameters.Add(New SqlParameter("@Col_NroCorP", NroCorrP))
            loComando.Parameters.Add(New SqlParameter("@Col_IdUserA", P2_IdUserA))
            loComando.Parameters.Add(New SqlParameter("@Col_Aut", CInt(P3_Otncorr)))
            loComando.ExecuteNonQuery()
        End Using
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
     Como veras englobe todo en un sol TRY CATCH, espero te sea de utilidad.


    Saludos desde Monterrey, Nuevo León, México!!!


    martes, 24 de enero de 2017 21:11