Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Consulta Por Palavras Entre Datas Dando Erro


Notax

Pergunta

Pessoal, estou aqui denovo pra perguntar mais essa dúvida:

na verdade são tres duvidas...

Tenho uma consulta por palavras que está funcionando assim:

cmbTipo = request.form("cmbTipo")
ComandoSQL = "select * from a_pagar where tipo = '" &cmbTipo& "'"
o primeiro problema é que eu queria fazer ela entre datas tb... então tentei da seguinte forma:
ComandoSQL = "select * from a_pagar where tipo = '" &cmbTipo& "' "and" WHERE DATA BETWEEN #" & DateSerial(anoi,mesi,diai) & "# and #" & DateSerial(anof,mesf,diaf) & "# ORDER BY DATA ASC"
deu esse erro: Microsoft VBScript runtime error '800a000d' Type mismatch: '[string: "select * from a_paga"]' /padrão/a_pagar_resultado_consulta_tipo.asp, line 14 ... que vem a ser essa mesma linha aí em cima! notem que o nome da tabela onde quero fazer a consulta é a_pagar mesmo... está escrito certo! o segundo problema é neste campo cmbTipo que está abaixo... porque. ele permite escolhas múltiplas e eu gostaria que a consulta desse o resultado de uma ou mais palavras... sem limites... siginificaria dizer que se o cara quisesse escolher 5 palavras ele poderia... e a consulta sairia entre as datas iniciais e finais com todas as palavras que ele escolheu... no bd, estas palavras ficam na coluna TIPO...quando escolho mais de uma palavra não retorna nada... nem erro!
<select name="cmbTipo" size="5" multiple id="cmbTipo">
      <option value="01" selected>SELECIONE</option>
      <option>ÁGUA</option>
      <option>ALUGUEL</option>
      <option>CHEQUES</option>
      <option>CLIENTES</option>
      <option>CONDOMINIO</option>
      <option>CONTADOR</option>
       </select>
a terceira e última dúvida é com relação a soma... que está conforme espressão abaixo... mas ela ta retornando total errado... o que eu quero é a soma entre datainicial e a datafinal, mas somente envolvendo o valor das linhas das tabelas das palavras selecionadas... no bd, o valor que eu quero somar está no campo valor... e a tebela é exatamente assim: | codigo | data | histórico | tipo | valor |
strsql2 = "select SUM(valor) as tvalor from a_pagar WHERE DATA BETWEEN #" & DateSerial(anoi,mesi,diai) & "# and #" & DateSerial(anof,mesf,diaf) & "#"

alguém pode me dar essa força?

Agradeço desde já a atenção de todos...

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

primeiro: tenta assim:

ComandoSQL = "select * from a_pagar where tipo = '" & cmbTipo &  "' and DATA BETWEEN #" & anoi & "-" & mesi & "-" & diai & "# and #" & anof & "-" & mesf & "-" & diaf & "# ORDER BY DATA ASC"
veja se funciona, qualquer coisa posta o erro q der. segundo: o q acontece é ele retorna todas as opcoes numa unica string, separado por virgula. exemplo, se você selecionar a segunda e a tercera opcoes, o Request.Form("cmbTipo") vai trazer o valor "ÁGUA, ALUGUEL". ai você usa a funcao split pra dividir num array e ai você percorre todo o array adicionando na sua string sql as condicoes separadas por OR. tercero: tenta assim:
strsql2 = "select SUM(valor) as tvalor from a_pagar WHERE DATA BETWEEN #" & anoi & "-" & mesi & "-" & diai & "# and #" & anof & "-" & mesf & "-" & diaf & "#"

Link para o comentário
Compartilhar em outros sites

  • 0

Bah... valeu Kuroi... Grande ajuda... De grande valia mesmo... o problema 1 e 3 eu resolvi... só tive que mudar uma coisinha na questão 3... porque o somatório tava pegando o total entre as datas... mas não o total entre as datas referente somente aquele "tipo" consultado:

ficou assim:

Questão 1:

