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

Erro Na Media Avg - Urgente


Glauco

Pergunta

Por favor me ajudem!!!!

Estou com o seguinte problema:

Preciso retornar a média dos campos de uma tabela, estou usando o comando AVG do SQL, uso tb uma função para montar o comando SQL que preciso. Depois de tudo mondato, mando esxecutar o SQL que é executado sem problemas, mas quando atribua a função ao resultado do RcordSet, ou mando escrever atravaes de um Response.write é retornado o seguinte erro:

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

Erros

/ef/resposta_cons.asp, line 97

Já coloque o SQL no Access e ele retorna a média perfeitamente, não consigo achar o problema, por favor me ajudem...

o código da função é o seguinte:

---------------------------------------------------------------------------------------

function media(dado,sexo,serie,escola,anobase,idade,ano)

dim SQL, procura, anoAtual, anoNasc, Inicio, Fim, rsMedia, cont, tabela, med

tabela = "tb_teste."&dado

if len(idade) <>0 then

AnoAtual = year(date)

anoNasc = anoatual - idade

Inicio = "01/01/"&anonasc

fim = left(date,6)&anonasc

end if

procura = "Where" 'linha 49

SQL = "SELECT avg("&tabela&") AS "&dado&" " _

& "FROM TB_escolas INNER JOIN ((TB_aluno INNER JOIN TB_teste ON TB_aluno.codAluno = TB_teste.codAluno) " _

& "INNER JOIN TB_escolaridade ON TB_aluno.codAluno = TB_escolaridade.codAluno) " _

& "ON TB_escolas.codEscola = TB_escolaridade.codEscola"

if sexo <> 0 then

if Instr(1,SQL,procura,1) <> 0 then

SQL = SQL & " AND ((TB_aluno.sexo)="& sexo &")"

else

SQL = SQL & " WHERE ((TB_aluno.sexo)="& sexo &")"

end if

end if

if serie <> 0 then

if Instr(1,SQL,procura,1) <> 0 then

SQL = SQL & " AND ((TB_escolaridade.serie)="& serie &")"

else

SQL = SQL & " WHERE ((TB_escolaridade.serie)="& serie &")"

end if

end if

if escola <> 0 then

if Instr(1,SQL,procura,1) <> 0 then

SQL = SQL & " AND ((TB_escolas.codEscola)="& escola &")"

else

SQL = SQL & " WHERE ((TB_escolas.codEscola)="& escola &")"

end if

end if

if anobase <> 0 then

if Instr(1,SQL,procura,1) <> 0 then

SQL = SQL & " AND ((TB_teste.Anobase)="& anobase &")"

else

SQL = SQL & " WHERE ((TB_teste.Anobase)="& anobase &")"

end if

end if 'linha 81

if len(idade) <> 0 then

if Instr(1,SQL,procura,1) <> 0 then

SQL = SQL & " AND (((TB_aluno.Nascimento)>=#"&inicio&"#) AND ((TB_aluno.Nascimento)<=#"&fim&"#))"

else

SQL = SQL & " WHERE (((TB_aluno.Nascimento)>=#"&inicio&"#) AND ((TB_aluno.Nascimento)<=#"&fim&"#))"

end if

end if

if len(ano) <> 0 then

if Instr(1,SQL,procura,1) <> 0 then

SQL = SQL & " AND year(TB_aluno.Nascimento)="& ano &""

else

SQL = SQL & " WHERE year(TB_aluno.Nascimento)="& ano &""

end if

end if 'linha 95

set rsMedia = conDBef.execute(""&SQL&"")

media = rsMedia(""&dado&"")

end function

-------------------------------------------------------------------------------------

O código de chamada é seguinte:

-------------------------------------------------------------------------------------

response.write media("altura",sexo,serie,escola,anobase,idade,ano)

-------------------------------------------------------------------------------------

Desde já agradeço!!!!!

OBrigado!!!!!!

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

olá amigo!

Mas o que você quis fazer nessa linha:

response.write media("altura",sexo,serie,escola,anobase,idade,ano)
?

Pois, o response.Write serve apenas para escrever na tela alguma coisa.

A sintaxe que você colocou está errada mesmo, por isso o erro!

