Ir para conteúdo

POWERED BY:

Arquivado

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

ligiacj

Inserindo multiplos registros com asp e access

Recommended Posts

Oi Boa Tarde,

Eu sou nova em desenvolvimento asp, e estou com uma dúvida, já pesquisei bastante, porém não consigo encontrar solução, espero que alguém possa me ajudar.

 

Eu tenho um form com checkbox (values = produtos) e textarea para digitar a respectiva quantidade dos produtos, sendo que os dois deveriam ser cadastrados em uma tabela chamada lista, cada um em um campo e em linhas diferentes; porém com o código que eu fiz, consigo cadastrar apenas os produtos do checkbox e a quantidade fica em branco, a não ser qdo eu digito todos os textareas com quantidades, se eu pulo uma quantidade, já não cadastra no BD. Será que alguém poderia me ajudar?

 

Código do form:

<%
Dim teste
Dim teste_cmd
Dim teste_numRows

Set teste_cmd = Server.CreateObject ("ADODB.Command")
teste_cmd.ActiveConnection = MM_pedido_STRING
teste_cmd.CommandText = "SELECT * FROM produtos ORDER BY nome_produto ASC" 
teste_cmd.Prepared = true

Set teste = teste_cmd.Execute
teste_numRows = 0
%>
<%
Dim Repeat1__numRows
Dim Repeat1__index

Repeat1__numRows = -1
Repeat1__index = 0
teste_numRows = teste_numRows + Repeat1__numRows
%>
<form action="teste2.asp" method="post" name="1" id="1">
<table border="1">
  <tr>
	<td>id_prod</td>
	<td>nome_produto</td>
	<td>mod_tam</td>
	<td>marca</td>
	<td>fornecedor</td>
  </tr>
  <% While ((Repeat1__numRows <> 0) AND (NOT teste.EOF)) %>
	<tr>

<td><input name="produtos" type="checkbox" value="<%=(teste.Fields.Item("nome_produto").Value)%><%=(teste.Fields.Item("mod_tam").Value)%>" />
	  <td><input type="text" name="qtd_produtos" value="0" /></td>
	  <td><%=(teste.Fields.Item("nome_produto").Value)%></td>
	  <td><%=(teste.Fields.Item("mod_tam").Value)%></td>
	  <td><%=(teste.Fields.Item("marca").Value)%></td>
	  <td><%=(teste.Fields.Item("fornecedor").Value)%></td>
	</tr>
	<% 
  Repeat1__index=Repeat1__index+1
  Repeat1__numRows=Repeat1__numRows-1
  teste.MoveNext()
Wend
%>
</table>
<p>
  <input type="submit" name="subim" id="subim" value="Submit" />
</p>
</form>
<%
teste.Close()
Set teste = Nothing
%>

Código para cadastro múltiplona tabela lista:

 

<%
qtd_produtos = split(Request.Form("qtd_produtos"),",")
produtos= Split(Request.Form("produtos"), ",")

For i = 1 To Request.Form("produtos").Count

Response.write request.form("produtos")(i)&"<BR>" & request.form("qtd_produtos")(i)&"<BR>"
SQL = "INSERT INTO lista (lista_prodID,lista_quant) Values ('"&request.form("produtos")(i)&"','"&request.form("qtd_produtos")(i)&"')"

Set Command1 = Server.CreateObject ("ADODB.Command")
Command1.ActiveConnection = MM_pedido_STRING
Command1.CommandText = SQL
Command1.Prepared = true

Command1.Execute (SQL)
Next
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda não tentei, mas eu preciso que se o campo estiver vazio, ele simplesmente não envie nada ao banco. Como eu disse, eu sou iniciante em desenvolvimento, e peguei esse exemplo postado aqui mesmo no fórum. Já tentei mecher no código, mas sempre me retorna erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

qual o erro retornado...

e você pode resolver isso com um If, verificando se for = "" exibre uma mensagem de erro

 

