Ir para conteúdo

POWERED BY:

Arquivado

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

davisvasconcellos

[Resolvido] Exibir resultado consulta ao Mysql

Recommended Posts

Galera,

fiz essa consulta para somar a quantidade de horas em um determinado período

 

set rsSomaMes = conn.execute("SELECT SEC_TO_TIME( SUM( TIME_TO_SEC(total_dia) ) ) AS SomaMes FROM ponto WHERE ( EXTRACT( MONTH FROM data ) = '" & mes_teste & "' ) AND ( EXTRACT( YEAR FROM Data ) = '" & ano_teste & "' ) and cod_func='" & func_teste & "'")

 

quando executo no Mysql direto , funciona na boa ex: 176:00:00 hs

dentro do script tb funciona aparentemente, mas se eu tentar colcar o conteúdo do rs em uma variável , aparece erro.

tipo

total=rsSomaMes("somames")

 

até mesmo se eu tentar exibir .

response.write rssomames("somames")

 

exibi o conteúdo da variável e é do tipo 9 = automation object

response.write "Tipo:" & VarType(rsSomaMes("somames"))

 

 

se eu escolher fizer uma consulta que não retorne resultado, por exemplo um cod_func que não exista na tabela, ele não gera o erro pois o rs vem nulo.

exibi o tipo da variável e vem tipo =1 que é o null

 

ou seja, eu consigo efetuar a consulta numa boa, só não consigo imprimir o resultado.

alguma dica?

já catei e não achei

 

um dos códigos de erro '80040e21'

 

 

abs ae

Davis

Compartilhar este post


Link para o post
Compartilhar em outros sites

deve ser assim no mysql

set rsSomaMes = conn.execute("SELECT CAST(SEC_TO_TIME( SUM( TIME_TO_SEC(total_dia) ) ) AS VARCHAR(11))AS SomaMes FROM ponto WHERE ( EXTRACT( MONTH FROM data ) = '" & mes_teste & "' ) AND ( EXTRACT( YEAR FROM Data ) = '" & ano_teste & "' ) and cod_func='" & func_teste & "'")

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existem exemplos com o uso do MySQL, lab. De script, pode te ajudar

tente usar o obj recordset atraves de

Set rs = Server.CreateObject("ADODB.Recordset")
SQL="SELECT SEC_TO_TIME( SUM( TIME_TO_SEC(total_dia) ) ) AS SomaMes FROM ponto WHERE ( EXTRACT( MONTH FROM data ) = '" & mes_teste & "' ) AND ( EXTRACT( YEAR FROM Data ) = '" & ano_teste & "' ) and cod_func='" & func_teste & "'")"

rs.Open SQL, conexao,1,3

Se estiver executando uma SP , certifique-se de fazê-lo através do método Connection.Execute () , ao invés de um objeto de comando,certifique-se que você tem a versão mais recente do MDAC ,Isso pode acontecer se você tentar passar uma string NULL ou um tipo de dados string para um objeto ADODB.Recordset ou uma SP, e tentar executar CONVERT ou CAST ou explícita implicita.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma tabela temporária, ajuda a ser mais organizado o banco e consequentemente o code...

Compartilhar este post


Link para o post
Compartilhar em outros sites

para efeitos de teste troque

response.write rssomames("somames")

por

response.write Cstr("" & rssomames(0))

 

se não funcionar tente usar essa string de conexao pois parece o erro de driver:

conn.Open "driver=MySQL ODBC 3.51 Driver;server=localhost;uid=usuario;pwd=senha;database=meuBanco"

Compartilhar este post


Link para o post
Compartilhar em outros sites

certifique-se que você tem a versão mais recente do MDAC

Compartilhar este post


Link para o post
Compartilhar em outros sites

O MDAC ta atualizado. baixei as versões no site da MS e na hora da instalação ele informa que eu já tenho a versão mais atualizada.

vou testar as suas dicas e amanhã passo o resultado.

de qualquer forma eu vou criar uma tabela de histórico com o ID do funcionário, o mês, ano e o total dessa consulta. assim mantenho um histórico e sempre que quiser consultar uma data passada eu consulto desta tabela sem precisar fazer a soma novamente.

 

