Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

alebae

Utilizando um "Distinct" no UPDATE

Recommended Posts

Bem, estou eu de novo com um problema...

 

Tenho um Update do tipo carrinho de compras...Quando ele guarda o primeiro produto ele faz as alterações de modo satisfatório...O problema é quando estou colocando produtos, pois ele tem uma caixa de texto com o nome de quantidade, porém, quando é atualizado, todos os números dos vários produtos que estão na cesta, tentam ir para um único e mesmo campo do Banco de Dados...Já alterei o Where pro id do produto, já tentei colocar um Distinct (tal qual no Select) no Update, mas, infelizmente, nada...

 

Testei com Arrays, e nesse caso não gostei pela dificuldade de manipulação, e preferi implementar pelo BD mesmo...

Como proceder?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, estou eu de novo com um problema...

 

Tenho um Update do tipo carrinho de compras...Quando ele guarda o primeiro produto ele faz as alterações de modo satisfatório...O problema é quando estou colocando produtos, pois ele tem uma caixa de texto com o nome de quantidade, porém, quando é atualizado, todos os números dos vários produtos que estão na cesta, tentam ir para um único e mesmo campo do Banco de Dados...Já alterei o Where pro id do produto, já tentei colocar um Distinct (tal qual no Select) no Update, mas, infelizmente, nada...

 

Testei com Arrays, e nesse caso não gostei pela dificuldade de manipulação, e preferi implementar pelo BD mesmo...

Como proceder?

Explique novamente, de preferência postando a parte do código referente ao assunto. Não entendi o que você quer exatamente, mas pelo que entendi, DISTINCT não é a solução, até porque nunca vi isso em UPDATE.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe,

 

Mas vamos lá...

Tenho esse código:

conexao.execute "Update Distinct tabela_pedidos set qtde = qtde + "& Request.Form("qtde_do_carrinho")&", TotalPreco = " & ((Request.Form("qtde_do_carrinho") * rsalebaeCar("TotalPreco")) +
(Request.Form("qtde_do_carrinho"))) & " Where codPedido = " & rsalebaeCar("codPedido")

No momento que o usuário atualiza a quantidade no carrinho de compras, teria que alterar o TotalPreco certo? Pois bem, quando tenho um único produto isso ocorre, agora, com 2 ou mais produtos no carrinho, não, pois, ele tenta jogar essas 2 ou mais quantidades num único campo do BD...

 

O erro seria:

Tipos incompatíveis: '[string: "1, 2"]'

 

Esse 1 é quantidade do primeiro produto, e o 2 a quantidade do segundo produto nesse carrinho...Ou seja, ele tenta jogar esse 1 e esse 2 dentro de um ÚNICO campo, que é o campo de quantidade, logo como o tipo de campo dele é número, não aceita 1,2 como o valor do campo...O que eu eu gostaria era separar, o produto A tem a quantidade 1, e o B, 2...assim sucessivamente...

 

Pensei num Distinct para distingüir esses 2 produtos...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Provavelmente o erro está relacionado ao valor rsalebaeCar("TotalPreco").

 

Você está utilizando campo numérico. Se tiver vírgula em TotalPreco, será entendido como dois valores pelo banco...

 

Evita de fazer direto, faz em uma variável separada e tira a vírgula.

 

 

Qualquer coisa, executa esse código acima do código postado e posta o que apareceu:

response.write "Update Distinct tabela_pedidos set qtde = qtde + "& Request.Form("qtde_do_carrinho")&", TotalPreco = " & ((Request.Form("qtde_do_carrinho") * rsalebaeCar("TotalPreco")) +
(Request.Form("qtde_do_carrinho"))) & " Where codPedido = " & rsalebaeCar("codPedido")

response.end

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá hargon, obrigado pela ajuda!

Bem, quando eu tenho somente um produto no carrinho, a atualização funciona bem, mesmo com o preço com a vírgula. Porém quando eu tenho 2 produtos ou mais, ocorre este erro de tipos incompatíveis...Veja o resultado do response.write do update:

Update tabela_pedidos set qtde = 1, 4, TotalPreco = '' Where codPedido = 179