ComandoSQL = "select * from a_pagar where tipo = '" & cmbTipo &  "' and DATA BETWEEN #" & (datai) & "# and #" & (dataf) & "# ORDER BY DATA ASC"
Questão 3:
strsql2 = "select SUM(valor) as tvalor from a_pagar WHERE tipo = '" & cmbTipo &  "' and DATA BETWEEN #" & (datai) & "# and #" & (dataf) & "#"
Agora... a questão dois... para consultar duas ou mais palavras é onde eu to me atrapalhando pra valer... bom... com as modificações que me ajudaste a fazer a consulta está funcionando... mas somente para uma palavra, no caso de duas ou mais não retornava resultado nenhum... nem erro! daí o que eu fiz: peguei sua sugestão e fui estudar as questões de array e split... até esbocei umas coisinhas que estou colocando abaixo... mas não funcionou... e não tenho a menor ideia de onde estou errando... na verdade... nem sei se tem alguma coisa certa! então: incluí na dim assim:
MyArray, SQLconsulta
Daí... tentei fazer o array com o split assim:
MyArray = Split(cmbTipo, ",")
For i = 0 To UBound(cmbTipo)
SQLconsulta = SQLconsulta & " campo LIKE '%" & cmbTipo(i) & "%'"
If i <> UBound(cmbTipo) Then
SQLconsulta = SQLconsulta & "cmbTipo = " & Trim(MyArray(i)) & " OR "
End If
Next
e daí... eu substituí no ComandoSQL e no strsql2 o cmbTipo por SQLconsulta, ficando assim:
ComandoSQL = "select * from a_pagar where tipo = '" & SQLconsulta &  "' and DATA BETWEEN #" & (datai) & "# and #" & (dataf) & "# ORDER BY DATA ASC"
strsql2 = "select SUM(valor) as tvalor from a_pagar WHERE tipo = '" & SQLconsulta &  "' and DATA BETWEEN #" & (datai) & "# and #" & (dataf) & "#"

mas não funcionou... o erro que deu foi:

Microsoft VBScript runtime error '800a000d'

Type mismatch: 'UBound'

/padrão/a_pagar_resultado_consulta_tipo.asp, line 20

na verdade... eu acho que estou errando ate na lógica disso... porque assim, esse campo cmbTipo, ele não tem valores numéricos... somente palavras! então como é que eu vou fazer um for indicando palavras... sei lá... acho que já to falando um monte de besteiras... mas eu acho que o meu primeiro erro foi aí... e não to sabendo como arrumar! será que pode me dar mais essa força?

Abração... e valeu mesmo viu! Tuas ajudas já foram um grande avanço até o momento...

Link para o comentário
Compartilhar em outros sites

  • 0

Pessoal... fiz algumas modificações... mas ainda não deu certo para consultar mais de uma palavra... agora está assim:

array_tipo = split(cmbTipo,",")

For i=0 to ubound(array_tipo)

sql_tipo = sql_tipo & "a_pagar = " & Trim(array_tipo(i)) & " OR "

Next

mas continou não funcionando... a consulta retorna sem erros mas também sem resultado nenhum... to no escuro... será que alguém dá essa força?

outra coisa... quando eu tento usar somente o split pra fazer um teste... dá erro: type mismatch...

a questão do split é assim?

cmbTipo = split(request("cmbTipo"),",")

Editado por Notax
Link para o comentário
Compartilhar em outros sites

  • 0
a questão do split é assim?

cmbTipo = split(request("cmbTipo"),",")

esse erro acho q da porque cmbTipo não é array.

agora pra montar o select seria tipo assim:

sql_tipo = "("
array_tipo = Split(cmbTipo, ",")
For i = 0 To UBound(array_tipo)
     sql_tipo = sql_tipo & "tipo = '" & Trim(array_tipo(i)) & "'" & IIf(i <> UBound(array_tipo), " OR ", "")
Next
sql_tipo = sql_tipo & ")"[/code]
[code]ComandoSQL = "select * from a_pagar where " & sql_tipo &  " and DATA BETWEEN #" & (datai) & "# and #" & (dataf) & "# ORDER BY DATA ASC"
strsql2 = "select SUM(valor) as tvalor from a_pagar WHERE " & sql_tipo &  " and DATA BETWEEN #" & (datai) & "# and #" & (dataf) & "#"

Link para o comentário
Compartilhar em outros sites

  • 0

Bah Kuroi... valeu de novo... mas ainda não funcionou... será que errei mais alguma coisa?

a consulta retorna todos os resultados... independente de seleção!

o codigo ficou assim:

<%
Option Explicit
Response.Expires = 0
Dim objConn, objRs, strQuery, ComandoSQL, Conexao, objrs2, strsql2, valor_resultado, ddi, mmi, aai, datai, ddf, mmf, aaf, dataf, CmbTipo, sql_Tipo, array_tipo, i, IIf, tipo
Dim strConnection
'tipo = request.form ("cmbTipo")
sql_tipo = "("
array_tipo = Split(cmbTipo, ",")
For i = 0 To UBound(array_tipo)
     sql_tipo = sql_tipo & "tipo = '" & Trim(array_tipo(i)) & "'" & IIf(i <> UBound(array_tipo), " OR ", "")
Next
sql_tipo = sql_tipo & ")"
ComandoSQL = "select * from a_pagar where '" & sql_tipo &  "' and DATA BETWEEN #" & (datai) & "# and #" & (dataf) & "# ORDER BY DATA ASC"
strsql2 = "select SUM(valor) as tvalor from a_pagar WHERE '" & sql_tipo &  "' and DATA BETWEEN #" & (datai) & "# and #" & (dataf) & "#"

o split já está incluso nesse array... então fiz certo em tirar aquilo que vinha tentando né?