vou resolver assim, mas de qualquer forma vou tentar descobrir pq existe esse erro porque em determinado tempo posso querer simplesmente somar todas as horas e, exibir quanto tenho acumulado até o momento sem precisar montar um loop e somar dia a dia pelo script ASP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O MDAC ta atualizado. baixei as versões no site da MS e na hora da instalação ele informa que eu já tenho a versão mais atualizada.

vou testar as suas dicas e amanhã passo o resultado.

de qualquer forma eu vou criar uma tabela de histórico com o ID do funcionário, o mês, ano e o total dessa consulta. assim mantenho um histórico e sempre que quiser consultar uma data passada eu consulto desta tabela sem precisar fazer a soma novamente.

 

vou resolver assim, mas de qualquer forma vou tentar descobrir pq existe esse erro porque em determinado tempo posso querer simplesmente somar todas as horas e, exibir quanto tenho acumulado até o momento sem precisar montar um loop e somar dia a dia pelo script ASP.

 

 

atualizado:

a string de conexão ta OK! e o erro é o mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

é a tabela temporária, é uma saida....

veja se esta tentando passar uma string NULL , isso pode dar erro

Compartilhar este post


Link para o post
Compartilhar em outros sites

bem faz tempo q isso ficou aberto.

resolvi na temtable para aquele momento.

porem agora de forma nenhuma consigo resolver direto no script.

 

já tentei direto... procurei em fórum fora e dada.

alguém tem alguma luz

 

SELECT (SEC_TO_TIME(SUM(cast(TIME_TO_SEC(total_dia) as CHAR)))) AS totalmes FROM ponto where ( EXTRACT(MONTH FROM Data) = MONTH(now())) AND (EXTRACT(YEAR FROM Data) = YEAR(now())) and cod_func ='" & cod_func & "' group by cod_func

 

a consulta é bem feita.. mas se mandar imprimir já era.

 

 

alguma alma bondosa pode fazer um teste?

 

cria uma tabela e cria um campo (pode ser varchar(10))

coloca os valores ae, 10:00:00 , 24:00:00 26:00:00

soma e tenta imprimir com um response.write

 

só posso estar doido..

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

qual o erro atual exibido ???

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

qual o erro atual exibido ???

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

 

postei mas deu erro no fórum. vamos lá novamente:

 

como dar response.write na string? eu estou utilizando assim:

set rsTotalMes = conn.execute("SELECT (SEC_TO_TIME(SUM(cast(TIME_TO_SEC(total_dia) as CHAR)))) AS totalmes FROM ponto where ( EXTRACT(MONTH FROM Data) = MONTH(now())) AND (EXTRACT(YEAR FROM Data) = YEAR(now())) and cod_func ='" & cod_func & "' group by cod_func ")

 

se eu fizer response.write rsTotalMes ele dá Response object error 'ASP 0185 : 8002000e' . to mongando ?

 

 

a consulta funciona, testo dentro do mysql e retorna lá o somatório ... 60:00:00

 

porém se eu der

response.write rstotalMes("totalmes")

ele gera erro. tb não consigo fazer nada com o rs. só consigo utilizar vartype e verifico que é tipo 9 (automation).

tentei jogar o conteúdo para uma session e tb nada.

 

a verdade nem atribuir eu consigo tipo

teste = rstotalMes("totalmes")

 

o erro:

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

Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.

 

o driver ODBC é o que o UOL HOST fornece e é o mais atual acho que 3.51 o mysql é o 5 eu acho, mas não acredito que seja problema nele.

 

 

também tentei uma malandragem que foi criar um select dentro do outro. assim

SELECT * FROM (SELECT DO CÁLCULO ACIMA) e... executa a consulta certinho, mas dá o mesmo erro se for utilizar o recordset.

 

 

estou achando que é alguma limitação do ASP ou do DRIVER ODBC ... sei lá...

 

 