Bem, veja que "2 quantidades", ou seja, 2 produtos diferentes tentam entrar numa mesma linha do campo, aí eu acho que está o erro, pois, precisaria que fosse somente 1 quantidade. Visto que, com somente 1 produto, o cálculo dá certo.

 

Como eu tenho somente um campo TextEdit denominado qtde_do_carrinho, todos os números desse campo de texto tentam "entrar" em uma linha do campo. Gostaria saber como separar essa qtde_do_carrinho, para a quantidade do produto correspondente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utiliza a função split.

 

Ex. quantidade = split(quantidade,",")

 

Isso vai transformar a variável quantidade em vetor. Para manipular, basta acessar: quantidade(0), quantidade(1)... etc

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo,

Mas como eu colocaria quantidade(0), quantidade(1) dentro da instrução sql do update?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa quantidade é de cada produto, certo?

 

Então faça um loop para pegar os valores de cada produto... Se você não souber como fazer o loop, pesquisa no fórum sobre lbound e ubound que você encontrará vários exemplos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, pesquisei e utilizei no código essa função de loop...Ele não acusa mais erro de sintaxe, porém, por exemplo:

- Quando tenho 2 produtos no carrinho, e altero a quantidade do segundo, essa nova quantidade que eu coloquei pro segundo produto vai imediatamente para o textedit do primeiro, após clicar com o botão atualizar. Como resolver esse problema??? Utilizei este código:

varqtde = Request.Form("qtde_do_carrinho")
Arrayqtde = Split(varqtde, ",")

For i = LBound(Arrayqtde) to Ubound(Arrayqtde)
conexao.execute "Update tabela_pedidos set qtde = "& (Trim(Arrayqtde (i))) &", TotalPreco = " & (((Trim(Arrayqtde (I))) * rsalebaeCar("TotalPreco")) + (rsalebaeCar("TotalPreco"))) & " Where codPedido = " & rsalebaeCar("codPedido")

Next

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei usar esta lógica, alterar os nomes do TextField...

Ou seja, no primeiro Textfield uso o name="1", no segundo name="2", name="3" e assim sucessivamente, somente gostaria saber como colocar esses números através de uma estrutura de repetição, por exemplo, tenho esse código para fazer a atualização dos valores:

session("carrinho") = Request.Form("1") & "|" & Request.Form("2") & "|" & Request.Form("3")  & "," & Request.Form("1") & "|" & Request.Form("2") & "|" & Request.Form("3")
 
car = split(session("carrinho"),",")

for i=0 to ubound(car)
car2 = split(car(i),"|")
response.write "Codigo produto = "&car2(0)&" - Qtd.: "&car2(1)&" V. Unit: "&car2(2)& "V. total: "& car2(1) * car2(2) & "<br>"
ttotal = ttotal + car2(1) * car2(2)
next
response.write ttotal

Tentei no name do input text jogar isso, para aparecer o primeiro textfield como o name=1, o segundo textfield como 2, mas ele fica somente 123:

<input name="<% For i=1 to 3
 Response.Write(i)
 Next%>" type="text" class="formqtde" id="qtde_do_carrinho" value="<%Response.Write rsalebaecar("qtde")%>">

Como proceder?

Compartilhar este post


Link para o post
Compartilhar em outros sites

seguinte, tu tinha postado o seguinte código

Update tabela_pedidos set qtde = 1, 4, TotalPreco = '' Where codPedido = 179

não entendi o que você quer fazer com isso.

1 e 4 seriam a quantidade? mas você vai gravar os dois registros no mesmo campo??

assim você vai sobre escrever.

 

o que você precisa atualizar (update) no carrinho??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Napraia!

Bem, era esse o erro que eu queria eliminar, o da gravação de 2 registros no mesmo campo, pois o set qtde do update, chama pelo Request.Form("qtde_do_carrinho"), porém, quando tenho 2 ou mais produtos, vai criando,e, conseqüentemente aumentando o input com nome de "qtde_do_carrinho"...

Já tentei com Loop com lbound e ubound, como foi dita acima, mas, conforme dito, quando tenho 2 produtos no carrinho, e altero a quantidade do segundo, essa nova quantidade que eu coloquei pro segundo produto vai imediatamente para o textedit do primeiro, após clicar com o botão atualizar. Como resolver esse problema???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Buscando por outro código aqui, achei este:

