Clipper On Line • Ver Tópico - fazer pesquisa em mysql acrescentando um campo não existente

fazer pesquisa em mysql acrescentando um campo não existente

Discussão sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

 

fazer pesquisa em mysql acrescentando um campo não existente

Mensagempor Amparo » 23 Out 2019 08:54

ola amigos, bom dia

Harbour MiniGUI Extended Edition 19.08 (Update 2)
BRMAKE - Make File para Harbour/xHarbour/MiniGUI Versão 2.05 FreeWare
MariaDB 10.2

no banco de dados tenho uma tabela chamada CLIENTES, com os seguintes campos:
codigo
nome
cnpj
vendedor
conceito
limit_cred (limite de credito)
....

faço uma consulta carregando em uma GRID apenas estes campos, preciso acrescentar no GRID uma coluna nova que não existe na tabela de cliente, esta coluna em meu sistema eu chamo de CALCULA, exemplo

IIF( conceito = "BOM", "Venda Liberada", IIF( conceito = "REGULAR","Venda em Analise","Venda Bloqueada" ) )

OU

IIF( limit_cred = 500.00, limit_cred * 1.20, IIF( limit_cred = 1000.00, limit_cred * 1.30, limit_cred * 1.50 ) )

ou

IIF( conceito = "BOM", pinta a célula de verde, IIF( conceito = "REGULAR",pinta a célula de amarelo,pinta a célula de vermelho ) )

abaixo como esta a linha de programação:
DELETE ITEM ALL FROM GRID_CLIENTES OF FORM_CLIENTES

SELECT_CLIENTES := OSERVER:QUERY( "SELECT codigo,nome,cnpj,vendedor,conceito, limit_cred FROM CLIENTES USE INDEX (IDX_CODIGO) ORDER BY CODIGO LIMIT 1000")
IF SELE_MSELE_QUERY:NETERR()
   MSGSTOP( "Erro ao abrir tabela de CLIENTES", MSIST )
   ...
ELSE
   CONTA_REG := 1

   SETMESSAGE( STRZERO( SELE_MSELE_QUERY:LASTREC(),6 ), 4 )

   DO WHILE CONTA_REG <= SELE_MSELE_QUERY:LASTREC()
      DO EVENTS
      ROWS_MSELE_QUERY := SELE_MSELE_QUERY:GETROW( CONTA_REG )

      FOR X = 1 TO LEN( COLUNA_FIELDS )
        IF COLUNA_TIPO[X] = "N"
           ITEMADD += 'VIRGULA( ROWS_MSELE_QUERY:FIELDGET("' +  COLUNA_FIELDS[X] + '"),' + STR(COLUNA_WIDTH[X],2) + ',' + STR(COLUNA_DECIMAL[X],1) + ' )'
   ELSEIF COLUNA_TIPO[X] = "D"
           ITEMADD += 'DTOC( ROWS_MSELE_QUERY:FIELDGET("' +  COLUNA_FIELDS[X] + '"))'
   ELSE
           ITEMADD += 'ROWS_MSELE_QUERY:FIELDGET("' +  COLUNA_FIELDS[X] + '")'
   ENDIF

        IF X < LEN( COLUNA_FIELDS )
           ITEMADD += ","
        ENDIF
      NEXT X

      ADD ITEM { &(ITEMADD) } TO &NOME_DA_GRID. OF SGC020101FORM

      ITEMADD := ""
      SELE_MSELE_QUERY:SKIP(1)

      CONTA_REG += 1
   ENDDO
ENDIF


alguem teria uma ideia de como posso acrescentar uma coluna CALCULA conforme explicado a cima, lembrando que esta coluna pode estar no meio dos campos existentes em uma tabela.

obs> a variável COLUNA_FIELDS é um vetor que contem os campos que serão inseridos no GRID também tem o vetor COLUNA_TABELA onde eu identifico se a coluna é um campo de uma tabela ou se é CALCULADA.

desde ja agradeço.
Avatar de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 337
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

fazer pesquisa em mysql acrescentando um campo não existente

Mensagempor JoséQuintas » 23 Out 2019 11:14

Pelo que estou vendo, está adicionando uma coluna de cada vez ao grid.
Se está adicionando uma coluna de cada vez, só definir como vai ser essa nova coluna.
Mas se mencionou até sobre a cor do grid... isso tem a ver com a linguagem de programação/LIB gráfica e não com o banco de dados.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

fazer pesquisa em mysql acrescentando um campo não existente

Mensagempor alxsts » 23 Out 2019 14:35

Olá
Tente

