Página 1 de 1

ajuda em rotina postgres?

Enviado: 27 Ago 2012 20:47
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

ajuda em rotina postgres?

Enviado: 28 Ago 2012 14:12
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.

ajuda em rotina postgres?

Enviado: 28 Ago 2012 15:35
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

ajuda em rotina postgres?

Enviado: 28 Ago 2012 15:35
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

ajuda em rotina postgres?

Enviado: 28 Ago 2012 15:43
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.

ajuda em rotina postgres?

Enviado: 28 Ago 2012 15:52
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

ajuda em rotina postgres?

Enviado: 28 Ago 2012 16:12
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.

ajuda em rotina postgres?

Enviado: 28 Ago 2012 16:19
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)

ajuda em rotina postgres?

Enviado: 28 Ago 2012 17:09
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