* /harbour/* -> /*
* moved whole Harbour source tree one level up to
avoid single 'harbour' top dir
76 lines
1.6 KiB
Plaintext
76 lines
1.6 KiB
Plaintext
/*
|
|
* $Id$
|
|
*/
|
|
|
|
/*
|
|
* This sample show howto use asynchronous/nonblocking queries
|
|
*/
|
|
|
|
#require "hbpgsql"
|
|
|
|
#include "inkey.ch"
|
|
|
|
PROCEDURE Main( cServer, cDatabase, cUser, cPass )
|
|
|
|
LOCAL conn
|
|
|
|
CLS
|
|
|
|
? "Connect", conn := PQconnectdb( "dbname = " + cDatabase + " host = " + cServer + " user = " + cUser + " password = " + cPass + " port = 5432" )
|
|
|
|
? "Conection status", PQerrorMessage( conn ), PQstatus( conn )
|
|
|
|
Query( conn, "SELECT codigo, descri FROM client limit 100", .F. )
|
|
Query( conn, "SELECT codigo, descri FROM fornec limit 100", .F. )
|
|
Query( conn, "SELECT pedido, vlrped FROM pedido", .T. )
|
|
|
|
RETURN
|
|
|
|
PROCEDURE Query( conn, cQuery, lCancel )
|
|
|
|
LOCAL pCancel, cErrMsg := Space( 30 )
|
|
LOCAL res, x, y, cTime
|
|
|
|
? "PQSendQuery", PQsendQuery( conn, cQuery )
|
|
|
|
cTime := Time()
|
|
CLEAR TYPEAHEAD
|
|
|
|
DO WHILE Inkey() != K_ESC
|
|
DevPos( Row(), 20 )
|
|
DevOut( "Processing: " + ElapTime( cTime, Time() ) )
|
|
|
|
Inkey( 1 )
|
|
|
|
IF lCancel
|
|
IF .T.
|
|
pCancel := PQgetCancel( conn )
|
|
? "Canceled: ", PQcancel( pCancel, @cErrMsg ), cErrMsg
|
|
pCancel := NIL
|
|
ELSE
|
|
? PQrequestCancel( conn ) /* Deprecated */
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF PQconsumeInput( conn )
|
|
IF ! PQisBusy( conn )
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
ENDDO
|
|
|
|
IF Inkey() != K_ESC
|
|
? "PQgetResult", hb_ValToExp( res := PQgetResult( conn ) )
|
|
|
|
FOR x := 1 TO PQlastrec( res )
|
|
?
|
|
FOR y := 1 TO PQfcount( res )
|
|
?? PQgetvalue( res, x, y ), " "
|
|
NEXT
|
|
NEXT
|
|
ELSE
|
|
? "Canceling Query", PQrequestCancel( conn )
|
|
ENDIF
|
|
|
|
RETURN
|