problemas com insert into [asp.net vb.net, sqlserver 2000]

alfinete

Power Member
__________________________________________________
ficheiro pedidos.aspx
---------------------------------------------------------
Código:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Pedidos.aspx.vb" Inherits="Pedidos" EnableSessionState="True" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
    <!-- Chama o ficheiro do pedidos.css   -->       
      <link rel="STYLESHEET" type="text/css" href="Pedidos.css" />
</head>

    <script type="text/javascript">
    /*função que so deixa escrever digitos 
      function CheckContent(evt){
        var charCode = (evt.which) ? evt.which : event.keyCode;
        return (charCode>=48 && charCode<=57 && charcode=127);
      }*/
        
     /* 
      function isNumber(form, field)
      {
        var value=form.elements[field].value;
        value=parseInt(value);
        if (!isNaN(value)){
          alert("é um número");
          //fazer kker coisa
        }
        
        else{
          alert("não é um número");
          //fazer kker coisa
        }*/
        
  </script>
  
<body class="homeb">
    <form id="form1" runat="server">
    
    <div class="titulo">
    Pedidos 
   </div>       
   
   <hr class="linha" />

        
       
        <asp:DropDownList ID="DDL_Tipo_Pedido" runat="server" AutoPostBack="True" 
             DataSourceID="SqlDataSource_tipo_produtos"
            DataTextField="Nome" DataValueField="Id">
        </asp:DropDownList>
        
        <asp:SqlDataSource ID="SqlDataSource_tipo_produtos" runat="server"
            ConnectionString="<%$ ConnectionStrings:RequisicoesConnectionString %>"
            SelectCommand="SELECT * FROM [TabProdutoTipo] WHERE ([IdCategoria] IS NULL)">
        </asp:SqlDataSource>
        
        <asp:SqlDataSource ID="SqlDataSourceProdutos" runat="server" 
            ConnectionString="<%$ ConnectionStrings:RequisicoesConnectionString %>"
            SelectCommand="SELECT * FROM [TabProduto] WHERE ([Idtipo] = @Idtipo)">
            <SelectParameters>
                <asp:ControlParameter ControlID="DDL_Tipo_Pedido" Name="Idtipo" PropertyName="SelectedValue"
                    Type="Int32" />
            </SelectParameters>
        </asp:SqlDataSource>
        <br />
        <br />
        
        
        
        
        
        <asp:GridView DataKeyNames="Id" ID="GridView_pedidos" runat="server" BackColor="White" BorderColor="#999999"
            BorderStyle="None" BorderWidth="1px" CellPadding="3" GridLines="Vertical" HorizontalAlign="Center" 
            CaptionAlign="Right" OnRowCommand="GridView_pedidos_RowCommand" 
            DataSourceID="SqlDataSourceProdutos" Visible="False" AllowPaging="True" AllowSorting="True" 
            AutoGenerateColumns="False">
           

            <FooterStyle BackColor="#CCCCCC" ForeColor="Black" />
            <EmptyDataRowStyle HorizontalAlign="Center" />
             <Columns >
                <asp:TemplateField HeaderText="Quantidade">
                    <ItemTemplate>
                    
                      <asp:HiddenField ID="auxHiddenArgument" runat="server" />
                        <asp:TextBox ID="Txt_Quantidade"  runat="server" Width="79px"></asp:TextBox>
                       
                        <asp:Button ID="Btn_pedir" runat="server" Font-Bold="True" Font-Size="Small" Text="Pedir" 
                       CommandName="BotaoPedir" CausesValidation="False" UseSubmitBehavior="False"
                     />
                       
                    </ItemTemplate>
                    <HeaderStyle HorizontalAlign="Center" />
                </asp:TemplateField>
                 <asp:BoundField DataField="Id" HeaderText="Codigo" ReadOnly="True" SortExpression="Id" />
                 <asp:BoundField DataField="Idtipo" HeaderText="Codigo Tipo" SortExpression="Idtipo" Visible="False" />
                 <asp:BoundField DataField="Nome" HeaderText="Nome Produto" SortExpression="Nome" />
                 <asp:BoundField DataField="Stock" HeaderText="Stock" SortExpression="Stock" />
                 <asp:BoundField DataField="Descricao" HeaderText="Descrição" SortExpression="Descricao" />
             
            </Columns>
            <PagerTemplate>
                <asp:TextBox ID="TextBox2" runat="server" Width="82px"></asp:TextBox>
            </PagerTemplate>
            <RowStyle BackColor="#EEEEEE" ForeColor="Black" />
            <EmptyDataTemplate>
                <asp:TextBox ID="Txt_quantidade" runat="server" Width="98px"></asp:TextBox>
            </EmptyDataTemplate>
            <SelectedRowStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" />
            <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
            <HeaderStyle BackColor="#000084" Font-Bold="True" ForeColor="White" />
            <AlternatingRowStyle BackColor="Gainsboro" />
            
           
        </asp:GridView>
        <asp:Label ID="Lbl_mensagem" runat="server" Font-Bold="True" Font-Size="Medium" Visible="False"></asp:Label><br />
        <br />
        <asp:Label ID="Label2" runat="server" Font-Bold="True" Font-Size="Medium" Visible="False"></asp:Label><br />
        <br />
        <asp:Label ID="Label3" runat="server" Font-Bold="True" Font-Size="Medium" Visible="False"></asp:Label><br />
        <br />
        <asp:Label ID="Label4" runat="server" Font-Bold="True" Font-Size="Medium" Visible="False"></asp:Label><br />
        <br />
        <asp:Label ID="Label5" runat="server" Font-Bold="True" Font-Size="Medium" Visible="False"></asp:Label></form>
