Ayuda - Help

Data Access Data Access
Table of contents
1. Intoducción
2. Arquitectura
3. Comparación
4. Propiedades
    4.1 cConnType
    4.2 cCursorLocation
    4.3 cDriver
    4.4 lFetchRecords
    4.5 lUseCursorSchema
    4.6 lShowError
    4.7 lWorkConnected
    4.8 lWorkAsync
    4.9 nRecordCount_Progress
    4.10 oScripts
        4.10.1 Date
        4.10.2 LastId
        4.10.3 TablePk
        4.10.4 Tables
5. Métodos
    5.1 BeginTrans
    5.2 CloseTable
    5.3 CommitTrans
    5.4 Connect
    5.5 Disconnect
    5.6 GetCodUnico
    5.7 GetDatabase
    5.8 GetDate
    5.9 GetPort
    5.10 GetServer
    5.11 GetVersion
    5.12 IsConnected
    5.13 IsTransActive
    5.14 LoadProps
    5.15 LoadTables
    5.16 OnAppError
    5.17 OnError
    5.18 OpenTable
    5.19 RevertTable
    5.20 RollbackTrans
    5.21 RS_MoveComplete
    5.22 RS_EndOfRecordset
    5.23 SaveProps
    5.24 SetParamValue
    5.25 SqlAddParam
    5.26 SqlExecProc
    5.27 SqlExecute
    5.28 SqlGetRows
    5.29 SqlGetRecordSet
    5.30 SqlParams
    5.31 SqlPrepare
    5.32 SqlUpdate
    5.33 SqlViewExecute
    5.34 SqlViewPrepare
    5.35 UnLock
    5.36 UpdateTable
    5.37 ValidBeforeFetch
6. Ejemplos
    6.1 Abrir/Cerrar Tablas
    6.2 Establecer Conexión
    6.3 Transacciones
    6.4 Vistas de Tablas
7. Acerca De
    7.1 Contacto
    7.2 Copyright
    7.3 Contrato de Licencia
    7.4 Descargas
    7.5 Versionado

1. Intoducción

Desarrolla tus aplicaciones en VFP mediante una arquitectura Cliente-Servidor


Data Access es una librería integramente desarollada bajo Visual FoxPro 9.0 para poder trabajar de forma nativa con los siguientes motores de datos:
 
 
 
 
 
 
SQL Server 2005/2008
SQL Server 2000

PostgreSql

MySQL SERVER
Visual FoxPro
Firebird
MS Access
6
1
2
3
4
5
7

Solo necesitas instalar el DRIVER de ODBC o ADO del motor de base de datos (SQL SERVER / MYSQL SERVER / POSTGRESQL / Firebird), ya que DataAccess utiliza este driver para realizar las conexiones hacia los servidores de datos.
Esta librería es totalmente transparente al uso de instrucciones nativas de VFP, es decir, que permite seguir usando los comandos, REPLACE, APPEND BLANK, DELETE, etc., como así también haciendo que la propiedad ControlSource de un control esté vinculada a un campo. Así mismo permite trabajar con sesiones de datos privadas tal como lo provee VFP.
Un aspeto importante de este componente es que soporta transacciones híbridas, es decir, que dentro de una misma transcación pueden incluirse diferentes sesiones de datos VFP y actualizaciones de datos al servidor mediante instrucciones SQL sin hacer uso de un cursor, todo lo cual, estará conenido dentro de una transcacción y en caso de ocurrir algún error, podrá deshacerse por completo los cambios realizados.
[TOP]

2. Arquitectura

Arquitectura
El componente o capa de Acceso a Datos es el encargado de establecer una comunicación con el motor de base de datos el cuál administra toda la información situada en el Repositorio.
                                                               


Consideramos que con la Arquitectura diseñada se satisfacen los siguientes Atributos de Calidad:
ü      Independencia del Gestor / Motor de Bases de Datos utilizado para almacenar la información.
ü      Facilidad para realizar el Mantenimiento (Preventivo y Correctivo) del Sistema.
ü      Facilidad para actualizar nuevas versiones del sistema entre todos los usuarios.
ü      Promueve la Reusabilidad de los componentes existentes en el desarrollo de nuevas aplicaciones.
ü      Facilidad de ser desarrollado en equipos distantes.


Diagrama de clases de la Capa de Acceso a Datos (Data Access)
 
[TOP]

3. Comparación

Tabla comparativa de las características que soportan los diferentes servidores de base de datos

Funcionalidad/Caracteristica

MySQL
Interbase
SQL Server
SQLite
Firebird
PostgreSQL
Oracle
OO/R (DBMS)
R
R
R
R
OO
OO
Esquemas
NO
NO
2005
NO
SI
SI
Funciones
SI
SI
SI
SI
SI
Procedimientos almacenados
SI
SI
SI
SI
SI
Vistas
SI (Versión Beta)
SI
SI
SI
SI
Transacciones
Tablas BDB e InnoDB
SI
SI
SI
SI
Claves Foráneas
Tablas InnoDB
SI
SI
SI
SI
Triggers
SI
SI
SI
SI
SI
Campos Autoincrementales
SI
NO
SI
SI (secuencia autom)
NN
Sequencias
NO
SI
NO
SI
SI
Plataforma Windows
SI
SI
SI
SI
SI
SI
SI
Plataforma Linux
SI
SI
NO
SI
SI
SI
SI
Conexiones SSL (TCP/IP)
SI
SI
Supera prueba ACID
NO
SI
SI
SI
Ciclo de Desarrollo
Constante
Largo
Licencias Freeware/Licencia
L
L
L
F
F
F
L

