Ir para conteúdo

Arquivado

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

TSINET

Bug no Carrinho de Compras

Recommended Posts

Olá...

To pegando um carrinho de compras de um tutorial de um livro...Quando você vai adicionando as compras no carrinho, fica beleza, mas quando eu excluo todos os items e tento colocar ou outro produto, ele dá esse erro:

Microsoft JET Database Engine erro '80040e14'

Número de valores da consulta e campos de destino não coincidem.

Dei um Response.Write na SQL porém os todos os dados estão certinhos e além do mais nao da esse erro quando vo adicionando os produtos no carrinho, somente quando excluo todos os items e tento colocar outro no lugar

O codigo eh esse

<%
Dim Conn
Dim RSCustomer
Dim RSProduct
Dim RSOrderItems
Dim OrderTotal
Dim calculo

q = Request.Form("Quantity")



Set Conn = Server.CreateObject("ADODB.Connection")
Conn.open "provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("banco.mdb")

If IsEmpty(Session("CustomerID")) or Not IsArray(Session("CustomerID")) Then
Conn.Execute "Insert Into OSCustomers (OrderDate) "_
& "Values ('" & Now & "')"
Set RSCustomer = Conn.Execute("Select Max(CustomerID) "_
& "As MaxID From OSCustomers")
Session("CustomerID") = RSCustomer("MaxID")
Response.Write "<script>alert(""Carrinho Vazio!"")</script>"
End If
If Not IsEmpty (Request.Form("OKAddToCart")) Then
Set RSProduct = Conn.Execute("Select ProductName, Price, " _
& "Shipping From OSProducts Where ProductID = " _
& Request.Form("ProductID"))

'calculo = ((Request.Form("Quantity") * RSProduct("Price")) + (Request.Form("Quantity") * RSProduct("Shipping")))

inserir = "Insert Into OSCustomerOrders (CustomerID, ProductID, ProductName, Quantity, ItemTotal) Values (" _
& Session("CustomerID") & ", "_
& Request.Form("ProductID") & ", "_
& "'" & RSProduct("ProductName") & "', "_
& Request.Form("Quantity") & ", "_
& ((Request.Form("Quantity") * RSProduct("Price")) + _
(Request.Form("Quantity") * RSProduct("Shipping"))) & ")"
'Response.Write inserir
'Response.End
set rsquery = Conn.execute(inserir)
End If

If Not IsEmpty(Request.QueryString("RemoveID")) Then
Conn.Execute "Delete From OSCustomerOrders Where OrderID =" _
& Request.QueryString("RemoveID")
End If
Set RSOrderItems = Conn.Execute("Select OrderID, ProductID, ProductName, "_
& "Quantity, ItemTotal From OSCustomerOrders Where CustomerID= "_
& Session("CustomerID") )
%>
<%
Do Until RSOrderItems.EOF
%>
<TR>
<TD><P><A href="detalhe.asp?ProductID=<% Response.Write RSOrderItems("ProductID")%>"><% Response.Write RSOrderItems("ProductName") %></A></P></TD>
<TD><P>Quantidade: <% Response.Write RSOrderItems("Quantity")%></P></TD>
<TD><P>Preço: <% Response.Write FormatCurrency(RSOrderItems("ItemTotal")) %></P></TD>
<TD><P><a href="carrinho.asp?RemoveID=<% Response.Write RSOrderItems("OrderID")%>">Remover</a></P><% 
Response.Write q
Response.Write "<br>"
Response.Write "---"
Response.Write "<br>"
Response.Write RSProduct("Shipping")
Response.Write "<br>"
Response.Write "---"
Response.Write "<br>"
Response.Write RSProduct("Price")

%></TD>
</TR>
<%
OrderTotal = OrderTotal + RSOrderItems("ItemTotal")
RSOrderItems.MoveNext
Loop
%>

A linha do erro, é essa

set rsquery = Conn.execute(inserir)

O insert é esse

inserir = "Insert Into OSCustomerOrders (CustomerID, ProductID, ProductName, Quantity, ItemTotal) Values (" _
& Session("CustomerID") & ", "_
& Request.Form("ProductID") & ", "_
& "'" & RSProduct("ProductName") & "', "_
& Request.Form("Quantity") & ", "_
& ((Request.Form("Quantity") * RSProduct("Price")) + _
(Request.Form("Quantity") * RSProduct("Shipping"))) & ")"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que o erro está nos preços. Quando você informa com vírgula fora da aspas simples, ele joga o valor na SQL, e a SQL interpreta como dois valores separados.

 

Utiliza valores inteiros nos preços... provavelmente irá funcionar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu hargon!

Consegui dar uma ajeitada nesse quesito, mas tá dando outro bug, ele não tá gravando no carrinho...

O código só tá executando a primeira parte:

If IsEmpty(Session("id")) Then
Conn.Execute "Insert Into usuarios (OrderData) "_
& "Values ('" & Now & "')"
Set RSCustomer = Conn.Execute("Select Max(id) "_
& "As MaxID From usuarios")
Session("id") = RSCustomer("MaxID")
End If
Eu sei disso pq só essa parte tá gravado no banco, ou seja, a data que o cara logou...

 

Após isso, não tá gravando mais:

