123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- Program testpg;
- { Demo program to test pascal connection with postgres database }
- { Translated from the testlibpq example program of PostGreSQL }
- Uses postgres,strings;
- Procedure exit_nicely(Conn : PPGconn);
- begin
- PQfinish(conn);
- halt(1);
- end;
- Var
- pghost,pgport,pgoptions,pgtty,dbname : Pchar;
- nFields,i,j : longint;
- conn : PPGConn;
- res : PPGresult;
- begin
- pghost := NiL; { host name of the backend server }
- pgport := NiL; { port of the backend server }
- pgoptions := NiL; { special options to start up the backend server }
- pgtty := NiL; { debugging tty for the backend server }
- dbName := 'template1';
- { make a connection to the database }
- conn := PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);
- { check to see that the backend connection was successfully made }
- if (PQstatus(conn) = CONNECTION_BAD) then
- begin
- Writeln (stderr, 'Connection to database ',dbname,' failed.');
- Writeln (stderr, PQerrorMessage(conn));
- exit_nicely(conn);
- end;
- { start a transaction block }
- res := PQexec(conn, 'BEGIN');
- if (PQresultStatus(res) <> PGRES_COMMAND_OK) then
- begin
- Writeln (stderr, 'BEGIN command failed');
- PQclear(res);
- exit_nicely(conn);
- end;
- {
- * should PQclear PGresult whenever it is no longer needed to avoid
- * memory leaks
- }
- PQclear(res);
- {
- * fetch instances from the pg_database, the system catalog of
- * databases
- }
- res := PQexec(conn, 'DECLARE myportal CURSOR FOR select * from pg_database');
- if (PQresultStatus(res) <> PGRES_COMMAND_OK) then
- begin
- Writeln (stderr, 'DECLARE CURSOR command failed');
- PQclear(res);
- exit_nicely(conn);
- end;
- PQclear(res);
- res := PQexec(conn, 'FETCH ALL in myportal');
- if (PQresultStatus(res) <> PGRES_TUPLES_OK) then
- begin
- Writeln (stderr, 'FETCH ALL command didn''t return tuples properly');
- PQclear(res);
- exit_nicely(conn);
- end;
- { first, print out the attribute names }
- nFields := PQnfields(res);
- for i := 0 to nFields-1 do
- Write (PQfname(res, i),space (15-strlen(PQfname(res, i))) );
- writeln;
- writeln;
- { next, print out the instances }
- for i := 0 to PQntuples(res)-1 do
- begin
- for j := 0 to nFields-1 do
- write(PQgetvalue(res, i, j),space (15-strlen(PQgetvalue(res, i,j))));
- writeln;
- end;
- PQclear(res);
- { close the portal }
- res := PQexec(conn, 'CLOSE myportal');
- PQclear(res);
- { end the transaction }
- res := PQexec(conn, 'END');
- PQclear(res);
- { close the connection to the database and cleanup }
- PQfinish(conn);
- end.
|