Ir para conteúdo

POWERED BY:

Arquivado

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

Nando Leads

[Resolvido] Erro e-commerce

Recommended Posts

Olá,

estou fazendo um e-commerce e na hora de finalizar o pedido acontece o seguinte erro

 

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

 

[Microsoft][ODBC SQL Server Driver]

There are fewer columns in the INSERT statement than values specified in the VALUES clause. The number of values in the VALUES clause must match the number of columns specified in the INSERT statement. 

 

/envia_pedido.asp, line 39

 

o código:

CODE
<!-- #INCLUDE file="conexao.asp" -->

<%

Call abre_conexao

 

if Session("LOGID") = "" then

response.write ("<script>alert('Ocorreu um erro na finalização de seu pedido, por favor tente novamente.');parent.location.href='index.asp';</script>")

end if

 

CONST constID = 0

CONST constNome = 1

CONST constValor = 2

CONST constQtde = 3

 

'Pega Carrinho

IF NOT isArray(Session("carrinho") ) THEN

DIM carrinho(5,20)

ELSE

carrinho = Session("carrinho")

END IF

 

forma_pagamento = request.Form("rdbFormaPagamento")

id_usuario = Session("LOGID")

 

conexao.execute("INSERT INTO TB_PEDIDO (ID_USUARIO,ID_STATUS,DATA_PEDIDO,FORMA_PAGAMENTO) VALUES ("&id_usuario&",1,'"&now()&"','"&forma_pagamento&"')")

 

if err.number <> 0 then

response.write("<script>alert('A ação nao pode ser concluida. Tente novamente mais tarde.');location.href='index.asp';</script>")

response.End()

end if

 

sqlID_PEDIDO = "SELECT @@IDENTITY as ID FROM TB_PEDIDO"

set rsIDPedido = conexao.execute(sqlID_PEDIDO)

 

id_pedido = rsIDPedido("ID")

 

for i=0 to Ubound(carrinho,2)

if carrinho(constID,i) <> "" then

 

conexao.execute("INSERT INTO TB_PEDIDO_PRODUTO (ID_PEDIDO,ID_PRODUTO,VALOR_PRODUTO,QTDE,DESCRICAO_PRODUTO) VALUES ("&id_pedido&","&carrinho(constID,i)&","&carrinho(constValor,i)&","&carrinho(constQtde,i)&",'"&carrinho(constNome,i)&"')")

if err.number <> 0 then

conexao.execute("DELETE FROM TB_PEDIDO WHERE ID_PEDIDO="&id_pedido&"")

response.write("<script>alert('A ação nao pode ser concluida. Tente novamente mais tarde.');location.href='index.asp';</script>")

response.End()

end if

 

end if

next

 

sqlTipoPessoa = "SELECT PESSOA,EMAIL FROM USUARIO WHERE ID="&id_usuario&""

set rsTipoPessoa = conexao.execute(sqlTipoPessoa)

 

 

pessoa = rsTipoPessoa("PESSOA")

email = rsTipoPessoa("EMAIL")

 

if pessoa = "F" then

 

sqlUser = "SELECT B.NOME,B.SOBRENOME,C.CEP,C.ENDERECO,C.NUMERO,C.COMPLEMENTO,C.BAIRRO,C.CIDADE,C.E

STADO,D.DATA_PEDIDO,D.FORMA_PAGAMENTO"

sqlUser = sqlUser & " FROM Usuario A, CLI_PF B, CLI_Endereco C, TB_PEDIDO D "

sqlUser = sqlUser & " WHERE A.ID = "&id_usuario&" AND A.ID = B.ID_USER AND A.ID = C.ID_USER AND D.ID_PEDIDO = "&id_pedido&""

set rsUser = conexao.execute(sqlUser)

 

nome = rsUser("NOME") & " " & rsUser("SOBRENOME")

cep = rsUser("CEP")

endereco = rsUser("ENDERECO")

numero = rsUser("NUMERO")

complemento = rsUser("COMPLEMENTO")

bairro = rsUser("BAIRRO")

cidade = rsUser("CIDADE")

estado = rsUser("ESTADO")

data_pedido = rsUser("DATA_PEDIDO")

forma_pagamento = rsUser("FORMA_PAGAMENTO")

else

sqlUser = "SELECT B.CONTATO,C.CEP,C.ENDERECO,C.NUMERO,C.COMPLEMENTO,C.BAIRRO,C.CIDADE,C.ESTADO,D.D

ATA_PEDIDO,D.FORMA_PAGAMENTO"

sqlUser = sqlUser & " FROM Usuario A, CLI_PJ B, CLI_Endereco C, TB_PEDIDO D "

sqlUser = sqlUser & " WHERE A.ID = "&id_usuario&" AND A.ID = B.ID_USER AND A.ID = C.ID_USER AND D.ID_PEDIDO = "&id_pedido&""

set rsUser = conexao.execute(sqlUser)

 

nome = rsUser("CONTATO")

cep = rsUser("CEP")

endereco = rsUser("ENDERECO")

numero = rsUser("NUMERO")

