Podrška #25021
Zatvorenharbour postgresql playground
100%
Fajlovi
Izmjenjeno od Ernad Husremović prije oko 14 godina
- Fajl tpostgre.prg tpostgre.prg dodano
ovdje sam našao što mi treba hernad@macan:~/devel/harbour/harbour-3.0.0/contrib/hbpgsql
Izmjenjeno od Ernad Husremović prije oko 14 godina
tpostgre.prg je set harbour klasa koje prave clipper-like apstrakciju postgresql interfejsa
Izmjenjeno od Ernad Husremović prije oko 14 godina
- Fajl simple.prg simple.prg dodano
ovaj simple u tests/ poddirektoriju demonstira sve osnovne operacije
Izmjenjeno od Ernad Husremović prije oko 14 godina
pravimo query, analiziramo strukturu dobijenog query-ja, uzimamo jedan row iz query-ja ...
znači imamo hijerarhiju
Server
TableStruct
Table
Row
Query
Row
Field
sekvenca select-a:
oQuery := oServer:Query( "SELECT code, name, description, sales FROM test" )
aStruct := oQuery:Struct()
FOR i := 1 TO Len( aStruct )
? aStruct[ i ][ 1 ], aStruct[ i ][ 2 ], aStruct[ i ][ 3 ], aStruct[ i ][ 4 ]
NEXT
? "Fields: ", oQuery:Fcount()
oRow := oQuery:Blank()
? oRow:FCount(), ;
oRow:Fieldpos( "sales" ), ;
oRow:Fieldget( 1 ), ;
oRow:Fieldname( 2 ), ;
oRow:Fieldtype( 1 ), ;
oRow:Fielddec( 1 ), ;
oRow:Fieldlen( 1 )
oRow:Fieldput( 1, 150 )
oRow:Fieldput( 2, "MY TEST" )
? oRow:Fieldget( 1 ), oRow:Fieldget( 2 )
? oRow:aRow[ 1 ], oRow:aRow[ 2 ], oRow:aOld[ 1 ], oRow:aOld[ 2 ]
? oQuery:Append( oRow )
? oQuery:ErrorMsg()
DO WHILE ! oQuery:Eof()
? oQuery:Recno(),;
oQuery:Fieldpos( "code" ),;
oQuery:Fieldget( oQuery:Fieldpos( "code" ) ), ;
oQuery:Fieldget( 4 ), ;
oQuery:Fieldget( 2 ), ;
oQuery:Fieldname( 1 ),;
oQuery:Fieldtype( 1 ), ;
oQuery:Fielddec( 1 ), ;
oQuery:Fieldlen( 1 ),;
oQuery:Fieldget( 3 )
IF oQuery:Recno() == 50
oRow := oQuery:getrow()
oRow:Fieldput( 2, "My Second test" )
? "Update: ", oQuery:Update( oRow )
ENDIF
IF oQuery:Recno() == 60
oRow := oQuery:getrow()
? "Delete: ", oQuery:Delete( oRow )
ENDIF
oQuery:Skip()
ENDDO
Izmjenjeno od Ernad Husremović prije oko 14 godina
pošto si se "izgubio" u mogućim varijantama pristupa, pogledajmo metod New klase TPQServer:
METHOD New( cHost, cDatabase, cUser, cPass, nPort, Schema ) CLASS TPQserver
LOCAL res
IF ! ISNUMBER( nPort )
nPort := 5432
ENDIF
::pDB := PQconnectDB( "dbname = " + cDatabase + " host = " + cHost + " user = " + cUser + " password = " + cPass + " port = " + hb_ntos( nPort ) )
IF PQstatus( ::pDb ) != CONNECTION_OK
::lError := .T.
::cError := PQerrormessage( ::pDb )
ELSE
IF ! Empty( Schema )
::SetSchema( Schema )
ELSE
res := PQexec( ::pDB, "SELECT current_schema()" )
IF PQresultStatus( res ) == PGRES_TUPLES_OK
::Schema := PQgetvalue( res, 1, 1 )
ENDIF
res := NIL
ENDIF
ENDIF
RETURN self
tu su ove PQconnect, PQgetvalue itd funkcije enkapsulirane. znači treba koristiti klase iz ove tpostgre.prg
Izmjenjeno od Ernad Husremović prije oko 14 godina
... ako želimo nešto ozbiljnije raditi osim slanja određenih komandi postgresql serveru
Izmjenjeno od Ernad Husremović prije oko 14 godina
harbour _sql_quote utility funkcija:
Izmjenjeno od Ernad Husremović prije oko 14 godina
fmk fin_suban
u ovom commit-u sam pročistio fin_suban
ona sad ima osnovnu zaštitu integriteta: idfirma, idvn, brnal
takođe sam polja proširio. recimo opis. sve to nema uticaj na komunikaciju dbf <-> sql koju rade semafori, a omogućava nam da podatke "oplemenimo" u budućim verzijama bez potrebe da se na strani sql servera vrši proširenje polja.
Opis više nije ograničen na 40 znakova :)
Izmjenjeno od Saša Vranić prije oko 14 godina
- Status promijenjeno iz Dodijeljeno u Zatvoreno
- % završeno promijenjeno iz 0 u 100
skontao