4. Propiedades

Propiedades En esta sección se detallan las propiedades públicas disponibles en instancias de la clase Data Access.

4.1 cConnType

cConnType Esta propiedad define el driver de conexión sobre el cual se realiza la comunciación sobre el motor de base de datos.
  • cConnType = ODBC
Conexión de sobre la base de datos controlado por la biblioteca de ODBC correspondiente.
  • cConnType = ADO (Default)


Conexión de sobre la base de datos controlado por la biblioteca de ADO correspondiente.


Vea También:

[TOP]

4.2 cCursorLocation

cCursorLocation Esta propiedad define si el cursor será controlado por el servidor o por la biblioteca de cursores de ADO del cliente, que se encarga de realizar las actualizaciones en el servidor mediante sentencias SQL de forma transparente para el usuario.
Un cursor en el lado servidor equivale a la arquitectura más tradicional (es también menos escalable), mientras que los cursores del lado cliente se acercan más al modelo "desconectado" de Internet.
  • cCursorLocation = C
Cursor controlado por la biblioteca de ADO del cliente.
  • cCursorLocation = S (Default)


Cursor controlado por el servidor.


Vea También:

[TOP]

4.3 cDriver

cDriver Esta propiedad define el driver de conexión sobre el cual se realiza la comunciación sobre el motor de base de datos, dependiendo del tipo de conexión, dado por la propiedad "cConnType".

Vea También:

4.4 lFetchRecords

lFetchRecords Indica si el motor de acceso a datos (Data Access) recupera los datos del motor de base de datos.
  • lFetchRecords = .T.  (Default)
El motor de acceso a datos recupera los datos hacia el cliente desde el motor de base de datos.
  • lFetchRecords = .F.
El motor de acceso a datos no recuperará los datos.

Vea También:

4.5 lUseCursorSchema

lUseCursorSchema Indica si desea que la capa de acceso a datos determine los tipos de datos de cada campo.
  • lUseCursorSchema = .T.
Data Access determinará el tipo de dato que corresponde a VFP para cada uno de los campos recuperados de la base de datos. Esto resulta ultil trabajando con algunos motores de base de datos donde el resultado de la consulta tiene algunos campos que no especifican el tipo de dato.
  • lUseCursorSchema = .F. (Default)
Visual FoxPro mapea nativamente los tipos de datos correspondientes a los cursores de VFP de acuerdo a los campos recuperados de la base de datos.



Vea También:

[TOP]

4.6 lShowError

lShowError Indica si muestra los mensajes de error al usuario.
  • lShowError = .T. (Default)
Cuando ocurre un error, se muestran los mensajes al usuario en pantalla.
  • lShowError = .F.
No se muestran los mensajes al usuario cuando ocurre un error.



Vea También:

[TOP]

4.7 lWorkConnected

lWorkConnected Indica si el motor de acceso a datos (Data Access) trabaja conectado al motor de base de datos.
  • lWorkConnected = .T.
El motor de acceso a datos permanece conectado al motor de base de datos durante el ciclo de vida de la instancia. Es decir que para todas las comunicaciones con el motor de base de datos se usa una misma conexión.
  • lWorkConnected = .F. (Recomendado)
El motor de acceso a datos permanece desconectado del motor de base de datos. En este caso cuando se requiere, se establece una conexión con el motor de base de datos, se usa, y luego se desconecta.

Vea También:

4.8 lWorkAsync

lWorkAsync Indica si el motor de acceso a datos (Data Access) trabaja de forma asyncrona sobre el motor de base de datos.
  • lWorkAsync = .T.
El motor de acceso a datos no espera el resultado de la respuesta del motor de base de datos para continuar con la ejecución de la aplicación.
  • lWorkAsync = .F. (Recomendado)
El motor de acceso a datos espera el resultado de la respuesta del motor de base de datos para continuar con la ejecución de la aplicación.

Vea También:

4.9 nRecordCount_Progress

nRecordCount_Progress Cantidad de registros minimo a partir del cual se comienza a mostrar el porcentaje de recuperación de la información. 0: No muestra %


Vea También:

4.10 oScripts

oScripts Instancia de clase que contiene métodos útiles que permiten extraer diferente tipo de información del motor de base de datos.
A continuación se enumeran los métodos disponibles por la clase Scripts:
[TOP]

4.10.1 Date

Date Retorna la consulta para extraer fecha y hora actual del servidor de base de datos.
 Date()

Parámetros:
Ninguno
Valor Retornado:
Carácter: Script que obtiene la fecha y hora del motor de base de datos.

Vea También:

4.10.2 LastId

LastId Obtener el script para obtener último número generado en una inserción de registros que contiene un campo autoincremental.
 LastId()

Parámetros:
Ninguno
Valor Retornado:
Carácter: Script

Vea También:

4.10.3 TablePk

TablePk Obtener el o los campos que componen la clave primaria (Primary Key) de la tabla pasada como parámetro.
 TablePk(cTable)

Parámetros:
cTable: Nombre de la tabla que se desea obtener los campos que componen la clave primaria.
Valor Retornado:
Carácter: Lista de campos separados por "," que componen la clave primaria.

Vea También:

4.10.4 Tables

Tables Script para obtener la lista de tablas e información adicional de la base de datos a la cual se encuentra conectado.
 Tables()