complemento = rsUser("COMPLEMENTO")

bairro = rsUser("BAIRRO")

cidade = rsUser("CIDADE")

estado = rsUser("ESTADO")

data_pedido = rsUser("DATA_PEDIDO")

forma_pagamento = rsUser("FORMA_PAGAMENTO")

 

end if

 

Set Mailer = Server.CreateObject("SMTPsvg.Mailer")

Mailer.FromName = "Cobequi"

Mailer.FromAddress= "contato@cobequi.com.br"

Mailer.RemoteHost = "smtp2.locaweb.com.br"

Mailer.AddRecipient "", email

Mailer.AddBCC "", "ricardo@cobequi.com.br"

Mailer.AddBCC "", "web.igor@gmail.com"

Mailer.AddBCC "", "web.igor@gmail.com"

 

Mailer.ContentType = "text/html" ' formatação html

 

mensagem = "<div align=center>Cobequi.com.br<br>-------------------------------------------------------------<br> <strong>CONFIRMAÇÃO DE PEDIDO </strong><br> ------------------------------------------------------------- </div><p> Prezado(a) "&nome&"</p><p> Esta é a confirmação de que seu pedido de orçamento foi realizado com sucesso. <br> A qualquer momento um de nossos atendentes entrará em contato. <br> O prazo máximo é de 24 horas.<br> O número do seu pedido é <b>"&id_pedido&"</b></p><p>Em caso de dúvidas ligue em nossa central: (11) 4198 - 4270</p><p><br> <strong> ESTOQUE</strong><br> Nossa equipe de vendedores estará analisando seu pedido, checando se todos os produtos orçados estão em nosso estoque.<br> Caso fique faltando algum produto, um de nossos vendedores entrará em contato por e-mail ou telefone.</p><p><strong>PAGAMENTO</strong><br> Para sua segurança nosso departamento financeiro aguarda uma posição do ESTOQUE apos a confirmação dos produtos<br> será realizada uma breve analise para aprovação do seu credito.<br> Apos esta aprovação entraremos em contato passando os dados para o pagamento.</p><p>Os pedidos feitos com cartão de crédito, o débito do mesmo será feito apenas no momento do envio das suas compras.</p><p> Já os pedidos cujo o pagamento mediante depósito, transferência bancária, Cheque pré-datado ou boleto on-line pedimos que sejam pagos apenas após o contato via telefone ou e-mail da nossa central de atendimento, contato esse que será feito em até 24 horas.</p><p><br>"

 

mensagem = mensagem & "<strong>SEU PEDIDO</strong><br>Confira os itens do pedido ["&id_pedido&"] no qual foi solicitado orçamento:</p>"

 

sqlPedidos = "SELECT * FROM TB_PEDIDO_PRODUTO WHERE ID_PEDIDO="&id_pedido&""

set rsPedidos = conexao.execute(sqlPedidos)

 

Do while rsPedidos.eof = false

 

mensagem = mensagem & "<p> <strong>Item escolhido:</strong> "& rsPedidos("DESCRICAO_PRODUTO") &" / Qtd: "& rsPedidos("QTDE") &"<br>"

 

sqlValorProduto = "SELECT TAB,PRECO2 FROM Produto WHERE ID="&rsPedidos("ID_PRODUTO")&""

set rsValorProduto = conexao.execute(sqlValorProduto)

 

if rsValorProduto.eof = false then

if isnull(rsValorProduto("PRECO2")) = false and rsValorProduto("PRECO2") <> 0 then

subtotal = rsValorProduto("PRECO2") * rsPedidos("QTDE")

mensagem = mensagem & "Preço Unitário: "& formatCurrency(rsValorProduto("PRECO2")) &" | Sub-Total.....: "& formatCurrency(subtotal) &"</p>"

else

subtotal = rsValorProduto("TAB") * rsPedidos("QTDE")

mensagem = mensagem & "Preço Unitário: "& formatCurrency(rsValorProduto("TAB")) &" | Sub-Total.....: "& formatCurrency(subtotal) &"</p>"

end if

 

total = total + subtotal

end if

 

rsPedidos.movenext

Loop

 

mensagem = mensagem & "<p>-----------------------------------------------------------------------------<br>"

mensagem = mensagem & "Valor total em Produtos: "& formatCurrency(total) &"<br>"

mensagem = mensagem & "Valor do Frete...: Aguarde o contato de um vendedor<br><br>"

mensagem = mensagem & "<strong>Total do Pedido</strong>: "& formatCurrency(total) &" <br>"

mensagem = mensagem & "-----------------------------------------------------------------------------</p>"

mensagem = mensagem & "<p><strong>INFORMAÇÃO PARA ENTREGA</strong><br><br>"

 

mensagem = mensagem & "Cliente: "&nome&" <br>"

mensagem = mensagem & "Endereço: "& endereco & "nº " & numero & " - " & complemento & " - BAIRRO: "&bairro&"<br>"

mensagem = mensagem & "Cidade..: "&cidade&" <br>"

mensagem = mensagem & "Estado.: "&estado&"<br>"