O que é aquele media fora do parêntese? E o restante o que é? Tudo variavel?

Explica aí, ok?

Link para o comentário
Compartilhar em outros sites

  • 0
Por favor me ajudem!!!!

Estou com o seguinte problema:

Preciso retornar a média dos campos de uma tabela, estou usando o comando AVG do SQL, uso tb uma função para montar o comando SQL que preciso. Depois de tudo mondato, mando esxecutar o SQL que é executado sem problemas, mas quando atribua a função ao resultado do RcordSet, ou mando escrever atravaes de um Response.write é retornado o seguinte erro:

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

Erros

/ef/resposta_cons.asp, line 97

Já coloque o SQL no Access e ele retorna a média perfeitamente, não consigo achar o problema, por favor me ajudem...

o código da função é o seguinte:

---------------------------------------------------------------------------------------

function media(dado,sexo,serie,escola,anobase,idade,ano)

dim SQL, procura, anoAtual, anoNasc, Inicio, Fim, rsMedia, cont, tabela, med

tabela = "tb_teste."&dado

if len(idade) <>0 then

AnoAtual = year(date)

anoNasc = anoatual - idade

Inicio = "01/01/"&anonasc

fim = left(date,6)&anonasc

end if

procura = "Where" 'linha 49

SQL = "SELECT avg("&tabela&") AS "&dado&" " _

& "FROM TB_escolas INNER JOIN ((TB_aluno INNER JOIN TB_teste ON TB_aluno.codAluno = TB_teste.codAluno) " _

& "INNER JOIN TB_escolaridade ON TB_aluno.codAluno = TB_escolaridade.codAluno) " _

& "ON TB_escolas.codEscola = TB_escolaridade.codEscola"

if sexo <> 0 then

if Instr(1,SQL,procura,1) <> 0 then

SQL = SQL & " AND ((TB_aluno.sexo)="& sexo &")"

else

SQL = SQL & " WHERE ((TB_aluno.sexo)="& sexo &")"

end if

end if

if serie <> 0 then

if Instr(1,SQL,procura,1) <> 0 then

SQL = SQL & " AND ((TB_escolaridade.serie)="& serie &")"

else

SQL = SQL & " WHERE ((TB_escolaridade.serie)="& serie &")"

end if

end if

if escola <> 0 then

if Instr(1,SQL,procura,1) <> 0 then

SQL = SQL & " AND ((TB_escolas.codEscola)="& escola &")"

else

SQL = SQL & " WHERE ((TB_escolas.codEscola)="& escola &")"

end if

end if

if anobase <> 0 then

if Instr(1,SQL,procura,1) <> 0 then

SQL = SQL & " AND ((TB_teste.Anobase)="& anobase &")"

else

SQL = SQL & " WHERE ((TB_teste.Anobase)="& anobase &")"

end if

end if 'linha 81

if len(idade) <> 0 then

if Instr(1,SQL,procura,1) <> 0 then

SQL = SQL & " AND (((TB_aluno.Nascimento)>=#"&inicio&"#) AND ((TB_aluno.Nascimento)<=#"&fim&"#))"

else

SQL = SQL & " WHERE (((TB_aluno.Nascimento)>=#"&inicio&"#) AND ((TB_aluno.Nascimento)<=#"&fim&"#))"

end if

end if

if len(ano) <> 0 then

if Instr(1,SQL,procura,1) <> 0 then

SQL = SQL & " AND year(TB_aluno.Nascimento)="& ano &""

else

SQL = SQL & " WHERE year(TB_aluno.Nascimento)="& ano &""

end if

end if 'linha 95

set rsMedia = conDBef.execute(""&SQL&"")

media = rsMedia(""&dado&"")

end function

-------------------------------------------------------------------------------------

O código de chamada é seguinte:

-------------------------------------------------------------------------------------

response.write media("altura",sexo,serie,escola,anobase,idade,ano)

-------------------------------------------------------------------------------------

Desde já agradeço!!!!!

OBrigado!!!!!!

Não entendi muito o que você quer fazer....Pode explicar melhor?? huh.gif

[]'s

Victor

Link para o comentário
Compartilhar em outros sites

  • 0

olá amigo!