Parámetros:
Ninguno
Valor Retornado:
Carácter: Script para obtener la lista de tablas de la base de datos.

Vea También:

5. Métodos

Métodos A continuación se enumeran los métodos públicos disponibles por la clase Data Access:

Aclaraciones:
  • Los parámetros opcionales se indican entre corchetes.
[TOP]

5.1 BeginTrans

BeginTrans Inicia una transacción en el motor de base de datos. Cabe señalar que esta libería soporta transacciones anidadas, desligando al desarrollador de preocuparse si exite alguna transacción abierta al escribir módulos de acualización de código.
BeginTrans()

Parámetros:
Ninguno
Valor Retornado:
Lógico       .T. Si fue realizada con éxito la operación.
                .F. Ocurrió algún error al realizar la operación.



Vea También:

5.2 CloseTable

CloseTable Instrucción para cerrar una tabla o vista actualizable que ya no va a ser usada. Este método puede ser reemplazada por la instrucción USE IN <alias> que provee VFP.
CloseTable(cAlias,nDataSessionID)

Parámetros:
cAlias: Nombre del cursor que se desea cerrar.
nDataSessionId: Número de la sesion de datos donde se encuentra el cursor a cerrar.
Valor Retornado:
Lógico       .T. Si fue realizada con éxito la operación.
                .F. Ocurrió algún error al realizar la operación.


Vea También:

[TOP]

5.3 CommitTrans

CommitTrans Actualiza todas las transacciones abiertas durante la conexión actual hacia el servidor de base de datos.
CommitTrans()

Parámetros:
Ninguno
Valor Retornado:
Lógico       .T. Si fue realizada con éxito la operación.
                .F. Ocurrió algún error al realizar la operación.


Vea También:

[TOP]

5.4 Connect

Connect Establece los parámetros para realizar la conexión con el servidor de base de datos.
Connect(cServer, nPort, cDataBase, cUser, cPwd, cParams)

Parámetros:
cServer: Dirección IP o Nombre del servidor del motor de base de datos.
[nPort]: Puerto en el que escucha el motor de base de datos.
cDataBase: Base de datos a la cual conectarse
cUser: Usuario del motor de base de datos
cPwd: Contraseña del usuario del motor de base de datos
[cParams]: Parametros a agregar al string de conexion
Valor Retornado:
Lógico       .T. Si fue realizada con éxito la operación.
                .F. Ocurrió algún error al realizar la operación.
Observaciones:
Estos parámetros varían dependiendo del motor de base de datos sobre el cual se está realizando la conexión.
SqlServer: Connect(tcServer, [tnPort], tcDataBase, tcUser, tcPwd[tcParams])
PostgreSql: Connect(tcServer, [tnPort], tcDataBase, tcUser, tcPwd[tcParams])
MySql: Connect(tcServer, [tnPort], tcDataBase, tcUser, tcPwd[tcParams])

Firebird: Connect(cDataBase, cUser, cPwd, [tcParams])

Visual FoxPro: Connect(cDataBase, [tcParams])



Vea También:

[TOP]

5.5 Disconnect

Disconnect Disponible cuando se trabaja con conexión permanente al servidor de base de datos.
Disconnect()

Parámetros:
Ninguno
Valor Retornado:
Lógico       .T. Si fue realizada con éxito la operación.
                .F. Ocurrió algún error al realizar la operación.


Vea También:

[TOP]

5.6 GetCodUnico

GetCodUnico Obtener el o los campos que componen la clave primaria (Primary Key) de la tabla pasada como parámetro.
GetCodUnico(cTable)

Parámetros:

cTable: Nombre de la tabla que se desea obtener los campos que componen la clave primaria.
Valor Retornado:
Carácter: Lista de campos separados por "," que componen la clave primaria.


Vea También:

[TOP]

5.7 GetDatabase

GetDatabase Retorna el nombre de la base de datos a la cual se establecen las conexiones.
GetDatabase()

Parámetros:
Ninguno
Valor Retornado:
Carácter


Vea También:

[TOP]

5.8 GetDate

GetDate Retorna la fecha o fecha y hora actual del servirdor de la base de datos a la cual se establecen las conexiones.
GetDate(cType)

Parámetros:
[cType]: Tipo de datos que desea obtener como resultado de la función. Si no se pasa ningún parámetro se retorna la fecha actual.
D: Fecha actual del servidor.
DT: Fecha y Hora actual del servidor.
T: Hora actual del servidor.
Valor Retornado:
Fecha, Fecha y Hora u Hora dependiendo del parámetro recibido.


Vea También:

[TOP]

5.9 GetPort

GetPort Retorna el número de puerto donde se establecen las conexiones al servidor de base de datos.
GetPort()

Parámetros:
Ninguno
Valor Retornado:
Numércio


Vea También:

5.10 GetServer

GetServer Retorna el nombre o dirección IP del servidor de base de datos donde se establecen las conexiones.
GetServer()

Parámetros:
Ninguno
Valor Retornado:
Carácter


Vea También:

5.11 GetVersion

GetVersion Retorna la versión de la librería Data Access.
GetVersion()

Parámetros:
Ninguno
Valor Retornado:
Carácter


Vea También:

5.12 IsConnected

IsConnected Retorna True si actualmente se encuentra conectado al servidor de base de datos.
IsConnected()

Parámetros:
Ninguno
Valor Retornado:
Lógico       .T. Si fue realizada con éxito la operación.
                .F. Ocurrió algún error al realizar la operación.


Vea También:

[TOP]

