EL API de PostgreSQL Desde Fox

13
Programador: Aguirre Carlos Matías EL API de PostgreSQL desde Fox Para usar el API de Postgres en fox se necesita la librería libpq.dll esta se instala por defecto en las instalaciones de Postgres, para ver las utilidades y funciones de esta librería se realizaran una serie de procesos que se explicaran con detalle en este artículo: Lo primero que vamos hacer es crear una base de datos compuesta por dos tablas en PostgreSQL 8.0 de la siguiente manera: Una vez creada estas tablas en Postgres, vamos a crear una pequeña aplicación que permita realizar un ABM de clientes con sus zonas utilizando como conectividad el API de Postgres. Diseñe un formulario similar al siguiente:

description

Como usa postgresql desde fox

Transcript of EL API de PostgreSQL Desde Fox

EL API de PostgreSQL desde Fox

Programador: Aguirre Carlos Matas

EL API de PostgreSQL desde Fox

Para usar el API de Postgres en fox se necesita la librera libpq.dll esta se instala por defecto en las instalaciones de Postgres, para ver las utilidades y funciones de esta librera se realizaran una serie de procesos que se explicaran con detalle en este artculo:

Lo primero que vamos hacer es crear una base de datos compuesta por dos tablas en PostgreSQL 8.0 de la siguiente manera:

Una vez creada estas tablas en Postgres, vamos a crear una pequea aplicacin que permita realizar un ABM de clientes con sus zonas utilizando como conectividad el API de Postgres.

Disee un formulario similar al siguiente:

Una vez hecho esto, vamos a crear un mtodo (funcin) llamada init_api que se encargar de declarar las funciones de la librera libpq.

Existen varias funciones en la librera libpq pero estas son las que necesitaremos para nuestra aplicacin. Ahora vamos a describir que realizan cada una de estas funciones:

1- PQsetdbLogin: Establece una conexin con PostgreSQL. Sintaxis:

Declare Integer PQsetdbLogin in libpq.dll String host, String Puerto,; String opciones, String pgtty, String BD, String Login, String pwd

Host: N IP de la mquina o bien localhost si es local.

Puerto: El puerto utilizado por Postgres es el 5432

Opciones y pgtty: No se utilizan por lo tanto siempre se introduce NULL.

BD: Nombre de la Base de Datos

Login: Nombre del Usuario; pwd: Contrasea del servidor Postgres.

2- PQstatus: Devuelve el estado de una conexin. Sintaxis:

Declare Integer PQstatus in libpq.dll,;

Integer conec

Devuelve 0 si se conecta y 1 si no se conecta.

3- PQresultStatus: Devuelve el estado de un Resultado. Sintaxis:

Declare Integer PQresultstatus in libpq.dll, Integer Conexin

Valores Devueltos

1: Si inserta, actualiza o elimina

2: Si devuelve registros de una consulta, o si trae una consulta sin datos.

4- PQexec: Enva una consulta SQL a Postgres donde se procesa la instruccin. Sintaxis: Declare Integer PQexec in libpq.dll,;

Integer Conexin, String Consulta_SQL

5- PQntuples: Devuelve la cantidad de tuplas (filas) de un Resultado. Sintaxis:

Declare Integer PQntuples in libpq.dll Integer Resultado

6- PQnfileds: Devuelve la cantidad de columnas de un Resultado. Sintaxis:

Declare Integer PQnfields in libpq.dll Integer Resultado

Ejemplo: res= PQexec (con,Select * from libros)

Total=PQntuples (res) && Filas

Tot1=PQnfileds (res) &&Columnas

7- PQerrorMessage: Devuelve el error de una conexin o de un resultado. Sintaxis: Declare PQerrorMessage in libpq.dll Integer Var_Conexin

Ejemplo: re=PQexec (con,Insert into libro value (15,))

If PQresultStatus (re)!=1 && si no Inserta

MessageBox (PQerrorMessage (con))

Endif

8- PQgetvalue: Obtiene los valores de un resultado, los valores son devueltos en una matriz al estilo del lenguaje C/C++ dnde la primer posicin es la 0. Sintaxis: Declare PQgetvalue in libpq.dll ,;