<% 
'Define Constantes
CONST cartpid = 0
CONST cartpname = 1
CONST cartpprice = 2
CONST cartpquantity = 3

'Pega Carrinho
IF NOT isArray(Session("cart") ) THEN
DIM localcart(4,20)
ELSE
localcart = Session("cart")
END IF

'Pega Informações
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.open "provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("banco_produtos.mdb")

selecionar = "Select * from tb_produtos where cod_produto =" & Request.Form("cod_produto")
set rssql = Conn.Execute(selecionar)

productid = rssql("cod_produto")
productname = rssql("nome")
productprice = rssql("preco1")

'productid = TRIM(Request.QueryString("cod_produto") )
'productname = TRIM(Request.QueryString("nome") )
'productprice = TRIM(Request.QueryString("preco1") )

'Adicionar ao Carrinho
IF productid <> "" THEN
foundit= false
FOR i=0 to Ubound (localcart,2)
IF localcart(cartpid,i) = productid THEN
localcart(cartpquantity,i) = localcart( cartpquantity, i) + 1
foundit = TRUE
EXIT FOR
END IF
NEXT
IF NOT foundit THEN
FOR i=0 to UBOUND(localcart,2)
IF localcart(cartpid,i) = "" THEN
localcart(cartpid,i) = productid
localcart(cartpname,i) = productname
localcart(cartpprice,i) = productprice
localcart(cartpquantity,i) = 1
EXIT FOR
END IF
NEXT
END IF
END IF
'Atualiza Carrinho
IF Request("updateQ") <> "" THEN
FOR i=0 to Ubound (localcart,2)
newQ = TRIM(Request("pq" & localcart(cartpid,i) ) )
deleteproduct = TRIM(Request.QueryString("productid") )
IF newQ = "" or newQ = "0" or deleteproduct <> "" THEN
IF deleteproduct = localcart(cartpid,i) THEN
localcart(cartpid,i) = ""
END IF
ELSE
IF isNumeric(newQ) THEN
localcart (cartpquantity,i) = newQ
END IF
END IF
NEXT
END IF


'Update Sesssion Carrinho
Session("cart") = localcart

%>
<% total = 0 %>
<% FOR i=0 TO Ubound(localcart,2) %>
<% IF localcart(cartpid,i) <> "" THEN %>
<%Response.Write total%>
<% total = total + localcart(cartpprice,i)*localcart(cartpquantity,i)%>
<%'Abaixo eu escrevo os valores%>

Porém me dá o seguinte erro:

Microsoft VBScript runtime error '800a000d'

 

Type mismatch: 'total'

O erro é nessa linha <% total = total + localcart(cartpprice,i)*localcart(cartpquantity,i)%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho que o que tem em localcart(cartpprice,i)*localcart(cartpquantity,i) nao deve ser numero

 

tente converter

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Mario Monteiro, essa parte funcionou direito!

 

Agora o problema é na hora de atualizar os valores da quantidade e do preço.

Não ocorre a atualização, veja o código, por favor:

'Atualiza Carrinho
IF Request("updateQ") <> "" THEN
FOR i=0 to Ubound (localcart,2)
newQ = TRIM(Request("pq" & localcart(cartpid,i) ) )
deleteproduct = TRIM(Request.QueryString("productid") )
IF newQ = "" or newQ = "0" or deleteproduct <> "" THEN
IF deleteproduct = localcart(cartpid,i) THEN
localcart(cartpid,i) = ""

END IF
ELSE
IF isNumeric(newQ) THEN
localcart (cartpquantity,i) = newQ
END IF
END IF
NEXT
END IF

'Update da Sesssion Carrinho
Session("cart") = localcart

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas nao vi voce mandar escrevef nada na tela

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, consegui resolver quase todos os problemas, exceto a exclusão do produto da cesta:

Ele retorna:

Microsoft JET Database Engine error '80040e14'

Syntax error (missing operator) in query expression 'cod_produto ='.

Da linha:

selecionar = "Select nome, preco1, cod_produto from tb_produtos where cod_produto =" & Request.Form("cod_produto")

set rssql = Conn.Execute(selecionar)

Sei que ele não tá achando um valor para esse cod_produto, mas eu coloquei um HiddenField com o value que aponta para o numero que está contido no cod_produto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.