5.13 IsTransActive

IsTransActive Retorna True si hay actualmente hay alguna transacción abierta al servidor de base de datos.
IsTransActive()

Parámetros:
Ninguno
Valor Retornado:
Lógico       .T. Si fue realizada con éxito la operación.
                .F. Ocurrió algún error al realizar la operación.


Vea También:

[TOP]

5.14 LoadProps

LoadProps Recupera de un archivo los parámetros de conexión al servidor de base de datos. Esto es muy util si no se desea incluir los parámetros de la conexión dentro del código fuente. Solo la primera vez que inicie el sistema deberá solicitar los parámetros de la conexión, luego usando los métodos SaveProps() y LoadProps(), guarda y recupera respetivamente de forma transparente estos parámetros.
LoadProps()

Parámetros:
Ninguno
Valor Retornado:
Lógico       .T. Si fue realizada con éxito la operación.
                .F. Ocurrió algún error al realizar la operación.


Vea También:

[TOP]

5.15 LoadTables

LoadTables Recupera información de las tablas de la base de datos para realizar las comunicaciones más rápidamente.
LoadTables()

Parámetros:
Ninguno
Valor Retornado:
Lógico       .T. Si fue realizada con éxito la operación.
                .F. Ocurrió algún error al realizar la operación.


Vea También:

5.16 OnAppError

OnAppError Este método debe ser invocado en el manejador de errores de la aplicación para deshacer todas las transacciones activas.
onAppError()

Parámetros:


Vea También:

5.17 OnError

onError Este método es invocado cuando ocurre un error al ejecutar una consulta o actualización sobre el servidor de base de datos o errores provenientes de parámetros mal pasados a llamadas a metodos de la librería.
onError(oError)

Parámetros:
oError: Objeto con el detalle del error ocurrido.


Vea También:

5.18 OpenTable

OpenTable Abre la tabla pasada como parámetro en un cursor quedando disponible para trabajar de forma nativa con los comandos de VFP.
OpenTable(cTabla, nBuffer, cAlias, nDataSession)

Parámetros:
cTabla: Tabla del sistema a abrir
[nBuffer]: Tipo de buffer a usar al momento de abrir la tabla
[cAlias]: Alias a asignar a la tabla a abrir, caso contrario, se usa el mismo nombre de la tabla.
[nDataSession]: Session de datos a abrir la tabla, caso contrario, se abre en la session de datos Global.
Valor Retornado:
Lógico       .T. Si fue realizada con éxito la operación.
                .F. Ocurrió algún error al realizar la operación.


Vea También:

[TOP]

5.19 RevertTable

RevertTable Deshace los cambios realizados sobre el cursor pasado como parámetro.
RevertTable(cAlias, nDataSession)

Parámetros:
[cAlias]: Alias del cursor a deshacer los cambios, caso contrario, se usa el cursor seleccionado.
[nDataSession]: Session de datos donde se encuentra el cursor, caso contrario, se toma la session de datos Global.
Valor Retornado:
Lógico       .T. Si fue realizada con éxito la operación.
                .F. Ocurrió algún error al realizar la operación.


Vea También:

5.20 RollbackTrans

RollbackTrans Deshace todas las transacciones abiertas durante la conexión actual hacia el servidor de base de datos. Es importante señalar que si existieran transacciones anidadas y dentro de alguna de ellas ocurre un error y se hace un RollbackTrans() esto ocasionará que se deshagan todas las transacciónes abiertas, sin importar el nivel de anidamiento, esto será aplicado consecuentemente a las sesiones de datos involucradas.
RollbackTrans()

Parámetros:
Ninguno
Valor Retornado:
Lógico       .T. Si fue realizada con éxito la operación.
                .F. Ocurrió algún error al realizar la operación.


Vea También:

5.21 RS_MoveComplete

RS_MoveComplete Ocurre al realizar la recuperación de cada bloque de registros desde el motor de base de datos .
rs_MoveComplete(adReason, pError, adStatus, pRecordset)

Parámetros:
[pRecordSet]: Instancia de la clase "ADODB.RecordSet" que contiene los datos a recuperar.
Valor Retornado:
Lógico    .T. Si fue realizada con éxito la operación.
                .F. Ocurrió algún error al realizar la operación.
Ejemplo
      WAIT WINDOW " " + STR(pRecordset.AbsolutePage/pRecordset.PageCount * 100,3,0) + "%" NOWAIT



Vea También:

[TOP]

5.22 RS_EndOfRecordset

RS_EndOfRecordset Ocurre al finalizar la recuperación total de los registros desde el motor de base de datos .
rs_EndOfRecordset(fMoreData, adStatus, pRecordset)

Parámetros:
[pRecordSet] : Instancia de la clase "ADODB.RecordSet" que contiene los datos a recuperar.
Valor Retornado:
Lógico    .T. Si fue realizada con éxito la operación.
                .F. Ocurrió algún error al realizar la operación.


Vea También:

[TOP]

5.23 SaveProps

SaveProps Guarda en un archivo los parámetros de la conexión actual. Esto es muy util si no se desea incluir los parámetros de la conexión dentro del código fuente. Solo la primera vez que inicie el sistema deberá solicitar los parámetros de la conexión, luego usando los métodos SaveProps() y LoadProps(), guarda y recupera respetivamente de forma transparente estos parámetros.
SaveProps()

Parámetros:
Ninguno
Valor Retornado:
Lógico       .T. Si fue realizada con éxito la operación.
                .F. Ocurrió algún error al realizar la operación.


Vea También:

[TOP]

5.24 SetParamValue

SetParamValue Establece el valor pasado como parámetro.
SetParamValue(nHwnd, cName, uValue)

Parámetros:
nHwnd: Manejador de la Consulta SQL a agregarle el parametro
cName: Nombre del parametro
uValue: Valor a asignar al parametro
Valor Retornado:
Lógico       .T. Si fue realizada con éxito la operación.
                .F. Ocurrió algún error al realizar la operación.


Vea También:

5.25 SqlAddParam

SqlAddParam Agrega el parámetro especificado a la consulta a enviar al servidor.
SqlAddParam(nHwnd, cName, cType, uValue)

Parámetros:
nHwnd: Manejador de la Consulta SQL a agregarle el parametro
cName: Nombre del parametro
cType: Tipo de datos del parametro
[uValue]: Si se desea asignar el valor al parametro
Valor Retornado:
Lógico       .T. Si fue realizada con éxito la operación.
                .F. Ocurrió algún error al realizar la operación.


Vea También:

5.26 SqlExecProc

SqlExecProc Ejecuta el procedimiento almacenado en el motor de base de datos pasado como parametro. Los datos recuperados en el cursor no son actualizables.
SqlExecProc(cAlias, nDataSession, cProcedure, uParams ...)

Parámetros:
cAlias: Nombre del cursor donde guardar los datos retornados.
[nDataSession]: Session de datos donde crear el cursor, caso contrario,se crea en la session de datos Global.
cProcedure: Nombre del procedimiento almacenado a ejecutar en el servidor.
[uParams ...]: Parametros que deben ser pasados al procedimiento almacenado en el orden correspondiente.
Valor Retornado:
Lógico       .T. Si fue realizada con éxito la operación.
                .F. Ocurrió algún error al realizar la operación.


Vea También:

5.27 SqlExecute

SqlExecute Ejecuta la consulta del manejador pasado como parámetro, que previamente fue preparado usando la función
SqlPrepare().
SqlExecute(nHwnd, cAlias, lEndTrans)

Parámetros:
nHwnd: Manejador de la Consulta SQL a ejecutar en el servidor.
[cAlias]: Nombre del cursor donde guardar los datos retornados.
[lEndTrans]: Indica que es la ultima operacion y se puede destruir el objeto asociado al preparar la consulta. Valor por defecto: .T.
Valor Retornado:
Lógico       .T. Si fue realizada con éxito la operación.
                .F. Ocurrió algún error al realizar la operación.


Vea También:

5.28 SqlGetRows

SqlGetRows Ejecuta la sentencia SQL en el motor de base de datos pasada como parametro. Los datos recuperados en el cursor no son actualizables.
SqlGetRows(cSQL, cAlias, nDataSession, nMaxRecords, nCommTimeout)

Parámetros:
cSQL: Consulta SQL a ejecutar en el servidor.
cAlias: Nombre del cursor donde guardar los datos retornados.
[nDataSession]: Session de datos donde crear el cursor, caso contrario,se crea en la session de datos Global.
[nMaxRecords]: Cantidad de registros a traer como maximo.
[nCommTimeout]: Tiempo de espera en segundos de respuesta al ejecutar la consulta.
Valor Retornado:
Lógico       .T. Si fue realizada con éxito la operación.
                .F. Ocurrió algún error al realizar la operación.


Vea También:

5.29 SqlGetRecordSet

SqlGetRecordSet Ejecuta la consulta pasada como parámetro en el motor de base de datos y luego retorna un objeto instancia de la clase "ADOdb.RecordSet".
SqlGetRecordSet(cSQL, nCommTimeout)

Parámetros:
cSQL: Consulta SQL a ejecutar en el servidor.
[nCommTimeout]: Tiempo de espera en segundos de respuesta al ejecutar la consulta.
Valor Retornado:
Objeto: Instancia de la clase "ADOdb.RecordSet", si ocurre algún error al realizar la operación se retorna NULL.


Vea También:

5.30 SqlParams

SqlParams Agrega a la instruccion del manejador la lista de parametros pasados como parametro.
SqlParams(nHwnd, cParams, cType)

Parámetros:
nHwnd: Manejador de la Consulta SQL a agregarle el parametro.
cParams: Lista de los Nombres de los parametros. "Param1, Param2, Param3, ...".
cType: Tipo de datos de los parametros, caso contrario,el primer caracter del nombre del parametro indica el tipo.
Valor Retornado:
Lógico       .T. Si fue realizada con éxito la operación.
                .F. Ocurrió algún error al realizar la operación.


Vea También:

5.31 SqlPrepare

SqlPrepare Prepara la consulta Sql en el servidor y retorna un manejador para luego agregarle parametros si se desea o ejecutarla.
SqlPrepare(cSQL, nDataSession)

Parámetros:
cSQL: Consulta SQL a ejecutar en el servidor.
[nDataSession]: Session de datos donde crear el cursor, caso contrario,se crea en la session de datos Global.
Valor Retornado:
Lógico       .T. Si fue realizada con éxito la operación.
                .F. Ocurrió algún error al realizar la operación.


Vea También:

5.32 SqlUpdate

SqlUpdate Sentencia SQL a enviar a ejecutar a la base de datos la cual no retorna datos sino que es una sentencia de actualizacion.
SqlUpdate(cSQL, nCommTimeout)

Parámetros:
cSQL: Consulta SQL a ejecutar en el servidor
[nCommTimeout]: Tiempo de espera en segundos de respuesta al ejecutar la consulta
Valor Retornado:
Lógico       .T. Si fue realizada con éxito la operación.
                .F. Ocurrió algún error al realizar la operación.


Vea También:

5.33 SqlViewExecute

SqlViewExecute Ejecuta la vista de una tabla previamente preparada del handle pasado como parametro.
SqlViewExecute(nHwnd)

Parámetros:
nHwnd: Manejador de la Consulta SQL a ejecutar en el servidor.
Valor Retornado:
Lógico       .T. Si fue realizada con éxito la operación.
                .F. Ocurrió algún error al realizar la operación.


Vea También:

5.34 SqlViewPrepare

SqlViewPrepare Crea una vista actualizable sobre los datos traidos de una tabla.
SqlViewPrepare(cTabla, cCampos, cFiltro, cAlias, nBuffer, nDataSession, nMaxRecords, lExecute)

Parámetros:
cTabla: Tabla del sistema a abrir.
[cCampos]: Lista de campos a traer de la tabla.
[cFiltro]: Filtro a aplicar a los datos antes de traer los datos.
cAlias: Alias a asignar a la vista.
[nBuffer]: Tipo de buffer a usar al momento de abrir la tabla.
[nDataSession]: Session de datos donde crear el cursor, caso contrario,se crea en la session de datos Global.
[nMaxRecords]: Cantidad de registros a traer como maximo.
[lExecute]: Ejecutar la vista luego de prepararla.
Valor Retornado:
Lógico       .T. Si fue realizada con éxito la operación.
                .F. Ocurrió algún error al realizar la operación.


Vea También:

5.35 UnLock

UnLock Introduce el nombre y la clave de registro que fue adquirida al comprar la licencia del producto. En la versión DEMO solo se recuperarán 10 registros de cada consulta realizada al motor de base de datos.
UnLock(cLicenseName,cLicenseKey)

Parámetros:
cLicenseName: Nombre de la entidad para la cual fue entregada la licencia de uso.
cLicenseKey: Clave que fué otorgada para la entidad como la licencia de uso.
Valor Retornado:
Lógico       .T. Si fue realizada con éxito la operación.
                .F. El nombre o clave de registro no son válidos.


Vea También:

5.36 UpdateTable

UpdateTable Actualiza los datos del cursor pasado como parametro caso contrario se toma el alias seleccionado.
UpdateTable(cAlias, nDataSession)

Parámetros:
[cAlias]: Alias del cursor a actualizar los cambios.
[nDataSession]: Session de datos donde se encuentra el cursor, caso contrario, se toma la session de datos Global
Valor Retornado:
Lógico       .T. Si fue realizada con éxito la operación.
                .F. Ocurrió algún error al realizar la operación.


Vea También:

5.37 ValidBeforeFetch

ValidBeforeFetch Validaciones antes de recuperar los datos desde el motor de base de datos.
ValidBeforeFetch(nRecordsCount, oRS)

Parámetros:
[nRecordsCount]: Cantidad de registros que se van a recuperar desde el motor de base de datos.
[oRS]: Instancia de la clase "ADODB.RecordSet" que contiene los datos a recuperar.
Valor Retornado:
Lógico       .T. Si fue realizada con éxito la operación.
                .F. Ocurrió algún error al realizar la operación.


Vea También:

[TOP]

6. Ejemplos

Ejemplos En esta sección se podrán encontrar ejemplos de formas de uso de la clase DataAccess para poder desarrollar tus aplicaciones bajo una arquitectura Cliente-Servidor.
Cabe señalar que en todos los ejemplos el objeto "oMotorDB" al cual se hace referencia, es una instancia de la clase DataAccess. Para ver un ejemplo de cómo crear una instancia y establer una conexión con el servidor de base de datos ir a:
Establecer Conexión.

6.1 Abrir/Cerrar Tablas

Abrir/Cerrar Tablas En esta sección se explicarán los pasos para poder abrir una tabla completa, tal como se hace en fox con el comando USE. Luego se podrá actualizar como se hace con el comando TABLEUPDATE y finalmente se cerrará al concluir su uso.
* Abro la tabla clientes completa con buffer de tablas.
IF NOT oMotorDB.OpenTable("clientes",5)
       RETURN .F.
ENDIF

* Realizo los cambios necesarios usando instrucciones nativas de FOX.
SELECT clientes
REPLACE nombre WITH "Juan Fernandez"

* Actualizo los datos modificados en la tabla clientes.
IF NOT oMotorDB.UpdateTable("clientes")

       RETURN .F.
ENDIF

