EL API de PostgreSQL Desde Fox
-
Upload
genaro-martinez -
Category
Documents
-
view
218 -
download
0
description
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]