if qtd_produtos = "" then
Response.write("erro..."
response.redirect("outra_pagina.asp")
else
qtd_produtos = split(Request.Form("qtd_produtos"),",")
if qtd_produtos = ""
produtos= Split(Request.Form("produtos"), ",")

For i = 1 To Request.Form("produtos").Count

Response.write request.form("produtos")(i)&"<BR>" & request.form("qtd_produtos")(i)&"<BR>"
SQL = "INSERT INTO lista (lista_prodID,lista_quant) Values ('"&request.form("produtos")(i)&"','"&request.form("qtd_produtos")(i)&"')"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi

Muito obrigada pela ajuda...

Eu fiz da maneira que você falou, mas ai ele não insere nenhum dado no bd, mas tb não posta nenhum erro; com o primeiro código, sem if, ele insere apenas os produtos marcados com check e não insere as quantidades correspondentes, mas tb não gera nenhum erro. Se eu marco todos os checkboxs e as quantidades, ai sim ele grava corretamente no banco, mas eu preciso que ele grave somente alguns produtos e as quantidades, como uma cesta de compras, pois este form é para fazer pedidos na loja.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta assim:

For i = 1 To Request.Form("produtos").Count
	 If (len(request.form("qtd_produtos")(i)) > 0) Then
		  SQL = "INSERT INTO lista (lista_prodID,lista_quant) Values ('"&request.form("produtos")(i)&"','"&request.form("qtd_produtos")(i)&"')"

		  Set Command1 = Server.CreateObject ("ADODB.Command")
		  Command1.ActiveConnection = MM_pedido_STRING
		  Command1.CommandText = SQL
		  Command1.Prepared = true

		  Command1.Execute (SQL)
	 End If
Next

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi... Infelizmente também não consegui com esse código, eu já havia feito algo semelhante... Mas muito obrigada pela ajuda...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas que erro apresenta? Continuou inserindo mesmo com quantidades vazias? Ou você informou quantidade = 0 ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade não apresenta nenhum erro, mas não insere no banco de dados... Eu não coloquei valor no campo qtd_produtos, vou tentar com valor =0

 

Se eu coloco o valor = 0 no campo qtd_produtos, ele cadastra os produtos corretos, mas as quantidades são todas 0, ele está chamando o value editado no form, pois se eu insiro mais campos com outros values, ele cadastra corretamente. Eu preciso editar o value no form, mas não sei como fazer isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá um response.write na sua string SQL para ver o que esta sendo passado de valores.

SQL = "INSERT INTO lista (lista_prodID,lista_quant) Values ('"&request.form("produtos")(i)&"','"&request.form("qtd_produtos")(i)&"')"
Reponse.write(SQL)
Response.End()

Compartilhar este post


Link para o post
Compartilhar em outros sites

a página vem em branco, sem erros se o value do campo qtd_produtos está em branco, qdo o valor está 0, aparece o erro:

Objeto necessário: 'Reponse'

/www/pedidos/teste2.asp, line 11

Compartilhar este post


Link para o post
Compartilhar em outros sites

faltou um s

 

Reponse

 

Response

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigada pela observação, que falta de atenção a minha... Mas mesmo assim, eu coloquei da forma correta e nada... O Respose.write fica assim: INSERT INTO lista (lista_prodID,lista_quant) Values ('Ventosa-','0'), ou seja, só mostra o primeiro produto marcado com check e continua mostrando a qtd errada, e passa a não cadastrar mais no bd...

Compartilhar este post


Link para o post
Compartilhar em outros sites

os valores estao entrando certo? senao é de onde vem que esta errado

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas qual o erro atual?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem através do 1º código que eu postei, ele insere os valores checados no banco de dados, porém, só insere a quantidade se eu começar a preencher partir do primeiro textarea no campo qtd_produtos. Se eu altero para o valor = 0 neste campo qtd, ele só insere o valor 0, ou seja, está cadastrando os valores postados no form ou qdo existe uma sequencia de qtdes. Já os outros códigos postados, eu testei, ou acontece o mesmo evento, ou então não insere cadastro nenhum no bd, mas tb não apresenta erros...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta este codigo ele esta funcionado perfeitamente

<%
on error resume next
Session.LCID = 1046
Response.Buffer = True
   dim mostra
   dim sql
   dim conn
	Session.TimeOut = 20
	Set conn = Server.CreateObject("ADODB.CONNECTION")
	conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ="&Server.MapPath("../db/banco.mdb")
	' Conexao que faz a paginação
mostra="Igreja Evangelica Assembleia de Deus - Ministerio da Missao"
sql1="SELECT * FROM email where User_resev='2' ORDER BY User_id DESC"
Set RS = conn.Execute(sql1)
sessao = request.querystring("sessao")
Select case sessao
Case "en_pet" 
	 nome=request.form("mst")
	 vert=split(nome,",")
	 codigo  = request.form("pg_id")
	  vet = split(codigo,",")
	if not IsArray(vet) then
	  vet = array(vet)
	  end if
   for i=0 to ubound(vet)
   sql="INSERT INTO email (User_emei,User_resev) values('"&vert(i)&"','2')"
   conn.execute(sql)
   next
	response.write("<script>alert('Pasta reservada"&codigo&" com sucesso!')</script>")
	 Case else
	 dim x, vCB, strIDS
'Recupera num vetor os checkboxes postados
'vCB = Split(Request(checkboxID) & ",", ",")
' Laço pelo vetor de IDs
'for x to Lbound(vCB) to Ubound)vCB0
  'Se o id é válido...
'  if Len(Trim(vCB(x))) > 0 then
	 'Concatena os IDS
'	 strIDS = strIDS & vCB(x) & ", "
'  end if
'next
' Retira a virgula que ficara no final da string
'strIDS = Left(strIDS, Len(strIDS)-2)
' Escreve os IDS para você poder conferir se veio correto e usar na tua consulta
' tipo select * from tabela where id in (" & strIDs & ")
'Response.Write strIDs

'dim x, dblSoma
'for each x in Request.form
'   if Left(x, 9) = "checkbox_" then 'aqui n lembro se é x ou Request(x) no left  :huh: 
'	  dblSoma = dblSoma + CDbl(Request(x))
'   end if
'next
	 %>
<%End Select%>

<html>
<head>
<title><%=mostra%></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript">
var	conta;
conta=0;
function apagar(){
for (var i = 0; i < document.pegtudo.elements.length; i++) {
if(document.pegtudo.elements[i].type == 'checkbox'){
if(document.pegtudo.elements[i].checked) {
conta++;
}
}
}
if (conta >100){ 
conta = ""+conta;
}else{
if(conta <=9){
conta = "00"+conta;
}else{
conta = "0"+conta;
}}
if(conta==0){
alert('Você deve marcar algum para continuar');
return false;
}
else {
if(confirm("Você tem certeza que deseja apagar os item selecionados?\nmensagem selecionadas: "+conta+"\n\tOk = SIM | Cancelar = NAO")){
return true;
}else{
return false;
document.pegtudo.submit();
}
}
}
-->
</script>
</head>

<body>
<form method="post" name="pegtudo" action="exibir1.asp?sessao=en_pet" onsubmit="return apagar(this);">
<%
for x=1 to 5
z=z+1
%>
<table width="20%" border="1" align="center">
<tr><td align="left" width="10%"><input type="text" style="width: 120px" value="" name="mst"></td><td align="left"><input type="checkbox" name="pg_id" value="<%=z%>"></td></tr>
</table>
<%
Next
%>
<br>
<input type="submit" value="Prosseguir">
</form>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

você seguindo esta lógica...

 

produtos= Split(Request.Form("produtos"), ",")

For i = 1 To Request.Form("produtos").Count

Response.write request.form("produtos")(i)&"<BR>" & request.form("qtd_produtos")(i)&"<BR>"
SQL = "INSERT INTO lista (lista_prodID,lista_quant) Values ('"&request.form("produtos")(i)&"','"&request.form("qtd_produtos")(i)&"')"

recuperando as valores e fazendo o insert atraves de um loop , ele nao dá certo

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.