Clipper On Line • Ver Tópico - ajuda em rotina postgres?

ajuda em rotina postgres?

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

ajuda em rotina postgres?

Mensagempor pena » 27 Ago 2012 20:47

a rotina é simples, eu executo uma query na classe e retorno, minha duvida é simples,
como retornar o do campo, e nao a posicao que se encontra no oRow
          oClsMunicipio:Execute("SELECT codigo,municipio FROM municipio ORDER BY municipio ")
       aMunicipio:={}
       if oQuery:Lastrec() > 0
          for i:=1 to oQuery:Lastrec()
             vMunicipio ++
             oRow := oQuery:getrow(i)
             municipio=oRow:FieldGet(1)
             vUf ++
             aadd ( aMunicipio , municipio )
             if oRow:FieldGet(1) = cMunicipio .and. cMunicipio <> 0
                Pmunicipio=vMunicipio
             endif
         next
       endif

METHOD Execute(cSql) CLASS ClsUf
   oQuery := oServer:Query(cSql)
   if oQuery:neterr()
      Msgstop(oQuery:errorMsg())
      oQuery:Destroy()
   Endif
Nota de Moderação:
Pablo César: Mensagem editada para colocar a tag [ code ]
Veja como utilizar esta tag: Clique aqui
Avatar de usuário

pena
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 331
Data de registro: 06 Jul 2004 18:08
Cidade/Estado: CACHOEIRA DO SUL-RS
Curtiu: 0 vez
Mens.Curtidas: 3 vezes

ajuda em rotina postgres?

Mensagempor alxsts » 28 Ago 2012 14:12

Olá!

Imagino que você queira o nome do campo. Também não fica claro de onde vem o objeto oQuery.

Nunca mexi com este RDD mas, pela semelhança de nomes dos métodos das classes, peço que rode o código abaixo, para sabermos se retorna os nomes das colunas:
CLS

oClsMunicipio:Execute("SELECT codigo,municipio FROM municipio ORDER BY municipio ")

oRow := oQuery:getrow(1)

FOR i := 1 TO oQuery:fCount()
  ? oRow:FieldName( oRow:FieldGet(i) )
NEXT
Creio que com FielName() funcione.
[]´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

ajuda em rotina postgres?

Mensagempor pena » 28 Ago 2012 15:35

Estou usando minigui 2.1.3 com harbour, e me basiei no exemplo da pasta sampes\postgres , so nao fui muito claro, estou conseguindo trazer as informacoes tudo certinho, mas eu queria era facilitar pra quem esta desenvolvendo, porque, desta forma
oRow:Fieldget(2)


eu tenho que colocar a coluna que quero trazer, portanto ficaria mais facil se fosse que nem no firebird
oCursor:Fields["Descricao"]:value
Avatar de usuário

pena
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 331
Data de registro: 06 Jul 2004 18:08
Cidade/Estado: CACHOEIRA DO SUL-RS
Curtiu: 0 vez
Mens.Curtidas: 3 vezes

ajuda em rotina postgres?

Mensagempor pena » 28 Ago 2012 15:35

Estou usando minigui 2.1.3 com harbour, e me basiei no exemplo da pasta sampes\postgres , so nao fui muito claro, estou conseguindo trazer as informacoes tudo certinho, mas eu queria era facilitar pra quem esta desenvolvendo, porque, desta forma
oRow:Fieldget(2)


eu tenho que colocar a coluna que quero trazer, portanto ficaria mais facil se fosse que nem no firebird
oCursor:Fields["Descricao"]:value
Avatar de usuário

pena
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 331
Data de registro: 06 Jul 2004 18:08
Cidade/Estado: CACHOEIRA DO SUL-RS
Curtiu: 0 vez
Mens.Curtidas: 3 vezes

ajuda em rotina postgres?

Mensagempor alxsts » 28 Ago 2012 15:43

Olá!

Como mencionei antes, não conheço este RDD. Creio que seja possível acessar este banco via ADO. Assim, a sintaxe seria próxima dessa que você postou.
[]´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

ajuda em rotina postgres?

Mensagempor pena » 28 Ago 2012 15:52

mas via Ado, nao vou perder performance? estou tentando migrar para o postgres,
1. cfe pesquisas, é um banco mais robusto, mais completo
2. acesso nativo

se estiver enganado, me corrija por favor
Avatar de usuário

pena
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 331
Data de registro: 06 Jul 2004 18:08
Cidade/Estado: CACHOEIRA DO SUL-RS
Curtiu: 0 vez
Mens.Curtidas: 3 vezes

