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
eu tenho que colocar a coluna que quero trazer, portanto ficaria mais facil se fosse que nem no firebird
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
eu tenho que colocar a coluna que quero trazer, portanto ficaria mais facil se fosse que nem no firebird
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