SELECT codigo
       ,nome
       ,cnpj
       ,vendedor
       ,conceito
       ,limit_cred
       ,0 as Calcula   -- ajuste para o tipo de dados desejado
   FROM CLIENTES
    USE INDEX (IDX_CODIGO)
  ORDER BY CODIGO
  LIMIT 1000
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

fazer pesquisa em mysql acrescentando um campo não existente

Mensagempor Amparo » 24 Out 2019 10:53

OLA AMIGOS

bom dia

alxsts, já tentei mas da erro.

na verdade existe um vetor guardando os nomes dos campos bem como outras informações
codigo, nome,cnpj,vendedor,conceito,limit_cred

para montar o select eu percorro o vetor e acrescento na linha do SELECT ... FROM

acontece que nesse vetor eu posso colocar uma coluna CALCULADA no final ou no meio de qualquer campos

acrescentando isso a variável que monta a seleção ficou assim:

SELECT CODIGO,NOME.CNPJ,VENDEDOR,CONCEITO,LIMIT_CRED,IIF(CONCEITO="BOM","VENDA LIBERADA","VERIFICAR") FROM CLIENTES USE INDEX ...

ai da erro FUNCTION sqlimpium.iif does not exist (mensagem de erro do mariaDB)

abraços
Avatar de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 337
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

fazer pesquisa em mysql acrescentando um campo não existente

Mensagempor JoséQuintas » 24 Out 2019 11:12

if() ou case

https://www.w3schools.com/sql/func_mysql_case.asp

SELECT CustomerName, City, Country
FROM Customers
ORDER BY
(CASE
    WHEN City IS NULL THEN Country
    ELSE City
END);


SELECT OrderID, Quantity, IF(Quantity>10, "MORE", "LESS")
FROM OrderDetails;
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

fazer pesquisa em mysql acrescentando um campo não existente

Mensagempor Amparo » 24 Out 2019 12:29

ola amigos

José Quintas

pelo que eu entendi ele apenas satisfaz uma condição e não cria um coluna nova com o resultado por exemplo

SELETC NOME,CNPJ,CONCEITO, LIM_CREDIT FROM CLIENTES ....

A CONSULTA TRAZ:

NOME CNPJ CONCEITO LIM_CREDIT
ANDRE 028... BOM 250.00
PAULO 116... BOM 300.00
JOSE 562... BOM 450.00
VICENTE 854... NOVO 150.00

agora eu queria cria uma consulta e acrescentar uma coluna com o resultado de alguma expressão: por exemplo

SELETC NOME,CNPJ,CONCEITO, LIMIT_CREDIT, IIF( CONCEITO = "BOM", "APROVA VENDAS", "VERIFICAR") FROM CLIENTES ....

NOME CNPJ CONCEITO LIMIT_CREDIT SITUAÇÃO
ANDRE 028... BOM 250.00 APROVA VENDAS
PAULO 116... BOM 300.00 APROVA VENDAS
JOSE 562... BOM 450.00 APROVA VENDAS
VICENTE 854... NOVO 150.00 VERIFICAR

OU

SELETC NOME,CNPJ,CONCEITO, LIM_CREDIT, IIF( LIMIT_CREDIT < 300.00, LIMIT_CREDIT * 1.20, LIMIT_CREDIT * 1.50 ) FROM CLIENTES ....

NOME CNPJ CONCEITO LIMIT_CREDIT PREVISAO AUMENTO
ANDRE 028... BOM 250.00 300.00
PAULO 116... BOM 300.00 450.00
JOSE 562... BOM 450.00 675.00
VICENTE 854... NOVO 150.00 180.00

ABRAÇOS
Avatar de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 337
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

fazer pesquisa em mysql acrescentando um campo não existente

Mensagempor JoséQuintas » 24 Out 2019 12:49

Não era isto que queria?

teste.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

fazer pesquisa em mysql acrescentando um campo não existente

Mensagempor JoséQuintas » 24 Out 2019 12:54

SELECT 
IF( CONCEITO = "BOM", "APROVA VENDAS", "VERIFICAR" ) AS STATUS,
( CASE
WHEN LIMIT_CREDIT < 300 THEN LIMIT_CREDIT * 1.2
ELSE LIMIT_CREDIT * 1.5
END ) AS LIMITE
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

fazer pesquisa em mysql acrescentando um campo não existente

Mensagempor Amparo » 24 Out 2019 13:48

ola amigos

José Quintas

eita que era isso mesmo que eu precisava, valeu!

abraço

Amparo
Avatar de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 337
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes




Retornar para Banco de Dados

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 17 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro