| Subject |
Re: PostgreSQL |
| From |
Osvaldo Ramirez |
| Date |
Tue, 06 May 2008 16:37:26 -0600 |
| Newsgroups |
xfree.public |
| Attachment(s) |
test.prg, libpq4xb.prg |
Well guys,
It is a pleasure a to upload the first program that connect to
PostgreSQL - API,
So, it is the begin and We will upload more samples codes and documents
about how to access via API or ODBC, remeber all this is based on my own
experience.
This example use the lib ot4xb.lib from www.xbwin.com
where you can download the updates files.
Enjoy it
----------------------------------------------------------------
Estiamdos
Es un placer poner el primer ejemplo para accesar PostgreSQL via API,
Poco a poco iremos poniendo ejemplos de para accesar PostgreSQL ya sea
usando el API o via ODBC. Recuerden esto es basado en mi propia experiencia.
Este ejemplo usa la libreria ot4xb de www.xbwin.com, solo hay que bajar
la mas actual.
Espero que disfruten esto:
Osvaldo Ramirez
|
#include "ot4xb.ch"
#include "libpq4xb.ch"
function main()
* Begin
local conn := pqSetDbLogin("localhost","5432",NIL,NIL,"database","postgres",NIL)
local result,query,n,nRows
if ( PQstatus(conn) != ConnStatusType.Ok )
? cPrintf( "Connection to database failed: %s", PQerrorMessage(conn) )
else
query := "SELECT cliente_name ) FROM information_schema.tables " +;
"WHERE table_schema = 'public'"
result := pqExec(conn,query)
nRows := pqntuples( result )
? "TABLES: "
for n := 1 to nRows
?? iif( n > 1 , ", " , "")
?? pqGetValue(result,n-1,0)
next
pqClear(result) ; result := NIL
PQfinish(conn)
end
inkey(0)
return NIL
| #include "ot4xb.ch"
#include "libpq4xb.ch"
init proc load_the_libpq_dll()
* Begin
local e
if nLoadLibrary("libpq.dll") == 0
e := Error():New()
e:severity := 3
e:subsystem := "libpq4xb"
e:description := "Unable to load libpq.dll"
Eval( ErrorBlock() , e )
end
return
BEGIN STRUCTURE pgNotify
MEMBER LPSTR relname STRZ_READ cRelName
MEMBER int be_pid
MEMBER LPSTR extra
MEMBER POINTER32 pNext LINK oNext
END STRUCTURE
BEGIN STRUCTURE pqPrintOpt
MEMBER BYTEBOOL header
MEMBER BYTEBOOL align
MEMBER BYTEBOOL standard
MEMBER BYTEBOOL html3
MEMBER BYTEBOOL expanded
MEMBER BYTEBOOL pager
GWSTALIGNNEXTMEMBER(8)
MEMBER LPSTR fieldSep DYNSZ cFieldSep
MEMBER LPSTR tableOpt DYNSZ cTableOpt
MEMBER LPSTR caption DYNSZ cCaption
MEMBER POINTER32 fieldName
DYNAMIC METHOD SetFieldNames BLOCK {|s,a| _xfree(s:fieldName), s:fieldName := iif(a == NIL,0,Array2ppMarshall(a)) }
DYNAMIC METHOD GetFieldNames BLOCK {|s| ppMarshall2Array(s:fieldName) }
END STRUCTURE
BEGIN STRUCTURE pqConnInfoOption
MEMBER LPSTR keyword STRZ_READ cKeyword
MEMBER LPSTR envvar STRZ_READ cEnvVar
MEMBER LPSTR compiled STRZ_READ cCompiled
MEMBER LPSTR val STRZ_READ cVal
MEMBER LPSTR label STRZ_READ cLabel
MEMBER LPSTR dispchar STRZ_READ cDispChar
MEMBER int dispsize
END STRUCTURE
BEGIN STRUCTURE pqArgBlock_internal_union
MEMBER POINTER32 ptr ; GWSTBACK ; MEMBER int integer
END STRUCTURE
BEGIN STRUCTURE pqArgBlock
MEMBER int len
MEMBER int isint ; GWSTBACK ; MEMBER BOOL lIsInt
MEMBER POINTER32 ptr ; GWSTBACK
MEMBER int integer ; GWSTBACK
MEMBER @ pqArgBlock_internal_union u
END STRUCTURE
function PQsetdb(host,port,opt,tty,dbname) ; return PQsetdbLogin(host,port,opt,tty,dbname, 0 , 0 )
DLL libpq XIMPORT HANDLE PQconnectStart(LPSTR conninfo)
DLL libpq XIMPORT int PQconnectPoll(HANDLE conn)
DLL libpq XIMPORT HANDLE PQconnectdb(LPSTR conninfo)
DLL libpq XIMPORT HANDLE PQsetdbLogin(LPSTR host,LPSTR port,LPSTR opt,LPSTR tty,LPSTR db,LPSTR login,LPSTR pwd)
DLL libpq XIMPORT void PQfinish(HANDLE conn)
DLL libpq XIMPORT POINTER32 PQconndefaults()
DLL libpq XIMPORT void PQconninfoFree(POINTER32 connOptions)
DLL libpq XIMPORT int PQresetStart(HANDLE conn)
DLL libpq XIMPORT int PQresetPoll(HANDLE conn)
DLL libpq XIMPORT void PQreset(HANDLE conn)
DLL libpq XIMPORT HANDLE PQgetCancel(HANDLE conn)
DLL libpq XIMPORT void PQfreeCancel(HANDLE cancel)
DLL libpq XIMPORT int PQcancel(HANDLE cancel, LPSTR errbuf, int errbufsize) ;
DEFAULT errbufsize := iif(Valtype(errbuf)=="C",Len(errbuf),0)
DLL libpq XIMPORT int PQrequestCancel(HANDLE conn)
DLL libpq XIMPORT ZSTRING PQdb(HANDLE conn)
DLL libpq XIMPORT ZSTRING PQuser(HANDLE conn)
DLL libpq XIMPORT ZSTRING PQpass(HANDLE conn)
DLL libpq XIMPORT ZSTRING PQhost(HANDLE conn)
DLL libpq XIMPORT ZSTRING PQport(HANDLE conn)
DLL libpq XIMPORT ZSTRING PQtty(HANDLE conn)
DLL libpq XIMPORT ZSTRING PQoptions(HANDLE conn)
DLL libpq XIMPORT int PQstatus(HANDLE conn)
DLL libpq XIMPORT int PQtransactionStatus(HANDLE conn)
DLL libpq XIMPORT ZSTRING PQparameterStatus(HANDLE conn,LPSTR paramName)
DLL libpq XIMPORT int PQprotocolVersion(HANDLE conn)
DLL libpq XIMPORT int PQserverVersion(HANDLE conn)
DLL libpq XIMPORT ZSTRING PQerrorMessage(HANDLE conn)
DLL libpq XIMPORT int PQsocket(HANDLE conn)
DLL libpq XIMPORT int PQbackendPID(HANDLE conn)
DLL libpq XIMPORT int PQconnectionNeedsPassword(HANDLE conn)
DLL libpq XIMPORT int PQconnectionUsedPassword(HANDLE conn)
DLL libpq XIMPORT int PQclientEncoding(HANDLE conn)
DLL libpq XIMPORT int PQsetClientEncoding(HANDLE conn,LPSTR encoding)
DLL libpq XIMPORT POINTER32 PQgetssl(HANDLE conn)
DLL libpq XIMPORT void PQinitSSL(int do_init)
DLL libpq XIMPORT int PQsetErrorVerbosity(HANDLE conn,int verbosity)
DLL libpq XIMPORT void PQtrace(HANDLE conn, POINTER32 debug_port)
DLL libpq XIMPORT void PQuntrace(HANDLE conn)
DLL libpq XIMPORT DWORD PQsetNoticeReceiver(HANDLE conn,DWORD pProc, POINTER32 pArg)
DLL libpq XIMPORT DWORD PQsetNoticeProcessor(HANDLE conn, DWORD pProc,POINTER32 pArg)
DLL libpq XIMPORT DWORD PQregisterThreadLock(DWORD pNewhandler)
DLL libpq XIMPORT HANDLE PQexec(HANDLE conn, LPSTR cQuery)
DLL libpq XIMPORT HANDLE PQexecParams(HANDLE conn,LPSTR command, int nParams, LPLONG paramTypes,;
POINTER32 pValues, LPLONG pLen, LPLONG pFormats,int resultFormat)
DLL libpq XIMPORT HANDLE PQprepare(HANDLE conn, LPSTR cStmtName,LPSTR query, int nParams,LPLONG paramTypes)
DLL libpq XIMPORT HANDLE PQexecPrepared(HANDLE conn,LPSTR cStmtName,int nParams, POINTER32 pValues,;
LPLONG pLen, LPLONG pFormats,int resultFormat)
DLL libpq XIMPORT int PQsendQuery(HANDLE conn, LPSTR query)
DLL libpq XIMPORT int PQsendQueryParams( HANDLE conn,LPSTR command, int nParams,LPLONG paramTypes,;
POINTER32 pValues, LPLONG pLen, LPLONG pFormats,int resultFormat)
DLL libpq XIMPORT int PQsendPrepare(HANDLE conn, LPSTR pStmtName, LPSTR query, int nParams,LPLONG paramTypes)
DLL libpq XIMPORT int PQsendQueryPrepared(HANDLE conn,LPSTR stmtName,int nParams, POINTER32 pValues,;
LPLONG pLen, LPLONG pFormats, int resultFormat)
DLL libpq XIMPORT HANDLE PQgetResult(HANDLE conn)
DLL libpq XIMPORT int PQisBusy(HANDLE conn)
DLL libpq XIMPORT int PQconsumeInput(HANDLE conn)
DLL libpq XIMPORT POINTER32 PQnotifies(HANDLE conn)
DLL libpq XIMPORT int PQputCopyData(HANDLE conn,LPSTR buffer, int nBytes) ;
DEFAULT nBytes := iif(Valtype(buffer)=="C",Len(buffer),0)
DLL libpq XIMPORT int PQputCopyEnd(HANDLE conn,LPSTR errormsg)
DLL libpq XIMPORT int PQgetCopyData(HANDLE conn,POINTER32 ppBuffer, BOOL async)
DLL libpq XIMPORT int PQsetnonblocking(HANDLE conn, int arg)
DLL libpq XIMPORT BOOL PQisnonblocking(HANDLE conn)
DLL libpq XIMPORT BOOL PQisthreadsafe()
DLL libpq XIMPORT BOOL PQflush(HANDLE conn)
DLL libpq XIMPORT int PQresultStatus(HANDLE result)
DLL libpq XIMPORT ZSTRING PQresStatus(int status)
DLL libpq XIMPORT ZSTRING PQresultErrorMessage(HANDLE result )
DLL libpq XIMPORT ZSTRING PQresultErrorField(HANDLE result, int fieldcode)
DLL libpq XIMPORT int PQntuples(HANDLE result)
DLL libpq XIMPORT int PQnfields(HANDLE result)
DLL libpq XIMPORT int PQbinaryTuples(HANDLE result)
DLL libpq XIMPORT ZSTRING PQfname(HANDLE result,int field_num)
DLL libpq XIMPORT int PQfnumber(HANDLE result, LPSTR field_name)
DLL libpq XIMPORT int PQftable(HANDLE result, int field_num)
DLL libpq XIMPORT int PQftablecol(HANDLE result, int field_num)
DLL libpq XIMPORT int PQfformat(HANDLE result, int field_num)
DLL libpq XIMPORT int PQftype(HANDLE result, int field_num)
DLL libpq XIMPORT int PQfsize(HANDLE result, int field_num)
DLL libpq XIMPORT int PQfmod(HANDLE result, int field_num)
DLL libpq XIMPORT ZSTRING PQcmdStatus(HANDLE result)
DLL libpq XIMPORT INT PQoidValue(HANDLE result)
DLL libpq XIMPORT ZSTRING PQcmdTuples(HANDLE result)
DLL libpq XIMPORT ZSTRING PQgetvalue(HANDLE result, int tup_num, int field_num)
DLL libpq XIMPORT int PQgetlength(HANDLE result, int tup_num, int field_num)
DLL libpq XIMPORT int PQgetisnull(HANDLE result, int tup_num, int field_num)
DLL libpq XIMPORT int PQnparams(HANDLE result)
DLL libpq XIMPORT int PQparamtype(HANDLE result, int param_num)
DLL libpq XIMPORT HANDLE PQdescribePrepared(HANDLE conn, LPSTR stmt)
DLL libpq XIMPORT HANDLE PQdescribePortal(HANDLE conn,LPSTR portal)
DLL libpq XIMPORT int PQsendDescribePrepared(HANDLE conn,LPSTR stmt)
DLL libpq XIMPORT int PQsendDescribePortal(HANDLE conn,LPSTR portal)
DLL libpq XIMPORT void PQclear(HANDLE pgResult)
DLL libpq XIMPORT void PQfreemem(POINTER32 ptr)
DLL libpq XIMPORT void PQfreeNotify(POINTER32 ptr) SYMBOL PQfreemem
DLL libpq XIMPORT HANDLE PQmakeEmptyPGresult(HANDLE conn, int status)
DLL libpq XIMPORT int PQescapeStringConn(HANDLE conn, LPSTR pTo,LPSTR pFrom,int nLen,LPLONG pError)
DLL libpq XIMPORT LPBYTE PQescapeByteaConn(HANDLE conn,LPSTR pFrom, DWORD cbFrom,LPDWORD cbResult)
function cPqEscapeByteA(conn,cFrom)
* Begin
local cbResult := 0
local pStr := 0
local cStr
if ( Valtype( cFrom ) $ "CM" )
pStr := PQescapeByteaConn(conn,cFrom,Len(cFrom),@cbResult)
if( pStr != 0 )
cStr := PeekStr(pStr,0,cbResult) ; PQfreemem( pStr )
return cStr
end
end
return NIL
DLL libpq XIMPORT LPBYTE PQunescapeBytea(LPSTR pText, LPDWORD cbResult)
function cPqUnescapeByteA(cText)
* Begin
local cbResult := 0
local pStr := 0
local cStr
if ( Valtype( cText ) $ "CM" )
pStr := PQunescapeBytea(cText,@cbResult)
if( pStr != 0 )
cStr := PeekStr(pStr,0,cbResult) ; PQfreemem( pStr )
return cStr
end
end
return NIL
DLL libpq XIMPORT int lo_open(HANDLE conn, int nObjOid, int mode)
DLL libpq XIMPORT int lo_close(HANDLE conn, int fd)
DLL libpq XIMPORT int lo_read(HANDLE conn, int fd, LPSTR buf, DWORD nLen)
DLL libpq XIMPORT int lo_write(HANDLE conn, int fd,LPSTR buf, DWORD nLen)
DLL libpq XIMPORT int lo_lseek(HANDLE conn, int fd, int offset, int whence)
DLL libpq XIMPORT int lo_creat(HANDLE conn, int mode)
DLL libpq XIMPORT int lo_create(HANDLE conn,int nObjOid)
DLL libpq XIMPORT int lo_tell(HANDLE conn, int fd)
DLL libpq XIMPORT int lo_truncate(HANDLE conn, int fd,DWORD len)
DLL libpq XIMPORT int lo_unlink(HANDLE conn, int nObjOid)
DLL libpq XIMPORT int lo_import(HANDLE conn, LPSTR filename)
DLL libpq XIMPORT int lo_export(HANDLE conn,int nObjOid, LPSTR filename)
DLL libpq XIMPORT int PQmblen(LPSTR s, int encoding)
DLL libpq XIMPORT int PQdsplen(LPSTR s, int encoding)
DLL libpq XIMPORT int PQenv2encoding()
DLL libpq XIMPORT LPSTR PQencryptPassword(LPSTR passwd,LPSTR user)
function cPQencryptPassword(cPwd,cUser)
* Begin
local pStr := PQencryptPassword(cPwd,cUser)
local cStr
if ( pStr != 0 )
cStr := PeekStr(pStr,0,-1); PQfreemem( pStr )
return cStr
end
return NIL
DLL libpq XIMPORT int pg_char_to_encoding(LPSTR name)
DLL libpq XIMPORT ZSTRING pg_encoding_to_char(int encoding)
DLL libpq XIMPORT int pg_valid_server_encoding_id(int encoding)
//-------------------------------------------------------------------------------------------------------------------------
// Deprecated routines for copy in/out
// DLL libpq XIMPORT int PQgetline(HANDLE conn,LPSTR string, int len)
// DLL libpq XIMPORT int PQputline(HANDLE conn,LPSTR string)
// DLL libpq XIMPORT int PQgetlineAsync(HANDLE conn,LPSTR buffer, int bufsize);
// DEFAULT bufsize := iif(Valtype(buffer)=="C",Len(buffer),0)
// DLL libpq XIMPORT int PQputnbytes(HANDLE conn,LPSTR buffer, int nbytes)
// DEFAULT nbytes := iif(Valtype(buffer)=="C",Len(buffer),0)
// DLL libpq XIMPORT int PQendcopy(HANDLE conn)
//-------------------------------------------------------------------------------------------------------------------------
// "Fast path" interface --- not really recommended for application use
// DLL libpq XIMPORT PGresult *PQfn( HANDLE conn,int fnid, LPLONG result_buf, LPLONG result_len,;
// BOOL result_is_int, POINTER32 args, int nargs)
//-------------------------------------------------------------------------------------------------------------------------
// PQoidStatus is deprecated in favor of PQoidValue. It is not thread-safe.
// DLL libpq XIMPORT ZSTRING PQoidStatus(HANDLE result) // NOT THREAD SAFE
//-------------------------------------------------------------------------------------------------------------------------
// These forms are deprecated
// DLL libpq XIMPORT DWORD PQescapeString(LPSTR pTo,LPSTR pFrom, int nLen)
// DLL libpq XIMPORT LPBYTE PQescapeBytea(LPSTR pFrom, DWORD cbFrom,LPDWORD pcbTo)
//-------------------------------------------------------------------------------------------------------------------------
// The contents of FILE structure vary on single/multi thread and debug on/off compilation
// DLL libpq XIMPORT void PQprint(POINTER32 pFILE_out,HANDLE result,POINTER32 ps)
// really old printing routines
// DLL libpq XIMPORT void PQdisplayTuples(HANDLE result,POINTER32 pFILE,BOOL nFillAlign,;
// LPSTR cFieldSep, BOOL bPrintHeader,BOOL bQuiet)
// DLL libpq XIMPORT void PQprintTuples(HANDLE result,POINTER32 pFILE, BOOL bPrintAttName,;
// int terseOutput, int width)
//-------------------------------------------------------------------------------------------------------------------------
|
|