</body>
</html>


___________________________________________________
ficheiro pedidos.aspx.vb
----------------------------------------------------------

Código:
Imports System.Data
Imports System.Data.SqlClient
Imports trata_sql

Partial Class Pedidos



    Inherits System.Web.UI.Page

    '************************************************************
    '  variaveis da grid view e da table_Exist
    '***********************************************************

    ' cria a variavel strsql que vai chamar a a pesquiza sql
    Dim ligacao, strsql As String
    ' cria data adapter
    Dim sda, sda_ped_exist As SqlDataAdapter
    ' cria dataset
    Dim ds, ds_ped_exist As DataSet

    Dim num As Integer

    ' Dim inserir_sql_stock, inserir_sql_stock_pendente, inserir_sql_stock_pendente_req As String

    '************************************************************
    '  variaveis das pesquizas 
    '***********************************************************

    ' variaveis que criam a string da respectiva pesquiza
    'Dim ligacao_pedido, ligacao_id_util, ligacao_id_prod As String
    ' variaveis pertencentes ao pedido exstente nos requizitados
    'Dim Select_ped_exist, ligacao_ped_exist As String

    ' variavel que vai guardar o stock do produto existente na bd resultante da pesquiza
    Dim stock_prod As Integer

    'guarda o id de utilizador pesquizado
    Dim id_util As Integer

    ' 'guarda o id do produto pesquizado
    Dim id_prod As Integer

    ' guarda o valor inserido na caixa de texto da grid 
    Dim pedido_posto As Integer

    ' guarda o stock que fica automaticamente pendente quando se efectua o pedido
    Dim stock_pendente As Integer

    ' cria a table referente ao ds_exist_prod 
    Dim table_exist As DataTable
    ' conta as linhas da table_exists referentes  Select_ped_exist
    ' caso seja cont=1 não existe nenhuma linha com esse registo
    ' caso contrario existe
    Dim cont As Integer


    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load


        ''    '*****************************************************
        ''    'botão da grid view
        ''    '*****************************************************


        'If Not IsPostBack Then
        Dim rnd As New Random
        Dim auxRnd As Integer
        Dim bt As Button
        Dim auxHiddenArgument As HiddenField


        For Each row As GridViewRow In GridView_pedidos.Rows
            auxRnd = rnd.Next()
            bt = CType(row.FindControl("Btn_pedir"), Button)
            auxHiddenArgument = CType(row.FindControl("auxHiddenArgument"), HiddenField)

            bt.CommandArgument = auxRnd
            auxHiddenArgument.Value = auxRnd
        Next
        ' End If


    End Sub





    Protected Sub GridView_pedidos_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView_pedidos.RowCommand

        'variaveis que guardam valores de sessão de utilizador

        Dim utilizador As String = Session("Login") ' guarda o nome de utilizador em sessão
        Dim dia As String = Session("HorarioLogin")  ' guarda o dia em que o utilizador se logou
        '  Dim num_linhas As Integer = Session("NumLinhasReq")

        Dim Data_Hora As DateTime = DateTime.Now ' guarda o tempo e a hora se sistema actual


        If (e.CommandName = "BotaoPedir") Then
            Dim txt As String = ""
            Dim auxHiddenArgument As String = ""
            Dim nome_produto As String


            ' Dim id_prod As Integer
            ' Dim stock_prod As Integer

            For Each row As GridViewRow In GridView_pedidos.Rows
                auxHiddenArgument = CType(row.FindControl("auxHiddenArgument"), HiddenField).Value
                If (e.CommandArgument = auxHiddenArgument) Then 'encontrou o botão k fez o pedido
                    txt = CType(row.FindControl("Txt_Quantidade"), TextBox).Text
                    'capta o nome do produto do botão clicado
                    nome_produto = row.Cells(3).Text
                    stock_prod = Val(row.Cells(4).Text)
                    id_prod = Val(row.Cells(1).Text)

                    ' id_prod = GridView_pedidos.SelectedDataKey.Value

                    ' Dim chave_id As DataKey = Me.GridView_pedidos.DataKeys(1)
                    'Dim id As DictionaryEntry = chave_id.Value
                   
                    ' danos o id do utilizador
                    id_util = procura_id_utilizador(utilizador)
                 
             

                    '****************************************************************
                    '****************************************************************
                    '****************ZONA DE GRAVAÇÃO DE REGISTO ********************
                    '**************************************************************** 
                    '****************************************************************

                    pedido_posto = Val(txt)
                    stock_pendente = stock_prod - pedido_posto
                    If stock_pendente < 0 Then
                        stock_pendente = -stock_pendente
                    Else
                        stock_pendente = 0
                    End If

                    '  Me.Label2.Visible = True
                    '  Me.Label2.Text = " stk_pend - >  " & stock_pendente
                    'testa se o valor do pedido digitado na caixa de texto da grid em relação 
                    'ao id do produto dessa linha é menor que o stock desse   mesmo produto

                   
                    If stock_prod > 0 Then

                        Dim ligacao_stock As SqlConnection = New SqlConnection(str_ligacao)

                        Dim inserir_sql_stock As String = " Insert into TabPedido( " & _
                                     " IdUtilizador,IdProduto,DataHora,Quantidade,Estado) " & _
                                     " values (@IdUtilizador,@IdProduto,@DataHora,@Quantidade,@Estado)"

                        Dim comando = New SqlCommand(inserir_sql_stock, ligacao_stock)

                        '  cria as variaveis tipo sql parameter associadas aos respectivos tipos
                        Dim IdUtilizador As SqlParameter = New SqlParameter("@IdUtilizador", SqlDbType.Int)
                        Dim IdProduto As SqlParameter = New SqlParameter("@IdProduto", SqlDbType.Int)
                        Dim DataHora As SqlParameter = New SqlParameter("@DataHora", SqlDbType.DateTime)
                        Dim Quantidade As SqlParameter = New SqlParameter("@Quantidade", SqlDbType.Int)
                        '  Dim Codigo As SqlParameter = New SqlParameter("@Codigo", SqlDbType.Int)
                        Dim Estado As SqlParameter = New SqlParameter("@Estado", SqlDbType.SmallInt)

                        IdUtilizador.Value = id_util
                        IdProduto.Value = id_prod
                        DataHora.Value = Data_Hora
                        Quantidade.Value = pedido_posto - stock_pendente
                        ' Codigo = conta_linhas + 1
                        Estado.Value = 0

                        comando.Parameters.Add(IdUtilizador)
                        comando.Parameters.Add(IdProduto)
                        comando.Parameters.Add(DataHora)
                        comando.Parameters.Add(Quantidade)
                        ' comando.Parameters.Add(Codigo)
                        comando.Parameters.Add(Estado)

                        ligacao_stock.Open()

                        'retorna o número de registros afetados pela instrução SQL
                        num = comando.executenonquery

                        If num = 1 Then

                            Me.Lbl_mensagem.Visible = True
                            Me.Lbl_mensagem.Text = "Pedido feito com sucesso"

                        Else
                            Me.Lbl_mensagem.Visible = True
                            Me.Lbl_mensagem.Text = "Erro de sistema Favor contactar o Administrador "
                        End If
                        ligacao_stock.Close()

                    End If

                   


                    ''********************************************************************
                    ''   Testa pata os produtos acima de stock


                    If stock_pendente > 0 Then



                        Dim ligacao_stock_pend As SqlConnection = New SqlConnection(str_ligacao)


                        Dim inserir_sql_stock As String = " Insert into TabPedido( " & _
                                     " IdUtilizador,IdProduto,DataHora,Quantidade,Estado) " & _
                                     " values (@IdUtil,@IdProd,@DataHor,@Quant,@Estad)"

                        Dim comando = New SqlCommand(inserir_sql_stock, ligacao_stock_pend)

                        'cria as variaveis tipo sql parameter associadas aos respectivos tipos
                        Dim IdUtil As SqlParameter = New SqlParameter("@IdUtil", SqlDbType.Int)
                        Dim IdProd As SqlParameter = New SqlParameter("@IdProd", SqlDbType.Int)
                        Dim DataHor As SqlParameter = New SqlParameter("@DataHor", SqlDbType.DateTime)
                        Dim Quant As SqlParameter = New SqlParameter("@Quant", SqlDbType.Int)
                        'Dim Codigo As SqlParameter = New SqlParameter("@Codigo", SqlDbType.Int)
                        Dim Estad As SqlParameter = New SqlParameter("@Estad", SqlDbType.SmallInt)

                        IdUtil.Value = id_util
                        IdProd.Value = id_prod
                        DataHor.Value = Data_Hora
                        Quant.Value = stock_pendente
                        Estad.Value = 1
                        '  insere os valores na bd

                        comando.Parameters.Add(IdUtil)
                        comando.Parameters.Add(IdProd)
                        comando.Parameters.Add(DataHor)
                        comando.Parameters.Add(Quant)
                        comando.Parameters.Add(Estad)

                        ligacao_stock_pend.Open()
                        ' retorna o número de registros afetados pela instrução SQL
                        num = comando.executenonquery

                        If num = 1 Then

                            Me.Lbl_mensagem.Visible = True
                            Me.Lbl_mensagem.Text = "Pedido feito com sucesso"

                        Else
                            Me.Lbl_mensagem.Visible = True
                            Me.Lbl_mensagem.Text = "Erro de sistema Favor contactar o Administrador "
                        End If
                        ligacao_stock_pend.Close()

                    End If

                  


                    ''*************************** não mexer *****************************************

                    Exit For 'forçar saida do ciclo for each da greed view
                End If 'fim do if (If (e.CommandArgument = auxHiddenArgument))
            Next ' fim do ciclo (  For Each row As GridViewRow In GridView_pedidos.Rows)
        End If ' fim do if (  If (e.CommandName = "BotaoPedir"))


    End Sub


    


    Protected Sub DDL_Tipo_Pedido_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DDL_Tipo_Pedido.SelectedIndexChanged
        Me.GridView_pedidos.Visible = True
    End Sub