Mas o que você quis fazer nessa linha:

response.write media("altura",sexo,serie,escola,anobase,idade,ano)
?

Pois, o response.Write serve apenas para escrever na tela alguma coisa.

A sintaxe que você colocou está errada mesmo, por isso o erro!

O que é aquele media fora do parêntese? E o restante o que é? Tudo variavel?

Explica aí, ok?

Olá, primeiramente obrigado pela ajuda!!!!

não postei o código inteiro, só postei a função que estou usando para montar minha SQL de consulta e a chamada da função.

O que estou tentando fazer é o seguinte:

response.write media("altura",sexo,serie,escola,anobase,idade,ano)

Aqui estou tentando disparar uma chamada à função media, onde passo esses atributos, os quais recupero de um formulário da minha pagina anterior.

* Altura - vai, na função, juntar-se ao nome da minha tabela no BD, por exemplo TB_teste.altura.

* as outras variáveis são recuperadas de um formulário anterior e serão utilizadas, na função, para as condições da minha consulta (WHERE) SQL.

* o Objetivo é o seguinte, por exemplo, no caso dessa chamada de função, estou passando o atributo altura, pois desejo extrair a média da altura dos alunos da rede municipal de ensino, com base nas condições pedidas (todos os aluno do sexo masculino com idade de 9 anos), depois eu quero escrever isso na tela, por isso o response.write.

Não sei se consegui ser mais claro!!!!

qualquer dúvida por favor me avise!!!

Obrigado!!!!!!!

Link para o comentário
Compartilhar em outros sites

  • 0

acho que entendi!

Mas não sei se vai funcionar tudo diretao no response.write

tenta armazenar numa variavel a media, e depois da um response.write na variavel..

acho que assim é mais dificil dar erro!

se ainda assim não funcionar, poste aí, que tentamos lhe ajudar de novo!

ate mais

Link para o comentário
Compartilhar em outros sites

  • 0

Não entendi muito o que você quer fazer....Pode explicar melhor?? huh.gif

[]'s

Victor

O erro não está acontecendo no Response.write, o erro acontece justamente quando estou atribuindo a consulta do SQL à função, ou a qualquer outra variável.

Nessa linha:

  set rsMedia = conDBef.execute(""&SQL&"")

  media = rsMedia(""&dado&"")   'aqui acontece o erro!!!!Quando tento atribuir o resultado do Recorset à função

                                              ' média. (o rsMedia(""&dado&""), onde dado é a altura, deveria estar

'                                              'trazendo o valor da média, o SQL esta correto, pois já testei no Access)

Link para o comentário
Compartilhar em outros sites

  • 0

O erro não está acontecendo no Response.write, o erro acontece justamente quando estou atribuindo a consulta do SQL à função, ou a qualquer outra variável.

Nessa linha:

  set rsMedia = conDBef.execute(""&SQL&"")

  media = rsMedia(""&dado&"")  'aqui acontece o erro!!!!Quando tento atribuir o resultado do Recorset à função

                                              ' média. (o rsMedia(""&dado&""), onde dado é a altura, deveria estar

'                                              'trazendo o valor da média, o SQL esta correto, pois já testei no Access)

Link para o comentário
Compartilhar em outros sites

  • 0

cara..

posta aí a sua funcao de media!

acho que ele da erro, porque a função exige alguns parametros..

e você esta passando só um para ela..

Link para o comentário
Compartilhar em outros sites

  • 0
cara..

posta aí a sua funcao de media!

acho que ele da erro, porque a função exige alguns parametros..

e você esta passando só um para ela..

Pode ser esse problema!?!?!?!?!

não sabia que poderia dar problema.

dos atributos da função média pelo um valor não é passado.

entre idade e ano.

idade e ano, são duas caixas de texto, no formulario anterior, quando preencho idade, quero dizer que procuro alunos com x anos completos até a data de hoje, e quando preencho o ano, quero os alunos nascidos no ano y.

será que pode ser por esse o problema?