mensagem = mensagem & "CEP.: "&CEP&"<br>"

mensagem = mensagem & "Forma de Pagamento escolhida: "&forma_pagamento&"</p>"

 

mensagem = mensagem & "<p> Lembre-se de que os dados acima devem estar corretos e completos para não haver demora e dificuldade na entrega do pedido.<br> Caso haja algum erro, pedimos a gentileza que nos envie um e-mail para atendimento@cobequi.com.br ou ligue para nossa central de atendimento (11) 4198 - 4270 para que as correções sejam feitas.</p><p><br> Atenciosamente,</p><p> Atendimento ao Cliente Cobequi<br> www.cobequi.com.br<br></p>"

 

Mailer.Subject = "Confirmação de Pedido"

Mailer.BodyText = mensagem

If Mailer.SendMail Then

erro = "Mensagem enviada com sucesso"

Else

erro = "Erro " & Mailer.Response

End If

Set Mailer = nothing

 

 

response.Redirect("pedido_concluido.asp?erro="&erro&"")

%>

o erro indica que há menos colunas da declaração INSERT do que os valores especificados na cláusula VALUES. O número de valores na cláusula VALUES deve corresponder ao número de colunas especificado na declaração INSERT.

 

Ainda não sei oque é!!!

 

Se puderem me ajudar fico grato.

Qualquer dica é valida.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posta a linha 39.

Compartilhar este post


Link para o post
Compartilhar em outros sites
conexao.execute("INSERT INTO TB_PEDIDO_PRODUTO (ID_PEDIDO,ID_PRODUTO,VALOR_PRODUTO,QTDE,DESCRICAO_PRODUTO) VALUES ("&id_pedido&", "&carrinho(constID,i)&","&carrinho(constValor,i)&","&carrinho(constQtde,i)&",'"&carrinho(constNome,i)&"')")

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este é o codigo que esta dando erro: a linha 39 é o select:

sqlID_PEDIDO = "SELECT @@IDENTITY as ID FROM TB_PEDIDO"
set rsIDPedido = conexao.execute(sqlID_PEDIDO)

id_pedido = rsIDPedido("ID")

	for i=0 to Ubound(carrinho,2) 
		if carrinho(constID,i) <> "" then
			
			conexao.execute("INSERT INTO TB_PEDIDO_PRODUTO (ID_PEDIDO,ID_PRODUTO,VALOR_PRODUTO,QTDE,DESCRICAO_PRODUTO) VALUES ("&id_pedido&","&carrinho(constID,i)&","&carrinho(constValor,i)&","&carrinho(constQtde,i)&",'"&carrinho(constNome,i)&"')")
			if err.number <> 0 then
				conexao.execute("DELETE FROM TB_PEDIDO WHERE ID_PEDIDO="&id_pedido&"")
				response.write("<script>alert('A ação nao pode ser concluida. Tente novamente mais tarde.');location.href='index.asp';</script>")
				response.End()
			end if
		
		end if
	next

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse erro acontece quando você informa no value um número de valores maior do que os campos informado.

 

Pelo seu código está ok, mas provavelmente seu campo quantidade ou valor deve possuir vírgula, o que está fazendo com que o número de campos seja alterado.

 

Você terá que substituir por "." se não me engano. Eu prefiro converter tudo em centavos e gravar sem vírgula no banco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oque eu achei estranho é que esse código estava sendo usado no site, mas do nada parou de funcionar.

Vou testar com as dicas que você me deu!!!

Se der serto ou não eu volto a postar!!!

 

Obrigado pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testei no site e funfo o maldito.

Mas testei com menos produtos e com um produto com valor inteiro:700,00.

Agora vou fazer as alterações necessarias para que o mesmo fique funcionando normalmente.

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Às vezes antes funcionava porque não passou por uma situação parecida.

 

Mas sua dúvida foi resolvida ou há algo pendente ainda?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se eu trocar a virgula por ponto vai dar certo mesmo? Não vou precisar alterar o campo no BD, faz tempo que não programo em ASP, mas devo ter algum código aqui que faça isso.

De resto a minha duvida esta resolvida!!! Valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenho uma duvi da tbm:

 

Como trocar a virgula do valor da session

por exemplo o codigo do nando leads:

 

CONST constID = 0 
CONST constNome = 1 
CONST constValor = 2 
CONST constQtde = 3

quero trocar o valor do constValor, trocar a virgula por ponto.

tentei

 

valor = carrinho(constValor,i).value.replace(",",".");

mas não deu certo, existe outra forma ,ou eu estou totalmente errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

etá fazendo referencias tipo objeto, nao roda assim, tente isso, englobe a variavel com a função

 

valor = Replace(carrinho(variavel), "", ".")

Compartilhar este post


Link para o post
Compartilhar em outros sites

valeu pela ajuda amigos, era isso mesmo.

só faltou uma virgula no seu cod ted'k:

valor = Replace(carrinho(constValor,i), ",", ".")

assim funcionou.

 

muito obrigado pela ajuda ae pessoal.

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.