Ir para conteúdo

POWERED BY:

Arquivado

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

Everton Viana

Salvando vários registros de uma só vez

Recommended Posts

Bem pessoal,

 

A ideia é a seguinte: Em uma empresa que faz manutenção em equipamentos de informatica, é necessário fazer um acompanhamento das maquinas que já foram "verificadas". Então fiz um formulário para listar todas as maquinas ativas do cliente, listando os seguintes campos:

 

  • Código do cliente
  • Código do equipamento

Esses campos são lidos do BD em MySQL e listados um em baixo do outro, junto dos campos para preenchimento do usuário:

 

  • Campo Checkbox -> Para o técnico marcar se esse equipamento já passou pela verificação
  • Campo Ocorrencia

Agora o problema: Se eu selecionar 1 equipamento da lista(Selecionando o Checkbox), preencher as informações de ocorrência e salvar, sem problemas os dados são salvos no BD. Porem se eu marcar mais de um equipamento, recebo o seguinte erro:

 

Microsoft OLE DB Provider for ODBC Drivers erro '80040e21'

O driver ODBC não oferece suporte para as propriedades solicitadas.

/workstation/os/preventiva/salva_preventiva_nova.asp, linha 36

Código do formulário:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%><HTML>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<%
'recupera codigo do cliente
cod_cli = session("cod_cli")


'Conexão MYSQL - Cadastro de Inventario
Set Conex = Server.CreateObject("ADODB.Connection")
Conex.ConnectionString = "DSN=inv_cli"
Conex.Open


'Conexão MYSQL - Cadastro de OS
Set Conex2 = Server.CreateObject("ADODB.Connection")
Conex2.ConnectionString = "DSN=os"
Conex2.Open


'Abro conexão com a base e tabelas alvo
sql = "select * from inventario where codigo = "&cod_cli&" and situacao_equip = 'Ativo'"
Set mostra = Server.CreateObject("ADODB.Recordset")
mostra.CursorLocation = 3
mostra.open sql, conex, 3,3


'Salva no Banco de Dados 
sql2 = "select * from reg_preventiva"
Set salva = Server.CreateObject("ADODB.Recordset")
salva.open sql2, conex2, 3,3


'Contamos quantos registros foram selecionados
Inventario = mostra.Recordcount