If Not IsEmpty (Request.Form("OKComprar")) Then
Set RSProduct = Conn.Execute("Select nome, preco1, txEmbarque From tb_produtos Where cod_produto = " _
& Request.Form("cod_produto"))

inserir = "Insert Into produto_comprados (id, cod_produto, nome, quantidade, ItemTotal) Values (" _
& Session("id") & ", "_
& Request.Form("cod_produto") & ", "_
& "'" & RSProduct("nome") & "', "_
& 1 & ", "_
& ((1 * RSProduct("preco1")) + _
(1 * RSProduct("txEmbarque"))) & ")"
'Response.Write inserir
'Response.End
set rsquery = Conn.execute(inserir)
End If

If Not IsEmpty(Request.QueryString("RemoveID")) Then
Conn.Execute "Delete From produto_comprados Where OrderID =" _
& Request.QueryString("RemoveID")
End If
Set RSOrderItems = Conn.Execute("Select OrderID, cod_produto, nome, "_
& "quantidade, ItemTotal From produto_comprados Where id= " & Session("id") )
%>

E terminando, não tá mostrando os dados comprados no carrinho em si:

<%
			Do Until RSOrderItems.EOF
		  %>
				  <tr> 
					<td colspan="6" bgcolor="#F2FCFD"><table width="100%" border="0" cellspacing="0" cellpadding="0">
						<tr> 
						  <td width="42%"><a href="detalhe_produto.asp?cod_produto=<% Response.Write RSOrderItems("cod_produto")%>">  
							<% Response.Write RSOrderItems("nome") %>
							</a></td>
						  <td width="19%"><div align="center"> 
							  <% Response.Write FormatNumber(round(rs("preco1"),2))%>
							</div></td>
						  <td width="11%"><div align="center"> 
							  <input name="textfield" type="text" class="formqtde" value="<%Response.Write RSOrderItems("quantidade")%>" size="1">
							</div></td>
						  <td width="23%"><div align="center">
							  <% Response.Write FormatNumber(round(rs("ItemTotal"),2))%>
							</div></td>
						  <td width="5%"><div align="center"><a href="meio_carrinho.asp?RemoveID=<% Response.Write RSOrderItems("OrderID")%>"><img src="../meio/exclui_produto.gif" alt="Excluir produto da cesta" width="16" height="15" border="0"></a></div></td>
						</tr>
					  </table></td>
				  </tr>
				  <tr> 
					<td colspan="6"><%
OrderTotal = OrderTotal + RSOrderItems("ItemTotal")
RSOrderItems.MoveNext
Loop
%></td>

Img do erro => http://img254.imageshack.us/img254/199/errocarrinhoux2.gif

O que poderia ser?

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

agora encontrei mais uma problema...

 

Eu tenho um carrinho com 3 produtos, por exemplo...

 

Daí quando altero o valor no textedit de quantidade, aparece esse erro:

Microsoft VBScript runtime  error '800a000d'

Type mismatch: '[string: "1, 1, 2"]'

A linha do erro é:

atualiza = "Update DISTINCTROW produto_comprados set quantidade = "& Request.Form("quantidade_car") &", nome = '"& RSOrderItems("nome") &"', ItemTotal = " & ((Request.Form("quantidade_car") * RSOrderItems("ItemTotal")) + _
(Request.Form("quantidade_car") * RSOrderItems("ItemTotal"))) & " Where id = " & Session("id")

Coloquei esse DISTINCTROW pra diferenciar os produtos...pois esses trÊs produtos tem a mesma Session ID, e quando eu tenho somente um produto no carrinho ele altera, quando tem 2 ou mais dá esse erro que eu mostrei ali em cima...

 

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse erro está dizendo que você está fornecendo mais argumentos ao banco do que existem campos para suportá-los, ou seja, a sua tabela tem 10 campos e você tenta inserir 11 por exemplo, nos diga os campos dessa tabela e a resposta estará clara.

 

edit: não tinha visto as outras respostas, essa resposta aqui se refere à primeira dúvida...

Compartilhar este post


Link para o post
Compartilhar em outros sites

agora encontrei mais uma problema...

 

Eu tenho um carrinho com 3 produtos, por exemplo...

 

Daí quando altero o valor no textedit de quantidade, aparece esse erro:

Microsoft VBScript runtime  error '800a000d'

Type mismatch: '[string: "1, 1, 2"]'

A linha do erro é:

atualiza = "Update DISTINCTROW produto_comprados set quantidade = "& Request.Form("quantidade_car") &", nome = '"& RSOrderItems("nome") &"', ItemTotal = " & ((Request.Form("quantidade_car") * RSOrderItems("ItemTotal")) + _
(Request.Form("quantidade_car") * RSOrderItems("ItemTotal"))) & " Where id = " & Session("id")

Coloquei esse DISTINCTROW pra diferenciar os produtos...pois esses trÊs produtos tem a mesma Session ID, e quando eu tenho somente um produto no carrinho ele altera, quando tem 2 ou mais dá esse erro que eu mostrei ali em cima...

 

Valeu

 

Você está tentando inserir no banco um tipo de variável diferente da suportada na coluna (string em um campo int por exemplo), tire os apóstofres antes e depois dos campos que não são string, pois dependendo da configuração do banco que você usa, ele interpreta como sendo string toda vez que o campo está entre apóstofres.

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.