function media(dado,sexo,serie,escola,anobase,idade,ano)

  dim SQL, procura, anoAtual, anoNasc, Inicio, Fim, rsMedia, cont, tabela, med

  tabela = "tb_teste."&dado

  if len(idade) <>0 then

  AnoAtual = year(date)

  anoNasc = anoatual - idade

  Inicio = "01/01/"&anonasc

  fim = left(date,6)&anonasc

  end if

  procura = "Where"          'linha 49

  SQL = "SELECT avg("&tabela&") AS "&dado&" " _

  & "FROM TB_escolas INNER JOIN ((TB_aluno INNER JOIN TB_teste ON TB_aluno.codAluno = TB_teste.codAluno) " _

  & "INNER JOIN TB_escolaridade ON TB_aluno.codAluno = TB_escolaridade.codAluno) " _

  & "ON TB_escolas.codEscola = TB_escolaridade.codEscola"

  if sexo <> 0 then

  if Instr(1,SQL,procura,1) <> 0 then

    SQL = SQL & " AND ((TB_aluno.sexo)="& sexo &")"

  else

    SQL = SQL & " WHERE ((TB_aluno.sexo)="& sexo &")"

  end if

  end if

  if serie <> 0 then

  if Instr(1,SQL,procura,1) <> 0 then

    SQL = SQL & " AND ((TB_escolaridade.serie)="& serie &")"

  else

    SQL = SQL & " WHERE ((TB_escolaridade.serie)="& serie &")"

  end if

  end if

  if escola <> 0 then

  if Instr(1,SQL,procura,1) <> 0 then

    SQL = SQL & " AND ((TB_escolas.codEscola)="& escola &")"

  else

    SQL = SQL & " WHERE ((TB_escolas.codEscola)="& escola &")"

  end if

  end if

  if anobase <> 0 then

  if Instr(1,SQL,procura,1) <> 0 then

    SQL = SQL & " AND ((TB_teste.Anobase)="& anobase &")"

  else

    SQL = SQL & " WHERE ((TB_teste.Anobase)="& anobase &")"

  end if

  end if              'linha 81

  if len(idade) <> 0 then

  if Instr(1,SQL,procura,1) <> 0 then

    SQL = SQL & " AND (((TB_aluno.Nascimento)>=#"&inicio&"#) AND ((TB_aluno.Nascimento)<=#"&fim&"#))"

  else

    SQL = SQL & " WHERE (((TB_aluno.Nascimento)>=#"&inicio&"#) AND ((TB_aluno.Nascimento)<=#"&fim&"#))"

  end if

  end if

  if len(ano) <> 0 then

  if Instr(1,SQL,procura,1) <> 0 then

    SQL = SQL & " AND year(TB_aluno.Nascimento)="& ano &""

  else

    SQL = SQL & " WHERE year(TB_aluno.Nascimento)="& ano &""

  end if

  end if            'linha 95

  set rsMedia = conDBef.execute(""&SQL&"")

  media = rsMedia(""&dado&"")

end function

Link para o comentário
Compartilhar em outros sites

  • 0

function media(dado,sexo,serie,escola,anobase,idade,ano)

ta vendo essa linha?

você esta dizendo para a função, que ela vai receber:

dado,sexo,serie,escola,anobase,idade,ano como parametros!

ou seja.. ela vai receber 7 parametros!

Se, na hora que você chamar ela, você não passar 7 valores.. ela vai dar erro!

entendeu?

Link para o comentário
Compartilhar em outros sites

  • 0

Agora estou passando todos os parametros, e o erro persiste!!!!

dá uma olhadinha nesse código, ele é básicamente o que quero fazer.

Comigo esse código está dando o mesmo erro que minha função.

Por favor teste esse código para ver se errei em alguma coisa.

eu criei uma tabela no meu BD chamada lixo, com 1 único campo chamado NUM, coloquei alguns valores para ele e mandei executar o código abaixo..

O mesmo erro aconteceu.

-----------------------------------------------------

Mensagen de erro:

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

Erros

/EF/teste.asp, line 176

------------------------------------------------------

set lixo = conDBef.execute("SELECT avg(lixo.num) AS Num1 FROM lixo")

lixo.movefirst

tst= lixo("Num1")

response.write tst

Link para o comentário
Compartilhar em outros sites

  • 0

tá..

mas pera aí..

o que é:

set lixo = conDBef.execute("SELECT avg(lixo.num) AS Num1 FROM lixo")

