Clipper On Line • Ver Tópico - Erro em comandos SQL
Mudar para estilo Clássico
Discussão sobre SQL
Postar uma resposta

Erro em comandos SQL

14 Ago 2015 11:02

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:
     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:
     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:
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

14 Ago 2015 12:43

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:
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

14 Ago 2015 14:17

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

14 Ago 2015 19:48

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

27 Ago 2015 11:34

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

27 Ago 2015 12:16

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:
INSERT INTO CLIENTES ( NOME ) VALUES ( 'ANTONIO D\'AGUA' )


ou até mesmo a própria barra

Código:
INSERT INTO CLIENTES ( NOME ) VALUES ( 'TAMBEM ACEITA A BARRA \\' )


É por isso que uso uma função:

Código:
"INSERT INTO CLIENTES ( NOME ) VALUES ( " + StringSql( cTexto ) + ")"


E na função trato exceções, se existirem.

Erro em comandos SQL

27 Ago 2015 12:27

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/busca.asp?chave=Antigos&busca=nao

Erro em comandos SQL

02 Set 2015 14:48

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:
   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

02 Set 2015 17:21

Olá!

Em SQL é um pouco diferente. Tem que montar os critérios usando operadores lógicos. Exemplo:
Código:
UPDATE tbOrder
   SET idOrderStatus = 100
WHERE idCustomer = 7056
   AND dtOrder = '2015-08-31'

Erro em comandos SQL

02 Set 2015 19:54

Valeu Alexandre, deu certo

Poka

Erro em comandos SQL

19 Set 2015 19:56

Olá a todos

preciso de + uma ajuda

xtotkilos:=str( 5800,6,0)

Código:
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

19 Set 2015 20:25

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:
USE tabela
REPLACE all totkilos WITH totkilos + 10 FOR codfor='005' and codpro='006'
USE


E no SQL?

Código:
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:
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

20 Set 2015 14:07

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

20 Set 2015 16:09

Obrigado Quintas e Alexandre pelas explicações.

Quintas, deu certo.

Poka

Erro em comandos SQL

07 Out 2015 16:32

Olá

Esse comando aparentemente deveria dar certo
dá o erro ERROR 00000

É para deixar o campo codcli como not null ( flag = 1)

Código:
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
Postar uma resposta