ajuda em rotina postgres?

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

pena
Usuário Nível 3
Usuário Nível 3
Mensagens: 331
Registrado em: 06 Jul 2004 18:08
Localização: CACHOEIRA DO SUL-RS

ajuda em rotina postgres?

Mensagem por pena »

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

Código: Selecionar todos

          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
Editado pela última vez por Pablo César em 27 Ago 2012 20:50, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

ajuda em rotina postgres?

Mensagem por alxsts »

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:

Código: Selecionar todos

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)
pena
Usuário Nível 3
Usuário Nível 3
Mensagens: 331
Registrado em: 06 Jul 2004 18:08
Localização: CACHOEIRA DO SUL-RS

ajuda em rotina postgres?

Mensagem por pena »

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

Código: Selecionar todos

oRow:Fieldget(2)
eu tenho que colocar a coluna que quero trazer, portanto ficaria mais facil se fosse que nem no firebird

Código: Selecionar todos

oCursor:Fields["Descricao"]:value
pena
Usuário Nível 3
Usuário Nível 3
Mensagens: 331
Registrado em: 06 Jul 2004 18:08
Localização: CACHOEIRA DO SUL-RS

ajuda em rotina postgres?

Mensagem por pena »

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

Código: Selecionar todos

oRow:Fieldget(2)
eu tenho que colocar a coluna que quero trazer, portanto ficaria mais facil se fosse que nem no firebird

Código: Selecionar todos

oCursor:Fields["Descricao"]:value
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

ajuda em rotina postgres?

Mensagem por alxsts »

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)
pena
Usuário Nível 3
Usuário Nível 3
Mensagens: 331
Registrado em: 06 Jul 2004 18:08
Localização: CACHOEIRA DO SUL-RS

ajuda em rotina postgres?

Mensagem por pena »

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 do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

ajuda em rotina postgres?

Mensagem por sygecom »

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
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

ajuda em rotina postgres?

Mensagem por sygecom »

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 )

Código: Selecionar todos

************************************************************
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 175 vezes
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
pena
Usuário Nível 3
Usuário Nível 3
Mensagens: 331
Registrado em: 06 Jul 2004 18:08
Localização: CACHOEIRA DO SUL-RS

ajuda em rotina postgres?

Mensagem por pena »

É 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

Código: Selecionar todos

    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

Código: Selecionar todos

   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
Responder