MySQL: mod()

Forum sobre SQL.

Moderador: Moderadores

cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

MySQL: mod()

Mensagem por cjp »

Pessoal, por favor, uma ajuda:

Código: Selecionar todos

			         oRs:Filter="mod(id,2)=0"
Este código está dando o seguinte erro:
Os argumentos sÒo incorretos, estÒo fora do intervalo aceitßvel ou estÒo em conflito. (0x800A0BB9): ADODB.Recordset?
Em todas as pesquisas que fiz, a sintaxe da mod() estaria correta. Inclusive, quando uso a mod() num select normal (ex: SELECT * FROM tarextras WHERE MOD(id,2)=0), funciona sem problema.

Então, estou pressupondo que o problema seja no filtro da oRs. Mas não estou enxergando o erro.

Só gostaria de pegar os registros com id par.

Se esta não for a forma correta de fazer o filtro, alguém poderia me indicar como seria?

Grato
Inacio de Carvalho Neto
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MySQL: mod()

Mensagem por JoséQuintas »

Isso confunde mesmo.

Esse filter não é do MySQL, é local, do ADO.
Vai ter que pesquisar quais expressões são válidas.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

MySQL: mod()

Mensagem por cjp »

Então, eu pesquisei e não achei nada.
Se mod() não é possível no recordset, teria outra forma de filtar só os ids pares ou só os ímpares?
Inacio de Carvalho Neto
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

MySQL: mod()

Mensagem por alxsts »

Olá!

Você esta usando Mod(), que é uma função do MySQL.

ADO utiliza sintaxe Visual Basic. Experimente assim usando o operador Mod do Visual Basic:

Código: Selecionar todos

oRs:Filter="id mod 2 = 0"
cjp escreveu:Se mod() não é possível no recordset, teria outra forma de filtar só os ids pares ou só os ímpares?
Sim, use a cabeça.
cjp escreveu:SELECT * FROM tarextras WHERE MOD(id,2)=0), funciona sem problema
Se você testou isto e funcionou, incorpore mais uma coluna ao teu select que gera o record set:

Código: Selecionar todos

SELECT col1, col2, coln, Mod(id,2) Parimpar
FROM tarextras 
WHERE <condição >
Depois, na hora de filtrar, use:

Código: Selecionar todos

oRs:Filter = "Parimpar = 0" // pares
//Ou
oRs:Filter = "Parimpar > 0" // ímpares
[]´s
Alexandre Santos (AlxSts)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

MySQL: mod()

Mensagem por cjp »

oRs:Filter="id mod 2 = 0"
Assim também não funcionou.
oRs:Filter = "Parimpar = 0" // pares
//Ou
oRs:Filter = "Parimpar > 0" // ímpares
De fato, não tinha pensado nisso.

Agora deu certo. Muito obrigado.
Inacio de Carvalho Neto
BigElf98
Usuário Nível 1
Usuário Nível 1
Mensagens: 3
Registrado em: 23 Mar 2024 10:15
Localização: Sao Paulo

MySQL: mod()

Mensagem por BigElf98 »

Parece que o problema está na forma como você está aplicando o filtro usando o mod() no objeto Recordset. O erro sugere que os argumentos estão incorretos ou fora do intervalo aceitável. Em vez de usar mod(id,2)=0 diretamente no filtro, tente usar uma abordagem diferente para filtrar os registros com id par. Uma maneira alternativa seria iterar pelos registros e verificar manualmente se o id é par, adicionando-os a um novo conjunto de dados. Outra opção seria usar uma consulta SQL com um WHERE para filtrar os registros antes de carregá-los no Recordset.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MySQL: mod()

Mensagem por JoséQuintas »

Só lembrar do básico.
No Advantage Database Server também tem dessas coisas.
Não tem uma, vai outra.

Código: Selecionar todos

id / 2 = int( id / 2 )
id - ( ( int( id / 2 ) * 2 ) = 0
e por aí vai.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

MySQL: mod()

Mensagem por alxsts »

Olá!

Tenho notado em posts recentes, a julgar pelos nomes de usuário, todos recém inscritos no fórum, e pelo estilo de texto que publicam, que são textos de inteligência artificial, tipo ChatGPT. Alguns até fazem sentido, como no caso presente, apesar de sugerir uma solução já proposta anteriormente.

Alguém tem a mesma impressão? A que se deve isto? Alguma vulnerabilidade? Ou existiria outra explicação?
[]´s
Alexandre Santos (AlxSts)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

MySQL: mod()

Mensagem por cjp »

Também estranhei a mensagem do "BigElf98", neste e em outro tópico, em ambos os quais eu já tinha obtido a solução.
Mas pra que uma IA iria se cadastrar no fórum e responder dúvidas?
Inacio de Carvalho Neto
BigElf98
Usuário Nível 1
Usuário Nível 1
Mensagens: 3
Registrado em: 23 Mar 2024 10:15
Localização: Sao Paulo

MySQL: mod()

Mensagem por BigElf98 »

Uma possível solução seria usar a função de janela SUM() em vez de uma variável de usuário (@SOMA) para calcular o saldo cumulativo. Isso deve garantir que o cálculo siga a ordem correta definida no ORDER BY. Aqui está um exemplo de como você pode ajustar seu código:

Código: Selecionar todos

SELECT
    BADATBAN,
    BADATEMI,
    BARESUMO,
    BAHIST,
    IF( BAVALOR > 0, BAVALOR, 0 ) AS ENTRADA,
    IF( BAVALOR < 0, BAVALOR, 0 ) AS SAIDA,
    SUM(BAVALOR) OVER (ORDER BY BADATBAN, BADATEMI, IDBANCARIO) AS SALDO
FROM
    JPBANCARIO
WHERE
    BAVALOR <> 0
ORDER BY
    BADATBAN, BADATEMI, IDBANCARIO
Espero que esse código que meu amigo com king slots me ajudou a escrever ajude a resolver seu problema e que tudo funcione como deveria. Boa sorte!
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MySQL: mod()

Mensagem por JoséQuintas »

Mesma impressão.

Com a mensagem recente (que deve ser excluída), virou coisa conhecida no fórum: misturar assunto de outro tópico e colocar algo indesejado no meio de mensagem aparentemente útil. Deixa na dúvida sobre como moderar isso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

MySQL: mod()

Mensagem por alxsts »

Olá!

Deveria haver uma verificação no cadastramento de novos membros. Tipo Captcha.

Infelizmente não temos quem faça manutenção por falta de acesso.
[]´s
Alexandre Santos (AlxSts)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

MySQL: mod()

Mensagem por cjp »

Se eu puder ajudar o fórum de alguma maneira, dentro das minhas limitações, estou à disposição.
Inacio de Carvalho Neto
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

MySQL: mod()

Mensagem por alxsts »

Olá!
cjp escreveu:Se eu puder ajudar o fórum de alguma maneira, dentro das minhas limitações, estou à disposição
Seria interessante alguém com conhecimentos em PHP.

O problema é que, ao que me consta, o Toledo não deixou senhas de acesso a fontes, banco de dados...
[]´s
Alexandre Santos (AlxSts)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

MySQL: mod()

Mensagem por cjp »

Não sei se o meu conhecimento é suficiente, mas, se eu puder ajudar, estou à disposição.
Aconteceu alguma coisa com o Toledo?
Inacio de Carvalho Neto
Responder