Link para o comentário
Compartilhar em outros sites

  • 0

Me ensinaram que isso é um Recordset, como sou meio novo nisso,não sei direito.

mas o que eu quero fazer com isso é que execute esse SELECT no meu BD.

Antes disso já estabeleci a conexão como BD, através do seguinte código:

Set ConDBEF = Server.CreateObject("ADODB.Connection")

ConDBEF.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\db\dbEF.mdb"))

Link para o comentário
Compartilhar em outros sites

  • 0

que tipo de select você quer fazer?

o select basico é assim:

SELECT campo from tabela

no seu caso seria:

SELECT lixo FROM lixo

eu acho..

onde o primeiro lixo, seria o nome do campo que você quer selecionar, e o segundo (depois do FROM) o nome da tabela.

é isso?

Link para o comentário
Compartilhar em outros sites

  • 0
que tipo de select você quer fazer?

o select basico é assim:

SELECT campo from tabela

no seu caso seria:

SELECT lixo FROM lixo

eu acho..

onde o primeiro lixo, seria o nome do campo que você quer selecionar, e o segundo (depois do FROM) o nome da tabela.

é isso?

SELECT avg(lixo.num) AS Num1 FROM lixo

avg - comando SQL para extrair a média do campo selecionado

lixo.num - campo num da tabela lixo (o nome do campo é num)

As Num1 - atribui um nome ao resultado do comando AVG

FROM lixo - pegas os dados da tabela lixo

Primeiro fiz essa consulta no Access e pegeui o código SQL coloquei na minha página.

Se eu tirar o AVG desse comando SQL não dá problema nenhum!!!! o código funciona perfeitamente.

Link para o comentário
Compartilhar em outros sites

  • 0

fiquei confuso..

funcionou, ou não funcionou? hehe

Link para o comentário
Compartilhar em outros sites

  • 0

como assim?:

localmente funcionou?

mas na web não?

não entendi..

Link para o comentário
Compartilhar em outros sites

  • 0

Estou trabalhando off line, embora esteja conectado na net, meu computador está rodando o PWS, então todo o desenvolvimento é feito off line.

O que eu fiz... Abri o Access da minha máquina, abri uma consulta e inseri o código SQL que estamos discutindo. Aí funcionou belezinha, retornou a média conforme eu necessito.

Quando passei o código SQL para minha pagina ASP, estabelecia uma conexão com o banco de dados, e mandei executar o codio SQL (aquele código que passei anteriormente), aí não funcionou, o ASP retorna o erro que já enviei.

Será que consegui explicar????? hehehehehehe

Link para o comentário
Compartilhar em outros sites

  • 0
Estou trabalhando off line, embora esteja conectado na net, meu computador está rodando o PWS, então todo o desenvolvimento é feito off line.

O que eu fiz... Abri o Access da minha máquina, abri uma consulta e inseri o código SQL que estamos discutindo. Aí funcionou belezinha, retornou a média conforme eu necessito.

Quando passei o código SQL para minha pagina ASP, estabelecia uma conexão com o banco de dados, e mandei executar o codio SQL (aquele código que passei anteriormente), aí não funcionou, o ASP retorna o erro que já enviei.

Será que consegui explicar????? hehehehehehe

Mas você arrumou a conexão conforme o endereço virtual do seu site??? huh.gif

Link para o comentário
Compartilhar em outros sites

  • 0

olha..

pode estar ocorrendo algum erro bobo de programação.. ou de configuração do seu servidor..

acho que você vai ter que "debugar" seu codigo..

passando linha a linha, e testando se está tudo ok..

pelo menos é o que eu faria, nesse caso!

ate mais

Link para o comentário
Compartilhar em outros sites

  • 0

quando eu disse do seu servidor.. me referi ao pws ou iis, hehe

mas veja linha a linha se tem algum erro bobo..e depois vamos ver mais possibilidades..

ok?

t+

Link para o comentário
Compartilhar em outros sites

  • 0

da uma olhada nesse tópico:

http://scriptbrasil.com.br/forum/index.php...ndpost&p=100286

eu postei passo a passo de como configurar..

veja se lhe ajuda

ate mais

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
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...