* Finalmente cierro la tabla clientes.
oMotorDB.CloseTable("clientes" && Esta instrucción puede reemplazarse por USE IN clientes



Vea También:
[TOP]

6.2 Establecer Conexión

Establecer Conexión A continuación veremos un ejemplo de cómo crear una instancia de la clase "DataAccess" para luego poder establecer una conexión con el servidor de base de datos.
PUBLIC oMotorDB

LOCAL loMotorAdmin, lnProvider

* Defino que voy a usar "MsSql Server 2000" como servidor de base de datos.
lnProvider = 1

* Creo una instancia del administrador de "dataAccess"
loMotorAdmin = NEWOBJECT("motordb_admin","dataaccess.vcx","dataaccess.app")

* Creo una instancia de la clase "dataAccess"
oMotorDB = loMotorAdmin.CreateMotorDb(lnProvider)

oMotorDB.Connect("IP-Servidor",Puerto,"Base de Datos","Usuario","Contraseña","Parámetros opcionales")


Vea También:

[TOP]

6.3 Transacciones

Transacciones
A continuación se muestra como Iniciar, Finalizar y Deshacer una Transacción. Es importante señalar que si existieran transacciones anidadas y dentro de alguna de ellas ocurre un error y se hace un RollbackTrans() esto ocasionará que se deshagan todas las transacciónes abiertas, sin importar el nivel de anidamiento, esto será aplicado consecuentemente a las sesiones de datos involucradas.
* Defino el inicio de la transaccion.
oMotorDB.BeginTrans()

* Realizo instrucciones de actualización al servidor de datos.
IF NOT oMotorDB.SqlUpdate(“DELETE FROM clientes  WHERE codcli = 15
)
   * En caso de error cierro la transacción abierta.
       oMotorDB.RollbackTrans()
       RETURN .F.
ENDIF

IF NOT oMotorDB.SqlUpdate(“DELETE FROM iva_vent WHERE codcli = 15
)
   * En caso de error cierro la transacción abierta.
      
oMotorDB
.RollbackTrans()
       RETURN .F.
ENDIF

* Si no ocurrieron erroes de actualización de datos.
* finalizo la transacción haciendo un commitTrans().

oMotorDB.CommitTrans()

Vea También:

[TOP]

6.4 Vistas de Tablas

Vistas de Tablas A continuación se muestra como obtener una vista parcial de una tabla, que luego de realizar cambios sobre sus datos, estos pueden ser actualizados.

* Preparo para traer los campos apellido, nombre y cuit de la tabla clientes
* que lo voy a filtrar por el campo apellido y que el resultado lo almacene
* en el cursor curCli.
lnHwnd = oMotorDB.SqlViewPrepare("clientes","apellido, nombre, cuit","apellido LIKE ?" ,"curCli")

* Defino el valor del parámetro de filtro.
IF NOT o.SqlAddParam(lnHwnd,"Ape","C","FER%")
          RETURN .F.
            ENDIF

           * Finalmente ejecuto la vista usando el manejador obtenido al prepararla.
      IF NOT o.SqlViewExecute(lnHwnd)
          RETURN .F.
ENDIF

* Realizo los cambios necesarios usando instrucciones nativas de FOX.
SELECT curCli
REPLACE apellido WITH "Fernandez" ALL

* Actualizo los datos modificados en la tabla clientes.
IF NOT oMotorDB.UpdateTable("curCli")
       RETURN .F.
ENDIF

* Finalmente cierro el cursor.
USE IN curCli


Vea También:

[TOP]

7. Acerca De

Acerca De
En esta sección encontrará información acerca del soporte técnico, copyright del Data Access y links útiles de descargas.

7.1 Contacto

Contacto
Nombre del Producto Data Access. Condiciones Los servicios de soporte técnico de Data Access están sujetos a los términos y condiciones vigentes, y pueden cambiar sin aviso previo.
  Obtenga ayuda de un profesional de soporte a través del MSN Messenger o E-Mail.
Contactos MSN Messenger
 
E-Mail

Web

7.2 Copyright

Copyright
La información contenida en este documento está sujeta a modificaciones sin previo aviso. Es responsabilidad del usuario el cumplimiento de todas las leyes de derechos de autor aplicables. Sin limitar los derechos del copyright, ninguna parte de este documento puede ser reproducida, almacenada o introducida en ningún sistema de recuperación, transmitida de ninguna forma ni por ningún medio (ya sea electrónico, mecánico, mediante fotocopias o grabaciones) con ningún propósito, sin la previa autorización por escrito del autor.

7.3 Contrato de Licencia

Contrato de Licencia Horacio Federico Schenone, (en adelante el "CREADOR") es el titular del derecho de propiedad industrial e intelectual de la licencia de uso objeto de esta concesión, así como de los manuales de uso, y cualquier otro material que se entregue con la misma. 
El CREADOR otorga al usuario (en adelante el "LICENCIATARIO") esta licencia de uso de carácter exclusivo; la concede solamente para los componentes elaborados por el CREADOR y que son solo de carácter personal, siendo en todo caso para su utilización en una sóla estación de trabajo, y no pudiendo ser en manera alguna utilizada en forma distinta, ni tampoco transferida por el autorizado a terceros, si no es con el consentimiento expreso de EL CREADOR. El LICENCIATARIO es responsable de la instalación, uso y resultados que obtenga del mismo.
El SOFTWARE, incluyendo su documentación, presentación, estructura, organización, texto incorporado y la base de datos asociada, es propiedad de EL CREADOR y se encuentra protegido por la legislación de propiedad intelectual, y por las disposiciones de tratados internacionales, entre otras. Se prohibe intitularlo, copiarlo, modificarlo o combinar alguna de sus partes, salvo en lo específicamente permitido en esta y que licencia es facultad exclusiva de EL CREADOR.
1. Se garantizan estrictamente los siguientes derechos:
  • a. Se licencia este SOFTWARE únicamente para desarrollo de programas y/o aplicaciones por parte del LICENCIATARIO.
  • b. El LICENCIATARIO no está obligado a extender esta licencia o ningun otro tipo de autorización a los productos que EL LICENCIATARIO desarrolle con el SOFTWARE, pudiendo cobrar sumas de dinero o valores similares por el producto realizado en base a este SOFTWARE.
  • c. El LICENCIATARIO está autorizado a modificar el código fuente del SOFTWARE indicando claramente que cambio realizó, en que fecha, lugar y que motivó dicho cambio.

2. Salvo consentimiento previo por escrito del CREADOR, queda prohibido:
  • a. Incluir el SOFTWARE en cualquier medio de distribucion pago (Diskette, CD, DVD u otro formato mecanico o digital) que no sean los expresamente utilizados o autorizados por EL CREADOR.
  • b. Reproducir, distribuir, alterar y/o enmendar en todo o en parte la documentación del SOFTWARE.
  • c. Quitar cualquier identificación del SOFTWARE, notificaciones de derecho de autor, u otras notificaciones o restricciones de propiedad de EL SOFTWARE.
El incumplimiento de alguno de los términos aquí expresados, hará caducar automáticamente la licencia. Esta caducidad será complementaria y no impedirá ni restringirá las acciones penales, civiles o de cualquier naturaleza que el señor Horacio Federico Schenone sus representantes, empresas, socios, asociados, sucesores o derechohabientes pudiera intentar a fin de impedir o remediar el menoscabo de sus derechos.

3. El CREADOR no garantiza que la información contenida en el SOFTWARE satisfará las necesidades del LICENCIATARIO ni que la operación de la misma estará completamente libre de error.
El CREADOR no asumirá responsabilidades por ninguna garantía, escrita o verbal, en relación con el SOFTWARE, efectuada por algún tercero a excepcion de las expresamente asumidas por EL CREADOR.

4. El LICENCIATARIO acepta que lo que se describe a continuación será eventualmente la única y suficiente reparación por todo concepto que podrá reclamar del CREADOR:
  • a. Si el SOFTWARE no satisface sustancialmente sus funciones en concordancia con las especificaciones de contenido incluidas en su descripción. El LICENCIATARIO podrá, comunicar al CREADOR cualquier defecto relevante. El CREADOR por su parte sólo estará obligado a efectuar todas las gestiones a su alcance, a fin de solucionar el defecto propio de EL SOFTWARE.
  • El CREADOR no será responsable por ningún perjuicio, lucro cesante, pérdidas económicas, ni por ningún otro perjuicio incidental o indirecto, resultante del uso o de la inhabilidad para el uso del software. EL CREADOR tampoco será responsable por los hechos, actos u omisiones de terceros, dependientes o no, a los que eventualmente el LICENCIATARIO encomendare la instalación del software.

5. EL LICENCIATARIO deberá en todos los casos en que utilice EL SOFTWARE para desarrollo de programas, aplicaciones o similares usos, mencionar el NOMBRE de EL CREADOR y la version de EL SOFTWARE UTILIZADA en los mismos programas, aplicaciones o similares que realice. El incumplimiento de esta clausula dará lugar a las acciones mencionadas en la clausula 2 último párrafo.
6. Si alguna previsión contenida en esta Licencia resulta inaplicable, ello no afectará ni menoscabará la observancia de las restantes.
El LICENCIATARIO acepta haber leído esta licencia y, que la sola instalación del software, implica la aceptación por su parte de todos y cada uno de sus términos y condiciones. El LICENCIATARIO también asume que, salvo lo específicamente asegurado mediante alguna otra licencia acordada con el CREADOR, esta licencia es el único y total acuerdo existente entre las partes e invalida cualquier otra información relativa al objeto de este acuerdo que el LICENCIATARIO pudiera haber recibido por cualquier medio.

7.4 Descargas

Descargas
Aqui se encuentran algunos links de descargas útiles.
Conectores ODBC necesarios para el uso de la librería Data Access, dependiendo del servidor de base de datos.
 ODBC - Ms SqlServer  
 ODBC - MySql  
 ODBC - PostgreSQL  
 ODBC - Firebird  


  Servidor de Base de Datos soportados por Data Access.

 Server - Ms SqlServer  
 Server - MySql  
 Server - PostgreSQL  
 Server - Firebird  


  Documentos de Instalación o Archivos de ayuda de los motores de base de datos soportados por Data Access.

 Help - Ms SqlServer  
 Help - MySql  
 Help - PostgreSQL  
 Help - Firebird  

7.5 Versionado

Versionado Mejoras incluidas en cada una de las versiones publicadas.


Versión: 1.3
  • Soporte para trabajar con bases de datos de Microsoft Access .
  • Nuevo método validBeforeFetch() para enlazar al manejador de las aplicaciones y decidir si recuperar los datos desde el motor de base de datos.
  • Nuevo método rs_moveComplete() para enlazar al manejador de las aplicaciones y mostrar barra de progreso al recuperar los registros desde el motor de base de datos.
  • Nuevo método rs_endOfRecordset() para enlazar al manejador de las aplicaciones y cerrar barra de progreso al finalizar la recuperación de registros desde el motor de base de datos.
  • Nueva propiedad lFetchRecords para indicar mediante el metodo enlazado validBeforeFetch() si se recuperarán los datos desde el motor de base de datos.
  • Nueva propiedad nRecordCount_Progress para indicar la cantidad de registros minimo a partir del cual se comienza a mostrar el porcentaje de recuperación de la información.
Versión: 1.2
  • Nuevo método onAppError() para enlazar al manejador de errores de las aplicaciones y deshacer transacciones activas.
  • Nueva propiedad cDriver para especificar el driver a usar para establecer la conexión con el motor de base de datos.
  • Mensajes informativos más detallados para el desarrollador por problemas al abrir tabla o ejecutar consulta.