Integer Resultado, Integer Fila, Integer Columna.

Ejemplo: PQgetvalue (resultado, 0,3)) && trae de la 1er fila la columna 3

9- PQresultErrorMessage: Devuelve el error de un Resultado. Sintaxis: Declare PQresultErrorMessage in Libpq.dll Integer Resultado

10- PQfinish: Termina una conexin con PostgreSQL. Sintaxis: Declare PQfinish in libpq.dll Integer conec

Como Segundo paso vamos a crear dos mtodos ms en el formulario uno llamado Cursor_cli que es donde tendremos el cursor para la tabla clientes y otro llamado Cursor_zo que es donde tendremos otro cursor para la tabla de Zonas.

Cursor_cli &&Cursor de Clientes

Cursor_zo &&Cursor de Zonas

Mtodo INIT del Formulario

Luego de habernos conectado a la base de datos midb comenzamos a programar los botones:

Btn Primero: Muestra el Primer registro del cursor generado en la funcin Cursor_cli siempre y cuando haya datos.

Btn Anterior: Muestra el Registro anterior si es que el puntero del registro REG no se encuentra en el primer registro.

Btn Siguiente: Muestra el registro siguiente si es que no se encuentra en el ltimo registro.

Btn Ultimo: Muestra el ltimo registro cargado.

Btn Nuevo: Habilita la carga de los datos.

Btn Borrar: Elimina un Cliente.

Btn Editar: Habilita los textos del Formulario para que se editen los datos que el usuario considere necesario.

Btn Aceptar: Realiza los cambios necesarios en la tabla, es decir un Insert o un Update.

*1 Verifico que el usuario no se olvide de cargar todos los datos

DO WHILE .T. && Bucle Infinito

IF EMPTY (THISFORM.CODIGO.Value)

THISFORM.CODIGO.SetFocus

EXIT

ENDIF

IF EMPTY (THISFORM.NOMBRE.Value)

THISFORM.NOMBRE.SetFocus

EXIT

ENDIF

IF EMPTY (THISFORM.APE.Value)

THISFORM.APE.SetFocus

EXIT

ENDIF

IF EMPTY (THISFORM.ZONA.Value)

THISFORM.ZONA.SetFocus

EXIT

ENDIF

*2 Armo las CADENAS INSERT - UPDATE

LOCAL COD AS STRING, NO AS String, APE AS String, ZON AS String, CADE AS String ; CADE1 AS String , v as Integer

STORE ALLTRIM (STR (THISFORM.CODIGO.Value)) TO COD

STORE + +ALLTRIM (THISFORM.NOMBRE.Value) + TO NO

STORE + +ALLTRIM (THISFORM.APE.Value) + TO APE

&& Traigo el cdigo de la Zona elegida en el Combo.

RE=PQexec (CON,"SELECT CODIGO FROM ZONAS WHERE NOMBRE= ' " ;

+THISFORM.ZONA.Value+" ' ")

ZON=PQgetvalue (RE, 0, 0)

CADE="INSERT INTO CLIENTE VALUES ("+COD+","+NO+","+APE+","+ZON+")"

CADE1="UPDATE CLIENTE SET ID= "+COD+" ,"+"NOMB= "+NO;

+" , APE= "+APE+" ,CODZO= "+ZON+ " WHERE ID= "+COD

IF SW="A"

PQexec (CON, CADE) &&Insert

ELSE

PQexec (CON, CADE1) &&Update

ENDIF

THISFORM.ATRAS.Click && llama al botn cancelar

EXIT

ENDDO

Btn Cancelar

Conclusin: El uso de API de cualquier base de datos hace la rapidez de cualquier sistema, ya que es el tipo de conectividad ms rpido que existe en la actualidad. En lo personal utilizar PostgreSQL ya que considero a la base como una de las mejores y un 100% mejor que la de Fox, adems utilizar API porque es la conectividad ms rpida que cualquier otro tipo como ODBC.

Para opiniones y consultas: [email protected]