%>


 <style type="text/css"><!--
   .header {font-family:Tahoma, sans-serif; font-size: 12px; COLOR:#2FFFFF; padding-left:10; padding-right:5; font-weight:900 }
   .text {font-family:Tahoma,sans-serif; font-size: 11px; color:#ffffff; padding-left:20; padding-right:10 }
   .text2 {font-family:Verdana,sans-serif; font-size: 10px; color:#ffffff; padding-left:20; padding-right:10 }
    .news {font-family:Arial, sans-serif; font-size: 9px; color:#ffffff; padding-left:10; padding-right:5; font-weight:900; }
   a:link{text-decoration: none; color:#004FDF}
  a:visited{text-decoration: none; color: #004FDF}
  a:hover{text-decoration: underline; color: #004FDF}
  a:active{text-decoration: none; color: #004FDF}
li {
list-style-image:url('images/pic.jpg')
}


--></style>


</HEAD>
<BODY BGCOLOR=#FFFFFF>
  <script language="JavaScript">
//Função para abrir janelas pop-up
function janela(popupfile,winheight,winwidth)
{
open(popupfile,"PopupWindow","resizable=no,height=" + winheight + ",width=" + winwidth + ",scrollbars=no");
}
  </script>
          <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">
            <tr>
              <td width="99%"><b><font face="Arial" color="#FFAA00"> </font><font face="Arial" color="#0E2850">- 
              Equipamentos Encontrados:</font><font face="Tahoma" size="2"> <%=inventario%><br>
 </font><font face="Arial" size="3" color="#0E2850">- Selecione os 
              equipamentos que a rotina está sendo realizada</font><font face="Tahoma" size="2"><br>
              </font><font face="Arial" color="#0E2850">________________________________________________________________</font></b><form method="POST" action="salva_preventiva_nova.asp" name="Preventiva">
                <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" height="108">
                  <tr>
                   <%while not mostra.eof%>
                    <td width="21%" height="20">
                    <font face="Tahoma" style="font-size: 9pt; font-weight: 700" color="#0E2850">
                    Preventiva efetuada? </font>
                    <input type="checkbox" name="preventiva" value="<%=(mostra.Fields.Item("id").Value)%>"></td>
                    <td width="17%" height="20">
                    <font face="Tahoma" style="font-size: 9pt; font-weight: 700" color="#0E2850">
                    Cod. Cliente:</font></td>
                    <td width="29%" height="20">
                    <font face="Tahoma" style="font-size: 9pt; font-weight: 700" color="#0E2850">
                    Equipamento:</font></td>
                    <td width="58%" height="20">
                    <font face="Tahoma" style="font-size: 9pt; font-weight: 700" color="#0E2850">
                    Ocorrência</font></td>
                  </tr>
                  <tr>
                    <td width="21%" height="69"> </td>
                    <td width="17%" height="69" valign="top">
                    <input type="text" name="cod_cli<%=(mostra.Fields.Item("id").Value)%>" size="20" value="<%=(mostra.Fields.Item("codigo").Value)%>"></td>
                    <td width="29%" height="69" valign="top">
                    <input type="text" name="equipamento<%=(mostra.Fields.Item("id").Value)%>" size="20" value="<%=(mostra.Fields.Item("equipamento").Value)%>"></td>
                    <td width="58%" height="69">
                    <textarea rows="4" name="ocorrencia<%=(mostra.Fields.Item("id").Value)%>" cols="29"></textarea></td>
                  </tr>
                  <tr>
                    <td width="92%" colspan="3" height="19"><b><font face="Arial" color="#0E2850">________________________________________________________________</font></b></td>
                  </tr>
                  <%
            salva.addnew
  salva("preventiva") = "N"
  salva("cod_cli") =mostra("codigo")
       salva("equipamento") = mostra("equipamento")
  salva("contador") = "1"
             salva.update
                   %>
         <%mostra.movenext
wend%>
                </table>
                <p align="left">
                 <b><font face="Arial" color="#FF0000">ATENÇÃO:</font></b>
                <b><font face="Arial" color="#0E2850" size="2">Após o envio do 
                formulário não será possível edição das preventivas enviadas!</font></b></p>
                <p align="center">
                <input type="submit" value="Enviar preventiva" name="B1"></p>
              </form>
              <p> </td>
              <td width="1%">
           </td>
            </tr>
          </table>
        <!-- End ImageReady Slices -->
        </BODY>
</HTML>

Código da pagina que salva os dados:

<% 
'---------------------------------------------------------------------------------------------
'recupera codigo do cliente
cod_cli = session("cod_cli")
'---------------------------------------------------------------------------------------------
'Conexão MYSQL - Cadastro de Inventario
Set Conex = Server.CreateObject("ADODB.Connection")
Conex.ConnectionString = "DSN=inv_cli"
Conex.Open


'Conexão MYSQL - Cadastro de OS
Set Conex2 = Server.CreateObject("ADODB.Connection")
Conex2.ConnectionString = "DSN=os"
Conex2.Open


'Conexão MYSQL - Cadastro de clientes
Set Conex3 = Server.CreateObject("ADODB.Connection")
Conex3.ConnectionString = "DSN=cad_cli"
Conex3.Open
'---------------------------------------------------------------------------------------------
'Define o momento de abertura
data_inclusao = date()
hora_inclusao = time()


'Define Responsavel pela preventiva
responsavel = session("login_work1")
'---------------------------------------------------------------------------------------------
'Recupera estado do Checkbox
preventiva = request("preventiva" & id)


IF preventiva <> "" THEN


'Abro conexão com a base e tabelas de inventario
sql = "select ID from inventario where id = "&id
Set mostra = Server.CreateObject("ADODB.Recordset")
mostra.open sql, conex, 3,3
'---------------------------------------------------------------------------------------------


'Rotina de repetição
While Not mostra.EOF


   id = mostra("id")
   cod_cli = Request("cod_cli" & id)
   equipamento = Request("equipamento" & id)
   ocorrencia = request("ocorrencia" & id)
'---------------------------------------------------------------------------------------------


'Salva no Banco de Dados
sql2 = "select * from reg_preventiva"
Set salva = Server.CreateObject("ADODB.Recordset")
salva.open sql2, conex2, 3,3


salva("preventiva") = "S"
salva("cod_cli") = cod_cli
salva("equipamento") = equipamento
salva("ocorrencia") = ocorrencia
salva("data") = data_inclusao
salva("hora") = hora_inclusao
salva("contador") = "1"
salva("responsavel") = responsavel
salva.update


salva.close
set salva = nothing 


   mostra.MoveNext
Wend


END IF
'---------------------------------------------------------------------------------------------
'Salva o respectivo numero cotnador no cadastro do cliente, para consulta e atualização


'Salva contador
sql3 = "select * from cad_cli_p1 where codigo = "&cod_cli&""
Set salva2 = Server.CreateObject("ADODB.Recordset")
salva2.open sql3, conex3, 3,3


salva2("cont_preventivas") = "1"
salva2.update


salva2.close
set salva2 = nothing 
'---------------------------------------------------------------------------------------------
'Redireciona para uma pagina de agradecimento e confirmação
response.Write("<html><head><title>"&titulo_site&"</title><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'></head><body><style type='text/css'><!--a:link{text-decoration: none; color:#004FDF}a:visited{text-decoration: none; color: #004FDF}a:hover{text-decoration: underline; color: #004FDF}a:active{text-decoration: none; color: #004FDF}--></style><table width='100%' height='100%'><tr><td><table align='center'><tr><td><div align='center'><font color='#000000' size='1' face='Verdana, Arial, Helvetica, sans-serif'>Manutenções preventivas selecionadas foram salvas!!<br><br><a href='#' onClick='javaScript:window.close()'>Fechar </a><BR><BR></font><br></div></td></tr></table></td></tr></table></body></html>")


'Finaliza conexão com Banco de Dados
conex.close
conex2.close
conex3.close
%>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Cara,


Você vai identificar os checkbox na hr de mostrar ai tipo <input type="checkbox "name="check_1"id="xxxx" value="xxxxx"> (onde o 1 é um contador no loop para mostrar o checkbox) e o proximo vai ser <input type="checkbox "name="check_2" id="xxxx" value="xxxxx"> . Feito isso, na hr q vc for gravar, vc faz um loop verificando de 1 a X(quantidade de checkbox/ contador) qual checkbox está true, e então pega e grava normal.


qualquer coisa diz ai.

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz um loop nos checkbox´s e insere na SQL, eu uso assim:

 

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

Então, as checkbox estão identificadas com os respectivos códigos de cada registro do BD, nessa linha:

 

 <input type="checkbox" name="preventiva" value="<%=(mostra.Fields.Item("id").Value)%>"></td>

Porem, se eu selecionar mais de uma checkbox, a identificação final fica assim:

 

EX.: Selecionei o registro 10 e 13 -> Resultado de identificação: 10,13

 

Por isso eu acho que da erro para gravar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

use o SPLIT

 

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

 

ele vai quebrar em itens individuais

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, dividiria os resultados, mas e para salvar eles em cada respectivo registro?


Pra usar o FOR eu não precisaria saber exatamente quantos resultados seriam necessários para fazer o código abaixo:


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

EX.: FOR i = 50 to...

Compartilhar este post


Link para o post
Compartilhar em outros sites

use o FOR com Request.Form("produtos").Count

 

 

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

Então ta dando erro pra ler o resultado de preventiva = Split(request("preventiva"), ","), segue:

 

Erro de tempo de execução do Microsoft VBScript erro '800a000d'

Tipos incompatíveis

/os/preventiva/salva_preventiva_nova.asp, linha 41

 

Vou postar o código, pra você ver como ficou:

'Rotina de repetição
While Not mostra.EOF


'Recupera estado do Checkbox
preventiva = Split(request("preventiva"), ",")


IF preventiva <> "" THEN


   cod_cli = Request("cod_cli" & preventiva)
   cod_equipamento = Request("cod_equipamento" & preventiva)
   ocorrencia = request("ocorrencia" & preventiva)
'---------------------------------------------------------------------------------------------


'Salva no Banco de Dados
sql2 = "select * from reg_preventiva where equipamento = "&preventiva&""
Set salva = Server.CreateObject("ADODB.Recordset")
salva.open sql2, conex2, 3,3


salva("preventiva") = "S"
salva("cod_cli") = cod_cli
salva("equipamento") = cod_equipamento
salva("ocorrencia") = ocorrencia
salva("data") = data_inclusao
salva("hora") = hora_inclusao
salva("contador") = "1"
salva("responsavel") = responsavel
salva.update


salva.close
set salva = nothing 


END IF


   mostra.MoveNext
Wend

Compartilhar este post


Link para o post
Compartilhar em outros sites

coloque

preventiva = Split(request.form("preventiva"), ",")

 

Esse erro geralmente vem porque você uma sintaxe está tentando usar uma função como um array, ou uma string como uma função.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesmo erro!

 

Não sei se ajuda, mas se eu imprimir na tela o resultado de <%=request("preventiva")%>

Recebo o valor correto: 115091, 1150910

 

Que é o código de identificação de dois itens que marquei...

Compartilhar este post


Link para o post
Compartilhar em outros sites

estranho... eu testei o mesmo code que te enviei e recuperou normal e fez o SPLIT, apenas para teste crie uma outra page somente com os checkboxe´s e dê um simples SLPIT

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando atribuiu um split variável preventiva não comparar assim

IF preventiva <> "" THEN não funciona... valide primeiro o request se diferente de null depois atribua na variável por isso do tipos incompatíveis depois do split deve usar a variável preventiva assim...

 

a = preventiva(0)

b = preventiva(1)

 

Depois do split ela virou um vetor...

Compartilhar este post


Link para o post
Compartilhar em outros sites

faça igual como coloquei de exemplo:

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

×

Informação importante

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