#Region "funções"

    ' procura o id de utilizador referente ao utilizador que se encontra em sessão
    Function procura_id_utilizador(ByVal util As String) As Integer

        Dim id_util As Integer

        Dim ligacao_id_util As String = str_ligacao

        Dim Select_id_util As String = " SELECT Id FROM  TabUtilizador " & _
                                       " where TabUtilizador.login = '" & util & "'"

        Dim id_util_SqlDataAdapter As SqlDataAdapter = New SqlDataAdapter(Select_id_util, ligacao_id_util)


        Dim id_util_ds As DataSet = New DataSet

        id_util_SqlDataAdapter.Fill(id_util_ds, "TabUtilizador")

        Dim id_util_DataRow As DataRow

        For Each id_util_DataRow In id_util_ds.Tables("TabUtilizador").Rows
            id_util = Val(id_util_DataRow("Id").ToString)
        Next
        Return id_util
    End Function


    
#End Region



End Class


tenho aqui um pequeno problema , como devem ter reparado , tenhos duas comparações:
If stock_prod > 0 , If stock_pendente > 0 , em quea a variavel stock_prod guarda o stock total existente do produto , e stock_pendemte guarda o valor acima do stock em relação ao valor que o utilizador escreve numa caixa de texto.

até ai tdo bem , ambas a variaveis ja descritras guardam o valor certo , comprovado por testes realizados.

o prob é que ao passar pelo primeiro "If stock_prod > 0 " ele guarda o valor certo na tabela, guardando apenas o que esta dentro de stock , e no 2º " If stock_pendente > 0" que devia guardar um reg na tabela com os valores para alem do stock existente não o guarda. não sei pq carga de agua.


notas:

Código:
Estado.Value = 0 - 'guarda na tabela o valor 0 coorespondente aos pedidos requisitados
Estado.Value = 1 - 'guarda na tabela o valor 1 coorespondente aos pedidos pendentes


agradecia uma resolução para o probema
 
Última edição:
problema resolvido

bastou apagar a informação da gridview do file.aspx que chama a função rowcommand tal como
visto abaixo

Código:
OnRowCommand="GridView_pedidos_RowCommand"
 
Back
Topo