ajuda em rotina postgres?

Mensagempor sygecom » 28 Ago 2012 16:12

pena escreveu:mas via Ado, nao vou perder performance? estou tentando migrar para o postgres,
1. cfe pesquisas, é um banco mais robusto, mais completo
2. acesso nativo

se estiver enganado, me corrija por favor

Sem duvida é mais rápido, em meus teste é até mais rápido que o SQLRDD.
Eu uso essa LIB só não entendi ao certo que você está querendo, post exemplo simbólico do resultado que queres.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7006
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 130 vezes

ajuda em rotina postgres?

Mensagempor sygecom » 28 Ago 2012 16:19

Eu tenho duas function que uso muito aqui, que são as duas abaixo, onde coloquei elas no seguinte arquivo: tpostgre.prg

Em anexo segue um exemplo de como usar algumas funções dessa LIB e mais essas duas abaixo( para compilar tem que linkar com Hwgui )

************************************************************
FUNCTION EXECUTA_PGSQL2( oServer, cQuery, aResult, aColunas )
************************************************************
local pQuery, temp, aTemp, x, y, __nTOTCOL:=0, __nTOTLIN:=0

pQuery := PQexec( oServer:pDB, cQuery )

if PQresultstatus( pQuery ) == PGRES_TUPLES_OK
   __nTOTLIN:=PQLastrec( pQuery )
   if __nTOTLIN != 0
      __nTOTCOL:=PQFcount( pQuery )
      if __nTOTCOL == 1 .and. __nTOTLIN == 1
         temp    := PQGetValue( pQuery, 1, 1 )
         aResult := iif( temp == NIL, "", temp )
         if aColunas#nil
            temp := PQfname(pQuery,1)
            if !empty(temp)
               AADD(aColunas, temp )
            endif
         endif
      else
         aResult := {}
         for x := 1 to __nTOTLIN
             if aColunas#nil
                temp := PQfname(pQuery,x)
                if !empty(temp)
                   AADD(aColunas, temp )
                endif
             endif
             aTemp := {}
             for y := 1 to __nTOTCOL
                temp := PQGetValue( pQuery, x, y )
                aadd( aTemp, iif( temp == NIL, "", temp ) )
             next
             aadd( aResult, aTemp)
         next
      endif
   endif
endif

pQuery:=nil

return NIL

**********************************************************
FUNCTION EXECUTA_PGSQL(oServer, cQuery, aResult, aColunas)
**********************************************************
Local x, y, __nTOTCOL:=0, __nTOTLIN:=0
Local aTemp, __oQuery, __lret:=.t.

__oQuery := oServer:Query( cQuery ) // exeuta uma query
if __oQuery:neterr()
   __lret:=.f.
   oServer:cError:='Erro:'+ __oQuery:ErrorMsg()
else
   if aColunas#Nil
      aColunas:=__oQuery:Struct(.t.) // somente nome das colunas
   endif
   if aResult#Nil
      __nTOTCOL:=__oQuery:nFields
      __nTOTLIN:=__oQuery:nLastrec

      aResult := {}
      for x := 1 to __nTOTLIN
          aTemp := {}
          for y := 1 to __nTOTCOL
             temp := __oQuery:FieldGet( y , x )
             aadd( aTemp, iif( temp == NIL, "", temp ) )
          next
          aadd( aResult, aTemp)
      next
   endif
endif
__oQuery:Destroy()

RETURN(__lret)
Anexos
exemplo.prg
(9.85 KiB) Baixado 95 vezes
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7006
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 130 vezes

ajuda em rotina postgres?

Mensagempor pena » 28 Ago 2012 17:09

É simples o que quero, queria apenas, num select poder passar o nome dos campos, e não a posicao dentro do select

exemplo
no firebird faco assim

    oRef:Open("SELECT id_conta,descricao FROM plano WHERE id_conta = '"+cContaReferencial,CNN,2,3)
      if ! oRef:Eof()
         cDreferencial     := oRef:Fields["Descricao"]:value
      endif

no postgres
   oQuery:Open("SELECT id_conta,descricao FROM plano WHERE id_conta = '"+cContaReferencial)
       if oQuery:Lastrec() > 0
             oRow := oQuery:getrow(i)
             cDreferencial :=oRow:Fieldget(2)
      endif
Avatar de usuário

pena
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 331
Data de registro: 06 Jul 2004 18:08
Cidade/Estado: CACHOEIRA DO SUL-RS
Curtiu: 0 vez
Mens.Curtidas: 3 vezes




Retornar para MiniGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 8 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