1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.
  2. Bem-vindos à nova plataforma do Fórum ZWAME! Sabe mais aqui! Se encontrares algum problema ou tiveres alguma dúvida vê o tópico sobre a transição.

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

Discussão em 'Web Development' iniciada por alfinete, 12 de Julho de 2007. (Respostas: 1; Visualizações: 2977)

  1. alfinete

    alfinete Power Member

    __________________________________________________
    ficheiro pedidos.aspx
    ---------------------------------------------------------
    Code:
    <%@ 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
    ----------------------------------------------------------

    Code:
    
    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:

    Code:
    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: 14 de Julho de 2007
    #1
  2. alfinete

    alfinete Power Member

    problema resolvido

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

    Code:
    OnRowCommand="GridView_pedidos_RowCommand" 
    
    #2

Partilhar esta Página