vou acabar criando uma tabela só inserir esse resultado e quando for exibir faço um select pra cada , mas acho meio gambiarraTronics.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso é muitas vezes pode ser um problema de datatype. Certifique-se de que você está passando tipos de dados válidos para o que está acontecendo no banco de dados. Por exemplo, verifique se você não está passando um valor string NULL ou vazio a uma coluna que não aceita-los (ou definido manualmente ou, digamos, uma coluna DATETIME). Certifique-se que todos os comprimentos VARCHAR e limites numéricos são respeitados. Certifique-se de que você SELECT coluna1, coluna2, columns3 em vez de usar SELECT *

 

habilite o On Error Resume Next, e verifique a coleção de erros do objeto de conexão. Por exemplo:

 

<% 
   set conn = CreateObject("ADODB.Connection") 
   conn.open "<connection string>" 
   sql = "<Statement that causes errors>" 
   on error resume next 
   conn.execute(sql) 
   if err.number <> 0 then 
       response.write(sql) 
       if conn.errors.count > 0 then 
           for each e in conn.errors 
               response.write e.description & "<br>" 
           next 
       end if 
       response.end 
   end 

 

Se isso não fornecer informações suficientes, você pode receber uma mensagem de erro melhor fora do próprio banco de dados, de modo a ter resultados da instrução response.write e emitir diretamente contra o DB. Se você estiver usando um objeto ADODB.Command, você pode considerar re-escrever o seu código para executar o procedimento armazenado diretamente, em vez de usar o objeto de comando. (Se você está contando com saída ou parâmetros de retorno do procedimento armazenado, você terá que alterar o processo para retornar esses valores como um conjunto de resultados.) Se você estiver usando "info Segurança Persist" em sua seqüência de conexão, tente desabilitá-lo temporariamente. Se você estiver usando Driver = {SQL Server} na sua seqüência de conexão, tente Provider = SQLOLEDB vez (ou vice-versa). Se você estiver conectando através de um DSN ODBC, tente usar uma conexão DSN-less. Se você estiver usando métodos AddNew / Update do ADODB.Recordset,use uma instrução UPDATE ou INSERT .

Compartilhar este post


Link para o post
Compartilhar em outros sites

praticamente tudo que você me escreveu já fiz.

não passa null (tanto que me dá o resultado) , não é o limite do campo, já troquei o datatype...

 

resolvi procurar o que esse cara faz:

http://en.wikipedia.org/wiki/OLE_Automation - é mais completo.

 

pelo que deu para entender , é um objeto pra facilitar a vida de quem quer manipular os dados de outra liguagem dentro da sua.. tipo fazer coisas do excel por dentro de outra linguagem.Assim um cara lá desenvolvendo na linguagem xyz pode até mandar criar um documento .xls com fórmula e tudo, ou abrir e pegar dados de uma planilha... lógico que isso tudo se tiver a implementação desse objeto para a tal linguagem xyz

 

to certo?

 

bem partindo disso , acho que o ASP com o mysql não devem ter essa implementação para o que eu quero.

como se o Mysql passasse para o ASP como ele chegou ao resultado e não só o resultado...

 

dae pensei em uma "gambiarra" e FINALMENTE após todos estes anos funcionou.

 

inseri uma consulta antes da principal somente para capturar o valor do resultado da primeira

 

SELECT campo com resultado de (SELECT soma as horas)

desta forma não exibo o tal Automation diretamente que é o que me dá problema. Estou simplesmente exibindo um campo CHAR com um valor que o SELECT atual nem sabe como foi feito

 

ficou assim:

 

select cast(TOTALMES as char) as TOTAL from ( SELECT (SEC_TO_TIME(SUM(cast(TIME_TO_SEC(total_dia) as CHAR)))) AS TOTALMES FROM ponto where cod_func = '" & cod_func & "' AND ( EXTRACT(MONTH FROM Data) = MONTH(now())) AND (EXTRACT(YEAR FROM Data) = YEAR(now())) ) as TMES

 

 

não sei se é a resposta correta, mas é a mais limpa que arrumei até hoje.

 

 

obrigado Xanburzum e a todos q ajudaram.

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.