Página 1 de 5
Erro em comandos SQL
Enviado: 14 Ago 2015 11:02
por Poka
Olá a todos
Estou começando usar Firebird + ODBC
o select abaixo seria por exemplo +- como pegar todas as notas e a quantidade de itens de cada nota.
O grid vai ter por exemplo varias colunas
o select abaixo dá certo
Código: Selecionar todos
Str:="SELECT pd.codigo, count(pm.codigo) as qtdoc from PAGAR_DADOS pd ";
+" JOIN pagar_mov pm on (pm.codigo = pd.codigo) group by pd.codigo;"
o select abaixo com + de 1 campo da erro
Código: Selecionar todos
Str:="SELECT pd.codigo, pd.dtvenc, count(pm.codigo) as qtdoc from PAGAR_DADOS pd ";
+" JOIN pagar_mov pm on (pm.codigo = pd.codigo) group by pd.codigo;"
erro no segundo select
Código: Selecionar todos
Error HY000 - [ODBC Firebird Driver][Firebird]Dynamic SQL Error
SQL error code = -104
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)
Se alguém puder ajudar, agradeço.
Poka
Erro em comandos SQL
Enviado: 14 Ago 2015 12:43
por alxsts
Olá!
Em SQL (vale para todos os SGBDs), quando se usa funções de agregação (aggregate functions), todas as colunas que não são usadas nestas funções devem obrigatoriamente constar da lista de colunas da cláusula GROUP BY. Exemplos de aggregate functions: Sum, Count, Avg...
Adapte a tua consulta:
Código: Selecionar todos
Str:="SELECT pd.codigo, pd.dtvenc, count(pm.codigo) as qtdoc from PAGAR_DADOS pd ";
+" JOIN pagar_mov pm on (pm.codigo = pd.codigo) group by pd.codigo, pd.dtvenc;"
Erro em comandos SQL
Enviado: 14 Ago 2015 14:17
por Poka
Valeu Alexandre, deu certinho.
Já estou fazendo algumas coisas com o Firebird, faz dias que estou nessa linha, pesquisei nos livros e apostilas que eu tenho, na internet e só vi exemplos com apenas um campo, não sabia que tinha que repetir no group by.
Obrigado
Poka
Erro em comandos SQL
Enviado: 14 Ago 2015 19:48
por JoséQuintas
Talvez mais fácil de entender:
Se estava totalizando por código, significa todos os vencimentos, então impossível definir uma data.
Se quer totais separados por código e vencimento, então são dois totalizadores.
Erro em comandos SQL
Enviado: 27 Ago 2015 11:34
por Poka
Olá
Jose Quintas, estou passando os dados dos arquivos + fáceis primeiro, vai ter aqueles relatórios de somar mês a mês do ano inteiro, aí vamos ver como fazer.
Bem por enquanto estou com outro problema:
Já sei que em comandos SQL não aceita aspas, fui passar tabela de clientes e um cliente que contém a palavra D´Agua por exemplo deu erro. Como fazer neste caso, posso simplesmente substituir por outra coisa. O usuário nunca vai poder usar esse tipo texto? .
Ainda não testei em campos tipo BLOB (memo), será que não vai aceitar também?.
Estou passando um sistema de advogado, e nos textos tem todos os tipos acentuação.
Existe outras silabas que os comandos SQL não aceita também? Aí vai ficar difícil para o advogado escrever os seus textos, explicar para ele que o sistema não aceita!!!
Como vocês fazem?
aguardo qualquer ajuda
Poka
Erro em comandos SQL
Enviado: 27 Ago 2015 12:16
por JoséQuintas
Aí vai ter que testar se vai ter problema com codepage.
Mas basicamente o MySql aceita qualquer coisa, basta usar a barra invertida "\" em casos que são exceção.
Código: Selecionar todos
INSERT INTO CLIENTES ( NOME ) VALUES ( 'ANTONIO D\'AGUA' )
ou até mesmo a própria barra
Código: Selecionar todos
INSERT INTO CLIENTES ( NOME ) VALUES ( 'TAMBEM ACEITA A BARRA \\' )
É por isso que uso uma função:
Código: Selecionar todos
"INSERT INTO CLIENTES ( NOME ) VALUES ( " + StringSql( cTexto ) + ")"
E na função trato exceções, se existirem.
Erro em comandos SQL
Enviado: 27 Ago 2015 12:27
por JoséQuintas
Meu site inteiro sai de uma base MySql, exceto imagens.
Mesmo assim, dá pra gravar praticamente qualquer letra.
Uma página como exemplo do que pode ser gravado no MySql:
http://www.jpatecnologia.com.br/html/bu ... &busca=nao
Erro em comandos SQL
Enviado: 02 Set 2015 14:48
por Poka
José Quintas, obrigado por responder.
Nos campos de nome vou substituir o ´ por outro caracter qualquer , não vai ter problemas, em campos Blob , aceita normal, esse era o meu medo , já que textos de advogado vocè ja viu, tem de tudo.
Agora + uma dúvida para alterações que não consegui resolver.
Código: Selecionar todos
Str:="UpDate &xarq set &ListaCampos where &xCampoChave = &xconteudoTeste;"
esse comando funciona sem problemas, mas por ex, quando xcampochave = "codigo"
gostaria de testar com + de um campo, por ex: xcampoChave = docum+codFor.
Como sempre, nas apostilas e exemplos só tem com um campo.
Agradeço qualquer ajuda.
Poka
Erro em comandos SQL
Enviado: 02 Set 2015 17:21
por alxsts
Olá!
Em SQL é um pouco diferente. Tem que montar os critérios usando operadores lógicos. Exemplo:
Código: Selecionar todos
UPDATE tbOrder
SET idOrderStatus = 100
WHERE idCustomer = 7056
AND dtOrder = '2015-08-31'
Erro em comandos SQL
Enviado: 02 Set 2015 19:54
por Poka
Valeu Alexandre, deu certo
Poka
Erro em comandos SQL
Enviado: 19 Set 2015 19:56
por Poka
Olá a todos
preciso de + uma ajuda
xtotkilos:=str( 5800,6,0)
Código: Selecionar todos
str:="Update &xtabLan set TotKilos= 'xtotkilos' where codfor = '&xcodfor' .and. codprod = 'xcodprod';"
o comando acima funciona
eu preciso do seguinte
eu já tenho o campo totkilos prenchido na tabela , quero somar com o xtotkilos, se eu pesquisar antes, pegar o conteudo e somar tom totkilos dá certo, mas gostaria de fazer direto no comando.
agradeço qualquer ajuda.
Poka
Erro em comandos SQL
Enviado: 19 Set 2015 20:25
por JoséQuintas
Só comentário: evite usar macros, pode esconder problemas.
A velha pergunta... como faria no DBF?
(considerar que no SQL o default é todos)
Código: Selecionar todos
USE tabela
REPLACE all totkilos WITH totkilos + 10 FOR codfor='005' and codpro='006'
USE
E no SQL?
Código: Selecionar todos
UPDATE tabela SET totkilos = totkilos + 10 WHERE codfor = '005' and codprod='006';
Mas sem macro. Prefiro usar função pra deixar mais clara a conversão:
Código: Selecionar todos
cSql := "UPDATE " + xtablan + " SET TotKilos=TotKilos +" + Str( nQtde ) + " WHERE codfor = " + StringSql( xcodfor ) + " AND codprod=" + StringSql( xcodprod )
FUNCTION StringSql( cString )
RETURN ['] + cString + [']
Tem um detalhe interessante no MySql:
Se os campos codfor e codprod só contém números, mesmo sendo caractere, pode usar números no comando.
WHERE codfor=5 and codprod=6
Nota:
Lembre-se que .AND. é no Harbour e não no MySql. (com os pontos).
Erro em comandos SQL
Enviado: 20 Set 2015 14:07
por alxsts
Olá!
JoséQuintas escreveu:Tem um detalhe interessante no MySql:
Se os campos codfor e codprod só contém números, mesmo sendo caractere, pode usar números no comando.
Este comportamento existe em todos os sistemas gerenciadores de banco de dados relacionais, que não tem seus tipos de dados fortemente tipados. No mundo dos SGBDs, isto é conhecido como "conversão implícita de tipos". Não é uma boa prática pois pode causar erros nos resultados, lentidão no processamento e abertura de brechas para SQL injection, como mostrado no artigo
Implicit type conversion in MySQL. O correto é o programador passar os argumentos já convertidos nos tipos corretos. Vejam mais um artigo relacionado:
MySQL Type Conversion Rules
Erro em comandos SQL
Enviado: 20 Set 2015 16:09
por Poka
Obrigado Quintas e Alexandre pelas explicações.
Quintas, deu certo.
Poka
Erro em comandos SQL
Enviado: 07 Out 2015 16:32
por Poka
Olá
Esse comando aparentemente deveria dar certo
dá o erro ERROR 00000
É para deixar o campo codcli como not null ( flag = 1)
Código: Selecionar todos
UPDATE RDB$RELATION_FIELDS SET RDB$NULL_FLAG = 1 WHERE RDB$RELATION_NAME = 'dadopro' AND RDB$FIELD_NAME = 'codcli'
se alguém puder dar uma dica.
Poka