valeu a atenção!

desculpa qualquer errinho que eu possa ter cometido...

Editado por Notax
Link para o comentário
Compartilhar em outros sites

  • 0

mas daí deu esse erro:

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

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression '() and DATA BETWEEN #1/1/2007# and #12/12/2007#'.

/padrão/a_pagar_resultado_consulta_tipo.asp, line 35 que vem a ser: objrs2.open strsql2, objconn, 3, 2

ficou assim:

'tipo = request.form ("cmbTipo")

sql_tipo = "("
array_tipo = Split(cmbTipo, ",")
For i = 0 To UBound(array_tipo)
     sql_tipo = sql_tipo & "tipo = '" & Trim(array_tipo(i)) & "'" & IIf(i <> UBound(array_tipo), " OR ", "")
Next
sql_tipo = sql_tipo & ")"


Session.LCID=1033
ComandoSQL = "select * from a_pagar where " & sql_tipo &  " and DATA BETWEEN #" & (datai) & "# and #" & (dataf) & "# ORDER BY DATA ASC"
Set objConn =  Server.CreateObject("ADODB.Connection")
objConn.Open "DBQ=" & Server.MapPath("bd.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}","username","password"
'strQuery = "SELECT * FROM a_pagar WHERE tipo"
set objrs2 = server.createobject("adodb.recordset")
strsql2 = "select SUM(valor) as tvalor from a_pagar WHERE " & sql_tipo &  " and DATA BETWEEN #" & (datai) & "# and #" & (dataf) & "#"
Session.LCID=1046
objrs2.open strsql2, objconn, 3, 2

Editado por Notax
Link para o comentário
Compartilhar em outros sites

  • 0

o sql_tipo deve tar ficando em branco, acho q você não ta passando o Request pro cmbTipo. ai você ta dando split numa variavel em branco. faca assim:

cmdTipo = Trim(Request.Form("cmdTipo"))
sql_tipo = ""
If cmdTipo <> "" Then
     sql_tipo = "("
     array_tipo = Split(cmbTipo, ",")
     For i = 0 To UBound(array_tipo)
          sql_tipo = sql_tipo & "tipo = '" & Trim(array_tipo(i)) & "'" & IIf(i <> UBound(array_tipo), " OR ", "")
     Next
     sql_tipo = sql_tipo & ")"
End If[/code]

Link para o comentário
Compartilhar em outros sites

  • 0

aí deu este outro erro aqui:

Microsoft VBScript runtime error '800a000d'

Type mismatch

/padrão/a_pagar_resultado_consulta_tipo.asp, line 25 que vem a ser:

sql_tipo = sql_tipo & "tipo = '" & Trim(array_tipo(i)) & "'" & IIf(i <> UBound(array_tipo), " OR ", "")

Link para o comentário
Compartilhar em outros sites

  • 0

rsssssssss...bah amigão... to te incomodando né? o pior é que eu já tinha feito isso... mas conferi e testei denovo... mesmo erro...

ficou assim:

cmbTipo = Trim(Request.Form("cmbTipo"))
sql_tipo = ""
If cmbTipo <> "" Then
     sql_tipo = "("
     array_tipo = Split(cmbTipo, ",")
     For i = 0 To UBound(array_tipo)
          sql_tipo = sql_tipo & "tipo = '" & Trim(array_tipo(i)) & "'" & IIf(i <> UBound(array_tipo), " OR ", "")
     Next
     sql_tipo = sql_tipo & ")"
End If 

Session.LCID=1033
ComandoSQL = "select * from a_pagar where " & sql_tipo &  " and DATA BETWEEN #" & (datai) & "# and #" & (dataf) & "# ORDER BY DATA ASC"
Set objConn =  Server.CreateObject("ADODB.Connection")
objConn.Open "DBQ=" & Server.MapPath("bd.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}","username","password"
'strQuery = "SELECT * FROM a_pagar WHERE tipo"
set objrs2 = server.createobject("adodb.recordset")
strsql2 = "select SUM(valor) as tvalor from a_pagar WHERE " & sql_tipo &  " and DATA BETWEEN #" & (datai) & "# and #" & (dataf) & "#"
Session.LCID=1046 
objrs2.open strsql2, objconn, 3, 2

queres que te mande o código completo? adianta alguma coisa?

pô sem palavras pra te agradecer! desculpa o incomodo e valeu pela atenção!

Link para o comentário
Compartilhar em outros sites

  • 0

estranho. mas você tem certeza q a linha 25 é essa mesmo?? porque não sei o q poderia ta errado nela. testei aqui o codigo igualzinho no Visual Basic e funcionou. posta o codigo desda primeira linha, pra gente ver.

uma coisa, a variavel array_tipo esta declarada (com o Dim)?? se estiver, você esta declarando como array (com parenteses)?? se tiver, tire-os.

outra coisa q você pode fazer, só de teste, é um Response.Write do Request.Form pra ver o q ele retorna. tipo, tenta assim:

cmbTipo = Trim(Request.Form("cmbTipo"))
sql_tipo = ""
If cmbTipo <> "" Then
     Response.Write(cmbTipo)
     Response.End()
     sql_tipo = "("
     array_tipo = Split(cmbTipo, ",")
     For i = 0 To UBound(array_tipo)
          sql_tipo = sql_tipo & "tipo = '" & Trim(array_tipo(i)) & "'" & IIf(i <> UBound(array_tipo), " OR ", "")
     Next
     sql_tipo = sql_tipo & ")"
End If[/code]

ai ele deve mostrar o q esta vindo do formulario. ai posta pra gente ver o q ele escreveu.

Link para o comentário
Compartilhar em outros sites

  • 0

se eu tiro array_tipo da dim aparece isso e mantenho os parentes aparece isso:

Microsoft VBScript runtime error '800a01f4'

Variable is undefined: 'array_tipo'

/padrão/a_pagar_resultado_consulta_tipo.asp, line 23

se eu deixo na dim e tiro os parenteses aparece isso:

Microsoft VBScript compilation error '800a0401'

Expected end of statement

/padrão/a_pagar_resultado_consulta_tipo.asp, line 26

For i = 0 To UBound array_tipo

--------------------^

com os response write (selecionando duas palavras) aconteceu isto:

PRÓ-LABORE, SAÚDE

o código completo é esse:

<%
Option Explicit
Response.Expires = 0
Dim objConn, objRs, strQuery, ComandoSQL, Conexao, objrs2, strsql2, valor_resultado, ddi, mmi, aai, datai, ddf, mmf, aaf, dataf, CmbTipo, sql_Tipo, array_tipo, i, IIf, tipo
Dim strConnection
ddi = request.form ("txtddi")
mmi = request.form ("txtmmi")
aai = request.form ("txtaai")
datai = (ddi &"/"& mmi &"/"& aai)
datai = Cdate(day (datai) &"/"& month (datai) &"/"& year (datai))

ddf = request.form ("txtddf")
mmf = request.form ("txtmmf")
aaf = request.form ("txtaaf")
dataf = (ddf &"/"& mmf &"/"& aaf)
dataf = Cdate(day (dataf) &"/"& month (dataf) &"/"& year (dataf))
'tipo = request.form ("cmbTipo")

cmbTipo = Trim(Request.Form("cmbTipo"))
sql_tipo = ""
If cmbTipo <> "" Then
     sql_tipo = "("
      array_tipo = Split(cmbTipo, ",")
     For i = 0 To UBound(array_tipo)
          sql_tipo = sql_tipo & "tipo = '" & Trim(array_tipo(i)) & "'" & IIf(i <> UBound(array_tipo), " OR ", "")
     Next
     sql_tipo = sql_tipo & ")"
End If 

Session.LCID=1033
ComandoSQL = "select * from a_pagar where " & sql_tipo &  " and DATA BETWEEN #" & (datai) & "# and #" & (dataf) & "# ORDER BY DATA ASC"
Set objConn =  Server.CreateObject("ADODB.Connection")
objConn.Open "DBQ=" & Server.MapPath("bd.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}","username","password"
'strQuery = "SELECT * FROM a_pagar WHERE tipo"
set objrs2 = server.createobject("adodb.recordset")
strsql2 = "select SUM(valor) as tvalor from a_pagar WHERE " & sql_tipo &  " and DATA BETWEEN #" & (datai) & "# and #" & (dataf) & "#"
Session.LCID=1046 
objrs2.open strsql2, objconn, 3, 2
valor_resultado = objrs2 ("tvalor")
Set ObjRs = objConn.Execute(ComandoSQL)
%>
<html>
<head>
<title>SJ Finance - à Pagar - consulta</title>
</head>
<body bgcolor="#FFFFFF">
<div align="center" style="width: 756; height: 119"> 
  <p align="left"><font face="Verdana, Arial, Helvetica, sans-serif"><em><strong>Contas 
    &agrave; <font color="#FF0000">Pagar</font> (consulta)</strong></em></font></p>
  <table width="947" border="0" cellspacing="0" cellpadding="0" height="1">
    <tr>
      <td width="947" valign="top" height="136"> 
        <table border="0" cellpadding="0" cellspacing="0" width="958">
          <tr bgcolor="ffffff"> 
            <td width="958" colspan="3">
              <table width="100%" border="0" cellspacing="2" cellpadding="2">
                            </table>
              
            </td>
          </tr>
          <tr> 
            <td colspan="3"> 
              <form method="GET" action="action_excluir_a_pagar.asp">
                <table width="902" border="0" cellspacing="0" cellpadding="0" height="1">
                  <tr> 
                    <td height="1" align="center" width="952"> 
                      <table border="0" width="883" height="8" cellpadding="2">
                        <tr bgcolor="#0099FF"> 
                          <td width="96" height="1" align="center"> <font size="1" color="FFFFFF"><b><font face="Verdana">DATA</font></b></font></td>
                          <td width="318" height="1" align="center"> <font size="1" color="FFFFFF"><b></b> 
                            </font> <font size="1" color="FFFFFF"><b><font face="Verdana">HIST&Oacute;RICO</font></b> 
                            </font></td>
                          <td width="259" height="1" align="center"> <font size="1" color="FFFFFF"><b><font face="Verdana">TIPO</font></b></font></td>
                          <td width="184" height="1" align="center"><font size="1" color="FFFFFF"><b><font face="Verdana">VALOR</font></b> 
                            </font></td>
                        </tr>
                        <%While Not objRS.EOF %>
                        <tr bgcolor="#FFFFFF"> 
                          <td width="96" height="1" align="center" style="border-style: solid; border-width: 2"> <div align="left"><font size="1"><b><font face="Verdana, Arial, Helvetica, sans-serif" color="#000000"> 
                              <%Response.write objRS("data")%>
                              </font> </b></font></div></td>
                          <td height="1" align="center" style="border-style: solid; border-width: 2"> <div align="left"><font size="1"><b><font face="Verdana, Arial, Helvetica, sans-serif" color="#000000"> 
                              </font> </b></font> <font size="1"><b><font face="Verdana, Arial, Helvetica, sans-serif"> 
                              <%Response.write objRS("historico")%>
                              </font></b></font></div></td>
                          <td width="259" height="1" align="center" style="border-style: solid; border-width: 2"> <div align="left"><font size="1"><b><font face="Verdana, Arial, Helvetica, sans-serif"> 
                              <%Response.write objRS("tipo")%></a>
                              </font></b></font></div></td>
                          <td width="184" height="1" align="center" style="border-style: solid; border-width: 2"> <div align="left"><font size="1"><b><font face="Verdana, Arial, Helvetica, sans-serif" color="#000000"> 
                              <%Response.write formatnumber(objRS("valor"),2)%>
                              </font></b></font></div></td>
                        </tr>
                        
                        <%
  'Movendo para o proximo registro
  objRS.MoveNext
  Wend
    %>
                      </table>
                    </td>
                  </tr>
                </table>
              </form>
            </td>
          </tr>
        </table>
      </td>
    </tr>
  </table>
  <b>Valor total à pagar para o Período Consultado = R$ 
  <%  Response.Write(objrs2.fields("tvalor").value)%>
  </B> 
  <%  
  objRs.close
  objConn.close
  Set objRs = Nothing
  Set objConn = Nothing
  %>
</div>
</body>
</html>

valeu mesmo pela dedicação e atenção!

Editado por Notax
Link para o comentário
Compartilhar em outros sites

  • 0
se eu tiro array_tipo da dim aparece isso:

Microsoft VBScript runtime error '800a01f4'

Variable is undefined: 'array_tipo'

/padrão/a_pagar_resultado_consulta_tipo.asp, line 23

ta, eu quis dizer q não era pra declarar Dim array_tipo() e sim Dim array_tipo. você ta fazendo certo.

o Response.Write tb ta voltando certo, o erro acho q é porque você ta tentando declarar uma variavel chamada IIf. e IIf é uma funcao e não variavel. apaga o IIf da linha de declaracoes e veja se funciona.

Link para o comentário
Compartilhar em outros sites

  • 0

nossa, nunca vi isso antes.

sei la, então tenta fazer sem iif, faca com if na mao mesmo. tipo assim:

cmbTipo = Trim(Request.Form("cmbTipo"))
sql_tipo = ""
If cmbTipo <> "" Then
     sql_tipo = "("
      array_tipo = Split(cmbTipo, ",")
     For i = 0 To UBound(array_tipo)
          If i <> UBound(array_tipo) Then
               sql_tipo = sql_tipo & "tipo = '" & Trim(array_tipo(i)) & "' OR "
          Else
               sql_tipo = sql_tipo & "tipo = '" & Trim(array_tipo(i)) & "'"
          End If
     Next
     sql_tipo = sql_tipo & ")"
End If[/code]

Link para o comentário
Compartilhar em outros sites

  • 0

Bah cara!

Pô... valeu mesmo! agora funcionou! desse último jeito que colocaste!

Nem acredito... to aqui em cima disso desde as 07:00 da manha!

bah kuroi... brigadão por não ter me abandonado nesse "suporte instantâneo"... praticamente MSN!... se foi dificil pra ti imagina pra mim! acho que só ia conseguir sozinho no final do ano! Sem tua ajuda ia ser muito f*****!

Sem palavras... pô... valeu de coração mesmo... brigadão cara!

Um forte abraço... e boa noite pra ti! Muito, muito obrigado!

Link para o comentário
Compartilhar em outros sites

  • 0

Pois é... ontem eu fiquei com vergonha de pedir já que me ajudaste um monte... mas já que comentou... se tiver ainda um pouco de paciencia e tempo... poderia comentar esse último código aí?

To tendo bastante dificuldade em entender a lógica deste "mecanismo"...

Tipo... estudei o significado de uma array que é uma variável pra aramazenar mais de um valor... mas daí pro caso prático como acima muda muito de figura!

sei lá... só se não for muito incomodo pra ti...

tenho certeza que ajudaria não só a mim mas muitas pessoas!

valeu pela força e principalmente pela paciência!

Link para o comentário
Compartilhar em outros sites

  • 0

mano num tem q te vergonha não.

array funciona da seguinte forma, ele pode armazenar valores diferentes numa variavel só. exemplo, você tem 10 opcoes que o usuario vai preencher, e quer guardar o valor delas em variaveis. em vez de delcarar 10 variaveis, tipo assim:

Dim var1, var2, var3, etc...
você declara um array com 10 indices assim:
Dim var(9)
note q 9 é o maior indice do array. ou seja você pode acessar da posicao 0 ate a posicao 9. ou seja, 10 posicoes. ai pra acessar os valores, você simplesmente passa o indice. tipo assim:
var(0) = "valor1"
Response.Write (var(0))
var(1) = "valor2"
Response.Write (var(1))[/code] a grande vantagem é q você pode acessar os valores todos de uma vez num For ou While, como você fez no seu codigo. quanto a funcao Split, ela transforma uma string num array, separando pelo caractere desejado (no nosso caso, a virgula). exemplo, você tem a variavel xxx com o conteudo "zero-um-dois-tres". usando o split, tipo assim:
[code]var = split(xxx, "-")
você vai ter como resultado q: var(0) = "zero" var(1) = "um" var(2) = "dois" var(3) = "tres" deu pra entender?? e pra explicar melhor o codigo, dei uma comentada nas linhas abaxo, qualquer duvida, pergunta:
cmbTipo = Trim(Request.Form("cmbTipo")) 'Aqui você pega o conteudo q veio do formulario e poe na variavel cmbTipo
sql_tipo = ""
If cmbTipo <> "" Then 'Aqui você testa se o cmbTipo não ta em branco. porque se tiver, ele não vai filtrar por tipo, então ele dexa o sql_tipo em branco
     sql_tipo = "("
      array_tipo = Split(cmbTipo, ",") 'Aqui você joga cada um dos valores, separados pela virgula, num dos indices do array
     For i = 0 To UBound(array_tipo) 'aqui você percorre o array da posicao 0 (inicial), até a ultima (q nos não sabemos qual é, pois não sabeos qtos valores ele selecionou. por isso usamos a funcao UBound() q nos tras o maior indice,


          'Nas linhas abaixo a gente vai montando o select. o if serve pra q, no ultimo valor, ele não ponha um OR no final, pois ele não vai continuar a string depois. exemplo, se o texto ficasse assim "(tipo = 'um' OR tipo = 'dois' OR tipo = 'tres' OR)", você fica q fica um OR no final q não tem continuidade. isso daria erro na hora de executar
          If i <> UBound(array_tipo) Then
               sql_tipo = sql_tipo & "tipo = '" & Trim(array_tipo(i)) & "' OR "
          Else
               sql_tipo = sql_tipo & "tipo = '" & Trim(array_tipo(i)) & "'"
          End If
     Next
     sql_tipo = sql_tipo & ")"
End If[/code]

Link para o comentário
Compartilhar em outros sites

  • 0

Bah! Agora ficou tudo muito mais claro! deu pra entender sim... muito obrigado! ficou ótimo... valeu mesmo...

o pior é que por algum detalhe to no meio de um mistério... fui passar esse código pra dentro da minha app... então eu resolvi colocálo em uma sub... pois faz parte de uma consulta refinada...

ou seja... naquele form de datas tem um checbox chcRefinar... que se clicado mostra o cmbTipo do contrário não... daí so faz a consulta por datas...

Quando tento consultar usando a sub desse código que tu fez pra mim, ou seja, com o chcRefinar marcado... da um erro... com o chcRefinar desmarcado vai bem na boa! o erro é:

Microsoft VBScript runtime error '800a01a8'

Object required: ''

/padrão/a_pagar_resultado_consulta.asp, line 118 que vem a ser: <%While Not objRS.EOF %>

é dureza quando dá esses mistérios... uma coisa eu tenho certeza... os dois códigos... das duas subs funcionam muito bem separados! sei lá... já passei linha por linha um milhão de vezes e não consigo ver nenhum erro... acho que deve ser uma bobagem... todo caso... já to até meio zonzo de tanto procurar esse erro!

to postando o código ai caso possa dar uma analizada... mas de qualquer. forma já valeu muito toda tua força!

um forte abraço e muito obrigado mais uma vez!

<%
Option Explicit
Response.Expires = 0
Dim objConn, objRs, strQuery, ComandoSQL, Conexao, objrs2, strsql2, valor_resultado, ddi, mmi, aai, datai, ddf, mmf, aaf, dataf, CmbTipo, sql_Tipo, array_tipo, i, tipo
Dim strConnection, chcRefinar
chcRefinar = request.form ("chcRefinar")
if chcRefinar = true then
call comrefino()
end if

if chcRefinar = false then
call semrefino()
end if
%>

<%sub comrefino()
ddi = request.form ("txtddi")
mmi = request.form ("txtmmi")
aai = request.form ("txtaai")
datai = (ddi &"/"& mmi &"/"& aai)
datai = Cdate(day (datai) &"/"& month (datai) &"/"& year (datai))

ddf = request.form ("txtddf")
mmf = request.form ("txtmmf")
aaf = request.form ("txtaaf")
dataf = (ddf &"/"& mmf &"/"& aaf)
dataf = Cdate(day (dataf) &"/"& month (dataf) &"/"& year (dataf))

cmbTipo = Trim(Request.Form("cmbTipo"))
sql_tipo = ""
If cmbTipo <> "" Then
     sql_tipo = "("
      array_tipo = Split(cmbTipo, ",")
     For i = 0 To UBound(array_tipo)
          If i <> UBound(array_tipo) Then
               sql_tipo = sql_tipo & "tipo = '" & Trim(array_tipo(i)) & "' OR "
          Else
               sql_tipo = sql_tipo & "tipo = '" & Trim(array_tipo(i)) & "'"
          End If
     Next
     sql_tipo = sql_tipo & ")"
End If

Session.LCID=1033
ComandoSQL = "select * from a_pagar where " & sql_tipo &  " and DATA BETWEEN #" & (datai) & "# and #" & (dataf) & "# ORDER BY DATA ASC"
Set objConn =  Server.CreateObject("ADODB.Connection")
objConn.Open "DBQ=" & Server.MapPath("bd.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}","username","password"
set objrs2 = server.createobject("adodb.recordset")
strsql2 = "select SUM(valor) as tvalor from a_pagar WHERE " & sql_tipo &  " and DATA BETWEEN #" & (datai) & "# and #" & (dataf) & "#"
Session.LCID=1046 
objrs2.open strsql2, objconn, 3, 2
valor_resultado = objrs2 ("tvalor")
Set ObjRs = objConn.Execute(ComandoSQL)
end sub%>


<%sub semrefino()
ddi = request.form ("txtddi")
mmi = request.form ("txtmmi")
aai = request.form ("txtaai")
datai = (ddi &"/"& mmi &"/"& aai)
datai = Cdate(day (datai) &"/"& month (datai) &"/"& year (datai))

ddf = request.form ("txtddf")
mmf = request.form ("txtmmf")
aaf = request.form ("txtaaf")
dataf = (ddf &"/"& mmf &"/"& aaf)
dataf = Cdate(day (dataf) &"/"& month (dataf) &"/"& year (dataf))

Session.LCID=1033
ComandoSQL = "SELECT * FROM a_pagar WHERE DATA BETWEEN #" & (datai) & "# and #" & (dataf) & "# ORDER BY DATA ASC"
Set objConn =  Server.CreateObject("ADODB.Connection")
objConn.Open "DBQ=" & Server.MapPath("bd.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}","username","password"
strQuery = "SELECT * FROM a_pagar"
Set ObjRs = objConn.Execute(ComandoSQL)
set objrs2 = server.createobject("adodb.recordset")
strsql2 = "select SUM(valor) as tvalor from a_pagar WHERE DATA BETWEEN #" & (datai) & "# and #" & (dataf) & "#"
Session.LCID=1046 
objrs2.open strsql2, objconn, 3, 2
valor_resultado = objrs2 ("tvalor")
end sub
%>
<html>
<head>
<title>SJ Finance - à Pagar - consulta</title>
</head>
<body bgcolor="#FFFFFF">
<div align="center" style="width: 756; height: 119"> 
  <p align="left"><font face="Verdana, Arial, Helvetica, sans-serif"><em><strong>Contas 
    &agrave; <font color="#FF0000">Pagar</font> (consulta)</strong></em></font></p>
  <table width="947" border="0" cellspacing="0" cellpadding="0" height="1">
    <tr>
      <td width="947" valign="top" height="136"> 
        <table border="0" cellpadding="0" cellspacing="0" width="958">
          <tr bgcolor="ffffff"> 
            <td width="958" colspan="3">
              <table width="100%" border="0" cellspacing="2" cellpadding="2">
                            </table>
              
            </td>
          </tr>
          <tr> 
            <td colspan="3"> 
              <form method="GET" action="action_excluir_a_pagar.asp">
                <table width="902" border="0" cellspacing="0" cellpadding="0" height="1">
                  <tr> 
                    <td height="1" align="center" width="952"> 
                      <table border="0" width="883" height="8" cellpadding="2">
                        <tr bgcolor="#0099FF"> 
                          <td width="96" height="1" align="center"> <font size="1" color="FFFFFF"><b><font face="Verdana">DATA</font></b></font></td>
                          <td width="318" height="1" align="center"> <font size="1" color="FFFFFF"><b></b> 
                            </font> <font size="1" color="FFFFFF"><b><font face="Verdana">HIST&Oacute;RICO</font></b> 
                            </font></td>
                          <td width="259" height="1" align="center"> <font size="1" color="FFFFFF"><b><font face="Verdana">TIPO</font></b></font></td>
                          <td width="184" height="1" align="center"><font size="1" color="FFFFFF"><b><font face="Verdana">VALOR</font></b> 
                            </font></td>
                        </tr>
                        <%While Not objRS.EOF %>
                        <tr bgcolor="#FFFFFF"> 
                          <td width="96" height="1" align="center" style="border-style: solid; border-width: 2"> <div align="left"><font size="1"><b><font face="Verdana, Arial, Helvetica, sans-serif" color="#000000"> 
                              <%Response.write objRS("data")%>

                              </font> </b></font></div></td>
                          <td height="1" align="center" style="border-style: solid; border-width: 2"> <div align="left"><font size="1"><b><font face="Verdana, Arial, Helvetica, sans-serif" color="#000000"> 
                              </font> </b></font> <font size="1"><b><font face="Verdana, Arial, Helvetica, sans-serif"> 
                              <%Response.write objRS("historico")%>
                              </font></b></font></div></td>
                          <td width="259" height="1" align="center" style="border-style: solid; border-width: 2"> <div align="left"><font size="1"><b><font face="Verdana, Arial, Helvetica, sans-serif"> 
                              <%Response.write objRS("tipo")%></a>
                              </font></b></font></div></td>
                          <td width="184" height="1" align="center" style="border-style: solid; border-width: 2"> <div align="left"><font size="1"><b><font face="Verdana, Arial, Helvetica, sans-serif" color="#000000"> 
                              <%Response.write formatnumber(objRS("valor"),2)%>
                              </font></b></font></div></td>
                        </tr>
                        
                        <%
  'Movendo para o proximo registro
  objRS.MoveNext
  Wend
    %>
                      </table>
                    </td>
                  </tr>
                </table>
              </form>
            </td>
          </tr>
        </table>
      </td>
    </tr>
  </table>
  <b>Valor total à pagar para o Período Consultado = R$ 
  <%  Response.Write(objrs2.fields("tvalor").value)%>
  </B> 
  <%  
  objRs.close
  objConn.close
  Set objRs = Nothing
  Set objConn = Nothing
  %>
</div>
</body>
</html>

Editado por Notax
Link para o comentário
Compartilhar em outros sites

  • 0

o q acontece é q o RecordSet esta vazio nessa hora, porque ele não ta passando por nenhuma das duas subs.

provavelemnte porque nessa parte o chcRefinar não vem true nem false.

chcRefinar = request.form ("chcRefinar")
if chcRefinar = true then
call comrefino()
end if

if chcRefinar = false then
call semrefino()
end if[/code] da uma olhada, o checkbox só vai ser "true" (e como string) se você setar nele na propriedade value, mas ele só pode vir como true ou vazio, nunca como false. e se você não setar a propriedade value do checkbox, ele vem como "on" quando checado e vazio quando não checado. ou seja, o seu if deveria ficar tipo assim:
[code]chcRefinar = request.form ("chcRefinar")
if chcRefinar = "on" then
call comrefino()
ElseIf chcRefinar = "" then
call semrefino()
end if

Link para o comentário
Compartilhar em outros sites

  • 0

Putz... é verdade me passou essa... mas mesmo assim não funcionou! acerdita nisso?

o chcRefinar está assim:

<input name="chcRefinar" type="checkbox" id="chcRefinar" value="ON" onclick="ExibeCampo(this.checked)">

está setado como ON mesmo...

mas o erro foi exatamente o mesmo e apenas quando vou consultar usando o cmbTipo... deixei as condicionais exatamente assim:

chcRefinar = request.form ("chcRefinar")

if chcRefinar = "on" then

call comrefino()

ElseIf chcRefinar = "" then

call semrefino()

end if

é de arrancar os cabelos!

valeu a força!

Link para o comentário
Compartilhar em outros sites

  • 0

Quando tento consultar usando a sub desse código que tu fez pra mim, ou seja, com o chcRefinar marcado... da um erro... com o chcRefinar desmarcado vai bem na boa! o erro é:

Microsoft VBScript runtime error '800a01a8'

Object required: ''

/padrão/a_pagar_resultado_consulta.asp, line 118 que vem a ser: <%While Not objRS.EOF %>

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...