Projekat

Općenito

Profil

Akcije

Podrška #25021

Zatvoren

harbour postgresql playground

Dodano od Ernad Husremović prije oko 14 godina. Izmjenjeno prije oko 14 godina.

Status:
Zatvoreno
Prioritet:
Normalan
Odgovorna osoba:
Saša Vranić
Početak:
27.10.2011
Završetak:
% završeno:

100%

Procjena vremena:

Fajlovi

tpostgre.prg (31,5 KB) tpostgre.prg Ernad Husremović, 27.10.2011 14:35
simple.prg (3,74 KB) simple.prg Ernad Husremović, 27.10.2011 14:36
Akcije #1

Izmjenjeno od Ernad Husremović prije oko 14 godina

ovdje sam našao što mi treba hernad@macan:~/devel/harbour/harbour-3.0.0/contrib/hbpgsql

Akcije #2

Izmjenjeno od Ernad Husremović prije oko 14 godina

tpostgre.prg je set harbour klasa koje prave clipper-like apstrakciju postgresql interfejsa

Akcije #3

Izmjenjeno od Ernad Husremović prije oko 14 godina

ovaj simple u tests/ poddirektoriju demonstira sve osnovne operacije

Akcije #4

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

Akcije #5

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

Akcije #6

Izmjenjeno od Ernad Husremović prije oko 14 godina

... ako želimo nešto ozbiljnije raditi osim slanja određenih komandi postgresql serveru

Akcije #7

Izmjenjeno od Ernad Husremović prije oko 14 godina

harbour _sql_quote utility funkcija:

http://redmine.bring.out.ba/issues/25020#note-4

Akcije #8

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 :)

Akcije #9

Izmjenjeno od Saša Vranić prije oko 14 godina

  • Status promijenjeno iz Dodijeljeno u Zatvoreno
  • % završeno promijenjeno iz 0 u 100

skontao

Akcije

Također dostupno kao Atom PDF