Página 1 de 1

Select mysql com case e if

Enviado: 23 Mar 2020 16:34
por jcsprog
ola amigos tenho aplicao em mysql com harbour x miniqui
mas ao gerar o select em anexo que esta funcionando no browse dentro da aplicação não encontra

c_codigo:="0000000101"

oQuery := oServer:Query( "Select FILIACAO,NOME_RESP,FONE1_RESP,FONE2_RESP,PRIO_RESP,RESP_CRIA"
oQuery+=" CASE PRIO_RESP WHEN 1 THEN 'Alta'"
oQuery+=" WHEN 2 THEN 'Media'"
oQuery+=" WHEN 3 THEN 'Baixa'"
oQuery+=" END AS PRIOR,"
oQuery+=" IF(RESP_CRIA=1,'Sim','Não') IS RESPON"
oQuery+=" From escola.tab_resp WHERE RA_RESP="+'c_codigo')

agradeço a ajuda

Select mysql com case e if

Enviado: 23 Mar 2020 18:27
por JoséQuintas
Erro Clipper/Harbour.
Tá passando o nome da variável e não o conteúdo.

Código: Selecionar todos

"... WHERE RA_RESP=" + ['] + c_Codigo + [']
ou

Código: Selecionar todos

"...WHERE RA_RESP=" + StringSql( c_Codigo )

FUNCTION StringSQL( cValue )
   RETURN ['] + cValue + [']

Select mysql com case e if

Enviado: 23 Mar 2020 18:34
por alxsts
Olá!

Sua mensagem não está clara... está retornando algum erro?

Analisando o conteúdo postado, creio que sim. É só comparar as duas consultas. Creio que se você ajustar a que está em foramto texto para ficar igual à da janela do ResultSet, vai dar certo. Veja:

Código: Selecionar todos

oQuery := oServer:Query( "Select FILIACAO,NOME_RESP,FONE1_RESP,FONE2_RESP,PRIO_RESP,RESP_CRIA   ==> Falta uma vírgula ao final desta linha"

Código: Selecionar todos

oQuery+=" IF(RESP_CRIA=1,'Sim','Não') IS RESPON"   ==> Aqui, ao invés de "IS", é "AS"

Select mysql com case e if

Enviado: 23 Mar 2020 18:52
por asimoes
Eu utilizo BIND fica mais bonito

Select mysql com case e if

Enviado: 23 Mar 2020 19:06
por JoséQuintas
Também reparei na digitação errada, mas acho que foi no post.

O problema mesmo é que ele tá passando o nome da variável.

WHERE RA_RESP='c_codigo'

ao invés de

WHERE RA_RESP='0000001'

Select mysql com case e if

Enviado: 23 Mar 2020 22:06
por jcsprog
ola no sistema nao apresenta erro

vou realizar a alteracao na variavel ok

agraddecoa ajuda

Select mysql com case e if

Enviado: 23 Mar 2020 23:56
por alxsts
Olá!
JoséQuintas escreveu:O problema mesmo é que ele tá passando o nome da variável.
Também acho...
asimoes escreveu:Eu utilizo BIND fica mais bonito
O que chama de "bind"?

Select mysql com case e if

Enviado: 24 Mar 2020 23:37
por jcsprog
Ola

realizei as mudanças e o erro agora e este
Principe.prg(1054) Error E0020 Incomplete statement or unbalanced delimiters
Principe.prg(1060) Error E0030 Syntax error "syntax error at ')'"
2 errors

VARIAVEL ===>>> R_RA:="0000000101" IGUAL A DO BROWSE DO MYSQL

oQuery := oServer:Query("Select FILIACAO,NOME_RESP,FONE1_RESP,FONE2_RESP,PRIO_RESP,RESP_CRIA, CASE tab_resp.PRIO_RESP" LINHA -> 1054
oQuery+=" WHEN 1 THEN 'Alta'"
oQuery+=" WHEN 2 THEN 'Media'"
oQuery+=" WHEN 3 THEN 'Baixa'"
oQuery+=" END AS PRIOR,"
oQuery+=" IF(RESP_CRIA=1,'Sim','Não') AS pode,"
oQuery+=" From escola.tab_resp WHERE tab_resp.RA_RESP="+[']+R_RA+[']) LINHA ->1060

==========================================================================================
Utilizo este select e funciona más ai tenho que atualizar , gostaria de fazer direto
oQuery := oServer:Query( "Select FILIACAO,NOME_RESP,FONE1_RESP,FONE2_RESP,PRIO_RESP,RESP_CRIA From escola.tab_resp WHERE
tab_resp.RA_RESP='"+R_RA+"'")

if oQuery:LastRec() > 0
nCounter++
oRow := oQuery:GetRow(i)
do case
case oRow:fieldGet(5) = "1"
a_prio:="Alta"
case oRow:fieldGet(5) = "2"
a_prio:="Media"
case oRow:fieldGet(5) = "3"
a_prio:="Baixa"
endcase
a_Resp:=if(oRow:fieldGet(6)="1","Sim","Não")

aadd(a_rray,{oRow:fieldGet(1),oRow:fieldGet(2),oRow:fieldGet(3),oRow:fieldGet(4),a_prio,a_Resp})
oQuery:Skip(1)

Aluno_1.G_Parente.SetArray( a_rray )