lunes, 19 de noviembre de 2007

tDataBase, usando tablas como objetos.


Puede que pienses que esto no tiene nada que ver con ADO, y en efecto directamente no tiene nada que ver con ADO. En una entrada anterior comentamos que para trabajar con ADO, era necesario conocer algo de SQL, lo que no compentamos es que tambien es necesario manejarse bien con la programación orientada a objetos (POO).


En FiveWin está incluida un clase que nos permite manjear las tablas DBF como objetos, eso nos permitiira por una parte probar y tomar soltura en el manejo de propiedades, metodos y ademas es una forma muy eficaz de trabajar.


Esta clase nos controla los bloqueos de registro, incorpora un buffer para no modificar directamente sobre el registro, controla si hay cambios en los datos editados, y muchas mas cosas, que nos llevaria bastante trabajo programar a mano.

Su uso es muy sencillo, y ahora veremos un pequeño ejemplo.


El primer paso, es crear el objeto (instanciar de la clase), abriremos una tabla, por ejemplo de proveedores

DBUseArea(.T.,'DBFCDX','PROVEEDOR','PROVEEDOR,.T.,.F.)

oDbf := TDataBase():New()

ya tenemos creado y funcional nuestro objeto oDbf, disponemos de todos los metodos necesarios para trabajar con una tabla (oDbf:Skip(), oDbf:GoTop(), oDbf:Save(), oDbf:Used(), ...), en la ayuda de fivewin encontrareis todos los metodos disponibles, y en la carpeta Source\clases, podeis consultar el código fuente y ver como funcina internamente.


Siguiendo con un proceso normal de altas y modificaciones de ficheros, el siguiente paso seria determinar si queremos añadir un registro, o editar el registro actual.

Si quermos hacer una alta, invocaremos el metodo Blank, que nos dejara el buffer de edición vacio y listo para ñadir un nuevo registro.

Por el contrario si queremos editar el registro actual, invocaremos el metodo Load, que cargara el contenido de los campos de la tabla, en el buffer de edición.


Acto seguido ya podemos visualizar, editar y modificar el contenido de los campos de nuestro objeto, y la forma de referirnos a los campos es nombre de nuestro objeto : nombre del campo.

@ 10,10 GET oDbf:Codigo

@ 12,10 GET oDbf:Nombre ....

cuando hayamos introducido todos nuestros datos, si queremos guardarlos actuaremos de la siguiente manera.

Comprobaremos si realmente se han modificado los datos, y para ello consultamos el valor de oDbf:Modified(), si nos devuelve verdadero, es que hay cambios.


Si el registro es una alta, en este momento crearemos el registro (hasta ahora hemos estado trabajando sobre un buffer temporal en memoria).

oDbf:Append()

y tanto si es una alta como una edición de un registro existente, grabaremos el contenido del buffer temporal a los campos de la tabla.

oDbf:Save()


Sencillo y potente, verdad?. Bueno pues ADO, funciona de una manera muy parecida, cambian los nombres de algunos metodos, pero en el fondo la filosofia de funcionamiento es la misma.


Aqui teneis algunos metodos con la misma funcionalidad tanto en tDatabase como en ADO


BielSys











Código fuente ejemplo mantenimiento ficha de proveedores usando tDatabase:
STATIC FUNCTION EdtPro(lAdd)

   LOCAL oDlg,oDbf,lSave:=.F.

   DEFAULT lAdd:=.F.

   Select Proveedores

   DATABASE oDbf

   DEFINE DIALOG oDlg RESOURCE "MANPROVE"



   IF lAdd

      oDbf:Blank()

   ELSE

      oDbf:Load()

   ENDIF

   oDlg:SetText('('+ProcName()+')'+IF(lAdd,' Añadir Proveedores',' Editar ficha proveedor'))



   REDEFINE GET oDbf:Codprov   ID 601 OF oDlg VALID {|oGet|Ajusta(oGet)} WHEN lAdd

   REDEFINE GET oDbf:Nombre    ID 602 OF oDlg

   REDEFINE GET oDbf:Nif       ID 603 OF oDlg

   REDEFINE GET oDbf:Dir1      ID 604 OF oDlg

   REDEFINE GET oDbf:Dir2      ID 605 OF oDlg

   REDEFINE GET oDbf:Cp        ID 606 OF oDlg

   REDEFINE GET oDbf:Provincia ID 607 OF oDlg

   REDEFINE GET oDbf:Tel1      ID 608 OF oDlg

   REDEFINE GET oDbf:Tel2      ID 609 OF oDlg

   REDEFINE GET oDbf:Movil     ID 610 OF oDlg

   REDEFINE GET oDbf:Fax       ID 611 OF oDlg

   REDEFINE GET oDbf:Percon    ID 612 OF oDlg



   REDEFINE BUTTON ID 1 OF oDlg ACTION (oDlg:End(), lSave := .T.) // OK

   REDEFINE BUTTON ID 2 OF oDlg ACTION (oDlg:End()) // Cancel



   ACTIVATE DIALOG oDlg CENTERED



   IF lSave .AND. oDbf:Modified()

      IF lAdd

         oDbf:Append()

      ENDIF

      oDbf:Save()

   ENDIF

RETURN NIL


_________________
Saludos desde Mallorca

Biel

Gabriel Maimó

miércoles, 7 de noviembre de 2007

ADO ConnectionString

Al usar ADO, el primer escollo con el que nos vamos a encontrar, es el ConnectionString. Es la
cadena que tenemos que pasarle como parametro al objeto connection, para que se conecte con nuestro servidor de base de datos. Si fallamos en este paso, es imposible que nada nos funcione, por eso es un parametro muy importante, y que debemos especificar correctamente. A tal efecto disponemos de una web en la cual podemos encontrar las cadenas de conexión de la mayoira de servidores http://www.connectionstrings.com/ Pero tambien diposnemos de otro medio más sencillo y practico con un pequeño programa desarrollado por nosotros mismos, y explotando automatizacion ole y el componente DataLinks. La gran ventaja es que podreis probar al momento si la conexión con el servidor se realiza correctamente.

Aqui teneis el codiggo fuente, como veis son cuatro linea.

#include "FiveWin.Ch"
FUNCTION main()
LOCAL oDataLink := TOleAuto():New("Datalinks"),;
oConn := oDataLink:PromptNew(),;
cConn:=''
cConn:=oConn:ConnectionString
?cConnRETURN
RETURN NIL
FUNCTION RddSys(); RETURN NIL

Al ejecutar nos aparece la siguiente pantalla
.Image Hosted by ImageShack.us

Como podeis ver tenemos cuatro pestañas, en la primera nos aparecen todos los
controladores OLE DB que tenemos instalados en nuestro sistema.


En la segunda, nos permite seleccionar un acceso a datos via ODBC,
previamente debe de haberse definido el origen de datos en panel de
control, herramientas administrativas.


Image Hosted by ImageShack.us


La pestaña dos varia si elejimos el acceso via OLE DB, presentara el siguiente
aspecto.

En esta pantalla debemos especificar, el origen de datos, ubicacion, usuario y contraseña, si procede.

Image Hosted by ImageShack.us


Ademas en esta pantalla, disponemos de un boton que nos permite probar la conexion. Si la prueba de conexion es correcta, nos devuelve una ventana con un mensaje de confirmación.

Image Hosted by ImageShack.us


Disponemos de dos pestañas adicionales, donde pueden definirse otros parametros, y en la última pestaña donde nos visualiza todos los parametros definidos para la conexón.

Si pulsamos aceptar, nos aparecera otra ventan visualizando el contenido de la variable cConn,
que es el string que debemos pasar al objeto connection. De esta manera podras definir un connectionString, con todos los parametros necesarios, para el origen de datos que quieras, sin preocuparte por la sintaxis.

Image Hosted by ImageShack.us


Bueno, como siempre espero que os sea de utilidad, y que sigais leyendo el blog de vez en cuando. Un saludo desde Mallorca.

viernes, 2 de noviembre de 2007

CONEXION A ORIGENES DE DATOS SQL

Al comentzar a escribir este blog, me han llegado sugerencias de que escriba sobre el tema ADO, SQL, etc, pues parece es algo que cada dia interesa más a la comunidad xBase.

En este primera entrada referente al tema SQL, comentare brevente tres de las opciones que disponemos los usuarios xBase(FiveWin) para conectarlos a bases de datos SQL.

  1. ODBC (Open Data Base Conectivity). Es el sistema más antiguo con el que contamos, y actualmente en el foro cuenta con algo de mala fama.
    Personalmente lo he utilizado, y he conseguido muy buenos resultados. Toda la funcionalidad esta descrita en dos clases de fiveWin, de las cuales disponeis del código fuente. Eso permite el control absoluto del funcionamiento, y ademas la adecuación en caso de necesidad. Una pega en cuanto a seguridad, es que trabaja con ficheros temporales DBF que los crea al vuelo, y carga con los datos obtenidos del servidor. Para conectarnos al servidor de bases de datos, debemos crear un origen de datos ODBC(DSN de sistema normalmente), puede ser creado por programa, aunque no es algo trivial. Algunos instaladores tambien permiten crear origenes de datos ODBC.

  2. ADO (ActiveX Data Objects), posiblemente este sea el metodo mas potente del que disponemos para atacar a motores de bases de datos, aunque tambien el que va a requerir más conocimientos. En la red podremos encontrar infinidad de documentacion, sobre los objetos ado, sus metodos, propiedades, etc. Para conectarlos al servidor, tenemos que definir una cadena de conexión dentro de nuestro programa, no es necesario definir nada externo a nuestro programa. Para conexion con ADO necesitamos que el motor de base de datos soporte OLE DB, aunque si no lo soporta, simpre podemos acceder mediante un origen de datos ODBC ya definido.

  3. AdoRdd,se trata de manejar conexiones via ADO, pero con comandos xBase. Es la última opción que ha aparecido, y es sin duda la mas sencilla de implentar y casi no requiere conocimiento alguno de ADO. De haber existido antes, seguramente es la que hubiera escojido para mis proyectos. Quizas no se llegue al control o rendimiento que se pueda
    alcanzar utilizando ADO directamente, pero el coste de implementación y aprencizaje, es mucisimo menor.

Con cualquiera de las tres opciones, es casi indispensaple unos conocimientos minimos del lenguaje de consulta de datos SQL, y del funcionamiento y diseño de las bases de datos relacionales. Cuanto mas conozcas SQL, mucho mejor.