You are on page 1of 27

In order to load data from Visual FoxPro to 64-bit SQL Server, we

can use Microsoft OLE DB Provider for Visual FoxPro or Visual FoxPro
ODBC Driver to load data from Visual FoxPro, and then upload into
SQL Server.
Below are the detail steps for your reference:
Before starting the steps, please make sure the Microsoft OLE DB
Provider for Visual FoxPro and Visual FoxPro ODBC Driver is installed.
Solution1: Use the Microsoft OLE DB Provider for Visual FoxPro to load
data from Visual FoxPro database
1.
2.
3.
4.
5.

Create a new SQL Server Integration Services(SSIS) package.


Add a Data Flow Task(DFT) to the package.
Select the DFT, and go to Data Flow designer page.
Add a OLE DB Source to the package.
Double-click the OLE DB Source, click "New" > "New" to
create a connection to Visual FoxPro.
6.
In the Connection Manager, please select "Microsoft OLE DB
Provider for Visual FoxPro"
7.
Type the file path of a Visual FoxPro database(e.g.
C:\Address.dbc).
8.
Test the connection by clicking button "Test Connection"
9.
Click "OK" > "OK" to apply.
10. Now, we can select a table from the Visual FoxPro database
in the OLE DB Source editor.
Solution2: Use the Visual FoxPro ODBC Driver to load data from Visual
FoxPro database
11. As you done, create a DSN pointing to VFP free table using
odbcad32 from SysWOW64 folder. I would suggest you using
System DSN instead of User DSN.
12. Create a new SQL Server Integration Services(SSIS) package.
13. Add a Data Flow Task(DFT) to the package.
14. Select the DFT, and go to Data Flow designer page.
15. Add an ADO NET Souce to the package. Please note, ADO
NET is started to support from SSIS 2008. In other words, in
SSIS 2005, there is no ADO NET source.

16. Double-click the OLE DB Source, click "New" > "New" to


create a connection to Visual FoxPro.
17. In the Connection Manager, please select "Odbc Data
Provider"
18. Select the DSN we created before, and then test the
connection, make sure it is successful.
19. Click "OK" > "OK" to apply.
20. Now, we can select a table from the Visual FoxPro database
in the ADO NET Source editor. If it is fail, please try using SQL
Command mode.
Additionally, we strongly recommend using the Visual FoxPro OLE DB
provider as a replacement. Also, in design-time, pleaes set the
package to run in 32-bit mode, otherwise the package will fail to run.
Right-click the project > "Properties" > "Debugging" > Set
"Run64Runtime" to be "False".
The two drivers can be downloaded from:
http://www.microsoft.com/downloads/en/details.aspx?
familyid=e1a87d8f-2d58-491f-a0fa-95a3289c5fd4&displaylang=en
http://msdn.microsoft.com/en-us/vfoxpro/bb190233.aspx
If you have any more questions, please feel free to ask.
Thanks,
Jin Chen

As que abr una sesin de comandos y ejecute:


CD \Windows\System32
REGSVR32 vfpoledb.dll

vfpodbc.dll

Cmo consumir datos de Visual Foxpro en sistemas .NET de 64 bits utilizando un servidor
vinculado
Introduccin
Nos hemos puesto un poco nostlgicos, as que ac volcamos nuestra experiencia reciente
en integrar datos de Visual Foxpro (32 bits) en un entorno de IIS de 64 bits, que no poda
reducirse a correr 32 bits por condiciones de borde de la instalacin.
Como es sabido, los sistemas operativos han ido migrando lentamente hacia los 64 bits. Entre
otras ventajas, se tiene mayor direccionamiento en memoria RAM, y un rendimiento ms
slido en los entornos de 64 bits, y lo ms importante, el foco en los esfuerzos de las grandes
compaas, entre otras ventajas. La migracin de 16 a 32 bits demor casi una dcada, pero
de 32 a 64 est ocurriendo muy rpidamente.
En esta coyuntura, la realidad es que todava existen muchos sistemas desarrollados en torno
a Visual Foxpro, que es una aplicacin de 32 bits. ste puede correr en sistemas operativos
Windows de 64 bits bajo la emulacin WoW64 (Windows on Windows 64), que es
esencialmente un conjunto de tres bibliotecas de enlace dinmico. Estas se encargan de
colocar una capa muy liviana de adaptacin en el sistema de 64 bits, a fin de traducir las
llamadas y las estructuras de los sistemas de 32 bits, sin que stos sufran modificacin
alguna. Sin embargo, por diseo, los manejadores de dispositivos se manejan de forma
distinta. De esta forma, si por ejemplo tenemos una placa de video de tal marca y modelo, y la
queremos usar en un sistema de 64 bits, deberemos indefectiblemente conseguir el driver de
64 bits. Como toda mquina virtual, es sumamente difcil comunicarse fuera de ella. En otras
palabras, los drivers de 32 bits se podrn ver slo dentro del mbito Wow64, es decir: en un
sistema operativo de 64 bits, los drivers de 32 sern visibles para los procesos emulados de
32 bits, pero no lo sern desde fuera de ese mbito.
Ahora, qu tiene que ver esto con Visual FoxPro? Bueno, fundamentalmente, las estrategias
de acceso a datos que corren en Windows son basadas en el modelo ODBC (Open Database
Connectivity). ODBC, en la implementacin para Windows, no es otra cosa que un manejador
de impresora modificado para bases de datos, es decir, funciona y se gestiona de manera muy
parecida a un device-driver de impresora, y por lo tanto, pueden coexistir drivers de 32 y 64 en
un sistema, pero slo sern visibles dentro de sus mbitos respectivos de ejecucin. El rol del
driver ODBC es anlogo al manejador de impresora: as como un controlador de una
determinada impresora entiende el lenguaje y los comandos de la misma (sean sos PCL,
Postcript, etc.), del mismo modo un manejador ODBC entiende las particularidades de una
determinada base de datos. Y con OLEDB pasa ms o menos lo mismo, recordemos que OLE
DB es un derivado de ODBC, que introduce el modelo de objetos COM a ODBC, y copia su
modelo de doble bfer, etc., con lo cual hay mucha similitud conceptual en cuanto al driver en
s (y no tanta similitud en cmo expone los datos hacia el cliente).
Escenarios posibles entre cliente y servidor

Suponiendo que tenemos un ejecutable de una aplicacin cliente que desea acceder a un
servidor de datos. Las combinaciones posibles seran estas, siempre hablando de un sistema
operativo de 64 bits:
Cliente

Servidor

Driver de 32 bits instalado

Driver de 64 b

32 bits

32 bits

Visible desde el cliente, conectable.

Invisible desde

para conectars
32 bits

64 bits

Visible desde el cliente, conectable.

Invisible desde

para conectars
64 bits

32 bits

Invisible desde el cliente, no se puede conectar. Visible desde e

64 bits

64 bits

Invisible desde el cliente, no se puede conectar

Visible desde e
conectar.

Luego, si de VFP y de SQL Server se tratase, podemos asumir como cliente a VFP, y como
servidor a SQL Server, y el cuadro de arriba sera vlido igualmente. Si nos preguntamos si un
cliente de 64 bits podra conectarse a un servidor que corre en 32 bits, la respuesta es: si, en
la medida que exista el driver del lado del cliente. Supongamos que existiera un VFP de 64
bits, y se corre una instancia de SQL Server de 32 bits. Como SQL Server es un servicio de
datos que funciona un un protocolo binario (esto es, basado en sockets con trfico bajo un
modelo propietario) llamado TDS (Tabular Data Stream), tendremos que este servicio es
independiente de la versin (32 o 64 bits) que lo produzca: el protocolo es inmutable entre
dichas plataformas. Para que lo veamos mejor, un servidor IIS de 32 bits producir el mismo
HTML que uno de 64 bits, ya que el protocolo de comunicacin HTTP y el formato del mensaje
HTML es conceptualmente siempre el mismo (un documento de texto), independientemente de
la plataforma que lo genere. Anlogamente, es posible entonces conectarse desde un cliente
de 32 a un servidor de 64, siempre y cuando exista el driver de 32 bits para dicho
servicio.
Por ejemplo, si queremos gestionar desde un cliente de 64 bits la creacin y el mantenimiento
de un driver ODBC, slo veremos los drivers de 64 bits. Hagamos la siguiente prueba:
iniciemos el Panel de Control, vayamos a Herramientas administrativas, Configurar orgenes
de datos (ODBC). Pidamos crear una nueva conexin de sistema (DSN de sistema), y
veremos slo los drivers de 64 bits que la PC tenga instalados en ese momento:

Fig. 1: drivers de 64 bits visibles desde un cliente de 64 bits (Panel de Control)

Ahora bien, sin cambiar de PC, tratemos de hacer lo mismo desde un cliente de 32 bits, por
ejemplo, desde el mismo Visual FoxPro, creando una base de datos .DBC y generando una
conexin desde all.

Fig. 2: drivers de 32 bits visibles de un cliente de 32 bits (VFP)

Como se aprecia en la figura 2, la cantidad es mayor, y entre ellos , vemos el driver para Visual
FoxPro instalado. Tanto en el cliente de 64 bits (Panel de control) como en el cliente de 32
(VFP) podremos gestionar, por ejemplo, la creacin de una conexin a SQL Server
(independientemente de si el servidor SQL corre en 32 o en 64), porque tenemos ambos
drivers de cliente instalados en la PC. Pero no podremos gestionar una conexin a VFP desde
un cliente de 64, porque no existe el driver.
El problema con ASP.NET, VS y Windows de 64 bits.
Ahora bien, desde Visual Studio 2010, qu sucede?. Supongamos este escenario:

Sistema operativo Windows de 64 bits > IIS de 64 bits, que contiene:


o

IDE de Visual Studio 2010 convencional, 32 bits, instalado con ajustes por
defecto sobre el Windows anterior.

Visual FoxPro, 32 bits

OLE-DB para Visual FoxPro, 32 bits

El objetivo es construir una pgina ASP.NET que acceda a los datos de VFP en ese escenario.
El problema es el siguiente:

Al programar la aplicacin ASP.NET en VS2010, se puede crear sin problemas una


conexin VFPOLEDB, ya que el cliente (justamente la IDE de Visual Studio) y el driver
OLE-DB son de 32 bits. Al depurar la aplicacin ASP.NET, se podrn consumir los
datos de VFP con mucha facilidad, por ejemplo, utilizando un control SQLDataSource
desde la misma pgina.

Pero al publicar el sitio en IIS, se transfieren los ensamblados a un entorno de


ejecucin de 64 bits. Las pginas se ejecutan bajo una mquina virtual .NET, que es
un proceso de 64 bits. Este CLR de .NET es incapaz de registrar el driver de 32 bits
OLE-DB para acceder a VFP, y las pginas fallan en IIS dando un error de dll no
registrada, la de OLE-DB justamente.

Entonces la pregunta es: cmo publicamos una pgina ASP.NET en un servidor IIS montado
en un Windows de 64 bits, que no puede tener compatibilidad de 32 bits por alguna razn, y
que la vez consuma datos de Visual FoxPro?
No existe una respuesta fcil. Las posibilidades que exploramos son las siguientes:
Idea central

Qu habra que hacer

Correr el sitio
ASP.NET en IIS
habilitado para
32 bits

Contras

Si bien se
Activar la compatibilidad de 32 bits en IIS de 64 bits, activa la
corriendo en una ventana de comandos la siguiente compatibilidad
instruccin:
de 32 bits en
IIS, al mismo
tiempo se

C:\>cscript %SYSTEMDRIVE
%\inetpub\adminscripts\adsutil.vbs SET
W3SVC/AppPools/Enable32bitAppOnWin64 true

inhabilitan las
de 64 bits.
Luego,
deberamos
tener todos los
sitios corriendo
en IIS en modo
de 32 bits,
aunque el SO
de 64 bits

(estamos
pagando por
algo que no
usamos).
Instalar dos IIS La segunda instalacin de IIS correra en modo de
en el servidor,

No es posible.

compatibilidad de 32 bits, slo afectando a las de 64 en esa No se puede

uno de 32 y otro instancia, y en la otra podremos correr el sitio en 64 bits.

instalar dos IIS

de 64

Las pginas que acceden a VFP , al estar publicadas en

en un mismo

otro servidor, debera correr en otro port HTTP o bien

servidor. Si es

resolver por nombre (porque tienen una misma IP pblica) a posible instalar
nivel del IIS principal.

un IIS +
Apache, o bien
dos instancias
de Apache, pero
necesitamos IIS
para correr
ASP.NET.

Implementar un Crear un objeto COM (servidor de automatizacin) con VFP, No es posible.


servidor de

que reciba las consultas SQL de ASP.NET, y devuelva

No se podr

automatizacin datasets ADO.NET utilizando el comando CursorToXML() enlazar el COM


COM hecho en

en el espacio de

VFP

64 de bits del
IIS en
produccin.

Implementar un Utilizar el mismo objeto de automatizacin COM del punto

No es posible,

servicio web

anterior, pero publicarlo como servicio web en el mismo IIS el COM de VFP

con VFP y

que sirve el sitio principal.

de 32 bits no se

publicarlo en el

podr enlazar al

mismo IIS que

ISAPI de 64

publica las

bits.

pginas
ASP.NET.
dem anterior,

Instalar en paralelo al IIS un servidor Apache de 32 bits, y

Tericamente

pero publicar el publicar el servicio web de VFP de 32 bits por all. Las

posible, pero

web service de pginas principales ASP.NET en IIS de 64 bits consultarn

complicado. Al

VFP en un

tener dos HTTP

al web service local para acceder a los datos VFP

servidor Apache

servers bajo

de 32 bits.

una misma IP,


uno de los
HTTP servers
debe trabajar en
otro port, o bien
transferir el
request HTTP
por nombre de
dominio en el
IIS, derivando al
Apache de 32
bits las
llamadas al
servicio web.

Intentar

Conseguir un driver OLE-DB de 64 bits para VFP provisto

Licencia de

conseguir un

por la empresa Sybase, que sirve para su ETL (extraccin,

Sybase.

driver de 64

transformacin y carga).

Dnde se lo

bits.

consigue sin
tener ningn
producto
Sybase?
funciona
standalone o
necesita un
software de
Sybase?

La solucin del Servidor vinculado (Linked Server)


Tras dos meses de mucho probar y cavilar, se lleg a la conclusin que la mejor solucin sera
no tocar la infraestructura de IIS 64 bits preexistente, y utilizar el servicio de servidor
encadenado que tiene SQL Server. El truco consiste en instalar una instancia vaca de SQL
Server Express de 32 bits y activar dentro de ella un servidor vinculado o encadenado (linked
server), que oficie de enlace entre los datos de VFP y los clientes de 64 bits.
El servidor vinculado o encadenado es esencialmente una pasarela, es decir, una capa de
transformacin de mensajes. A continuacin mostramos un diagrama de bloques conceptual,

donde desde un gran sitio ASP.NET en Windows Server de 64 bits, con SQL Server de 64 bits,
se accede a VFP del driver VFPOLEDB de 32 bits:

Figura 3: esquema de bloques de la solucin


Microsoft ha incluido, increblemente podramos decir, la capacidad de tener servidores
encadenados dentro de la instancia Express. El servidor encadenado puede ser cualquiera
que soporte un driver OLE-DB para dicha versin (32 o 64 bits). As, si debemos conectarnos
a VFP, deberemos usar VFPOLEDB, que es un driver de 32 bits, y por lo tanto, descargar e
instalar la versin de 32 bits de SQL Server Express, descargar e instalar el driver OLE-DB

para Visual FoxPro, y estaramos listos para lograr el acceso desde las pginas ASP.NET
corriendo desde un servidor de 64 bits.
Una vez que el servidor encadenado est definido, se puede acceder desde cualquier
cliente que tenga un driver de acceso a SQL, sea ste de 32 o de 64 bits. En la figura, el
servidor HTTP instalado es IIS7.x, de 64 bits, que aloja un CLR de 64. Dentro de esa mquina
virtual CLR, el proveedor administrado ADO.NET para SQL Server ser uno regular, nativo, no
existir ningn problema porque slo se necesitar la visibilidad del servicio de datos. El
proveedor administrado hace abstraccin de la plataforma del servidor, porque slo ve los
servicios sin importarle los procesos que lo generan. De este modo, desde .NET y con esta
solucin, se tendr acceso indistintamente a SQL Server regular, de produccin, que puede
ser de 64 bits (alternativa de la figura, donde se asume un SQL server prexistente de 64 bits
para el sistema principal), y al mismo tiempo, a SQL Server Express de 32 bits que aloja el
servidor encadenado, vaco sin tablas nativas.
Configurando el servidor encadenado para que tome el archivo .DBC de Visual FoxPro, se
tendr acceso a todas las tablas de la base de datos Visual Fox, como si estuviesen
residiendo de alguna manera en la instancia SQL Server Express.
Configuracin paso a paso
1. Descargar e instalar SQL Server Express de 32 bits en el servidor IIS, o bien en algn
lugar de la red que sea visible. Luego, hay dar acceso al proceso de SQL Server a la carpeta
que contiene las tablas y el contenedor de base de datos de VFP.
Yendo a la carpeta en cuestin, en el explorador de archivos, hacer clic con botn derecho
sobre la que contiene las tablas y el contenedor DBC, y seleccionar Propiedades, luego
seleccionar la ficha Seguridad. La cuenta que debemos habilitar para acceso no es ninguna
de las consabidas Network Service, ni Local System, ni System, sino la denominada
MSSQL$SQLEXPRESS, como se muestra en la figura de abajo. El no hacerlo impedir que
se pueda acceder a dicha base de datos.

2. Iniciar el administrador de SQL Server, y configurar un servidor encadenado. Para ello


abrir el administrador, y hacer clic con botn derecho sobre la instancia correspondiente.
Seleccionar el nodo Server Objects, y dentro de l, la opcin Linked Servers

Fig. 4
3. Verificar drivers. Expandir dicho nodo, y se ver el listado de drivers disponibles en el
mbito de 32 bits. Debe estar visible la opcin VFPOLEDB

fig. 5
4. Agregar un nuevo servidor vinculado. Hacer clic con botn derecho sobre el nodo Linked
Servers para agregar un nuevo un servidor vinculado a los datos VFP. Aparece el siguiente
cuadro de dilogo:

Fig. 6
Proveer los siguientes datos:

Nombre del servidor encadenado: especificar el nombre o etiqueta para el servidor


encadenado. Por ejemplo, MIAPPVFP

Proveedor: seleccionar OLE DB para Visual FoxPro

Nombre del producto: se puede especificar un identificador del producto, en este caso
colocar la misma que el nombre del servidor encadenado.

Origen de datos: especificar el archivo .DBC de bases de datos de VFP, con el camino
completo al directorio. Por ejemplo, C:\MIAPPVFP\DATOS\datos1.dbc

Dejar todos los dems campos en blanco, y hacer clic en Aceptar. Asegurarnos que la
pantalla de alta quede as:

Fig. 7
5. Probar con una nueva consulta. Conectarse a la instancia de SQL Server Express que
aloja el servidor encadenado. Recordemos que al no tener bases de datos de usuario de SQL
Server, no existirn ms que las predeterminadas (master, etc.). Cuando hagamos una
consulta al servidor encadenado MIAPPVFP de este ejemplo, no se trabaja contra ninguna
base de datos nativa, sino contra la representacin interna de la base de datos VFP. En otras
palabras, MIAPPVFP es, al mismo tiempo, servidor y base de datos. Debido a esta
particularidad, para hacer una seleccin SELECT a una tabla de VFP, tendremos dos formas
de acceder:
1. Trabajando directamente con el servidor encadenado, armando consultas en TransactSQL (en la figura 3, el trazo en azul) desde cualquier cliente de datos administrado
de .NET. Esta tcnica enva strings de consultas a la base de datos SQL Server
Express, y el servidor encadenado, a travs de VFPOLEDB, realiza la traduccin
necesaria al dialecto de VFP. Por este motivo, desde ADO.NET no podremos enviar a
ejecutar comandos y funciones propias de VFP, como por ejemplo, SELECT
DTOS(fecha) AS fecha , ya que DTOS() no es una funcin reconocida por T-SQL. El
servidor encadenado recibe la peticin en T-SQL , la traduce al SQL de Visual FoxPro,
ejecuta la consulta, y al recibir la respuesta, acondiciona el conjunto de resultados
como si fuese un resultado nativo de SQL Server para envirselo al cliente que efectu
la peticin de datos.

2. Utilizando la primitiva OPENQUERY de SQL Server, que permite enviar por paso-atravs un string conteniendo comandos nativos de VFP. En este caso, el servidor

encadenado pasa a travs de s mismo la consulta sin modificarla, y slo se encarga


de adaptar el resultado de respuesta como una respuesta regular de SQL-Server.
5.1 Prueba con sintaxis T-SQL de SQL Server
Para probar si todo funciona bien, escribamos una consulta sencilla sobre una tabla que
sabemos preexistente en la DBC de VFP. Ntese la sintaxis de acceso a la tabla. Se utiliza la
notacin de cuatro segmentos siempre que se acceda de esta manera a un servidor
encadenado. Sin embargo, como aqu se trata en realidad de una carpeta y un contenedor de
tablas, no existe el concepto de esquema, etc. por lo que estas etiquetas se omiten, dejando
solamente los puntos. De esta forma, si el servidor encadenado se llama MIAPPVFP, y la
tabla es clientes.dbf, se referencia como FROM miappvfpclientes (tres puntos), como
se muestra en la siguiente figura:

fig. 8
5.2 Prueba de consulta con paso-a-travs y OPENQUERY
Cuando sea necesario emitir una consulta que slo puede resolverse a travs de VFP, ser
necesario utilizar el pasfo-a-travs. Para lograr esto, ser necesario utilizar la funcin
OPENQUERY, en el siguiente formato de consulta:

SELECT <lista de campos> FROM OPENQUERY(<servidor_vinculado>, <string


de consulta nativa VFP>)
Donde el <servidor_vinculado> debe especificarse sin comillas, y la consulta VFP nativa debe
estar como una constante de caracteres encerrada entre comillas simples:

SELECT nombre,sexo FROM OPENQUERY(miappvfp,SELECT * FROM clientes)

fig. 9
Con esto configurado, estaremos en condiciones de consumir los datos desde pginas

ASP.NET que se publiquen en IIS de 64 bits, pudiendo aprovechar lo que ya sabemos de


ADO.NET, etc.
Conexin desde una aplicacin de .NET
Para conectarnos desde Visual Studio, el string de conexin a SQL Server es parecido al que
usaramos con tablas regulares, pero en este caso se omite el catlogo inicial o el nombre de
base de datos. Por ejemplo:

Data Source=SERVPRINC\SQLEXPRESS;User
ID=MiUsuario;Password=MiPassword
Una vez establecido este origen de datos, en nuestro proyecto podremos generar objetos de
datos que accedan a la base contenedora de VFP a travs del servidor vinculado. Por
ejemplo, si utilizsemos el control sqlDataSource para las pginas ASP.NET, podramos
probar una consulta as

fig. 10
Donde el secreto est en configurar el datasource SqlDataSource1 de la siguiente manera:

String de conexin: Por ejemplo, Data Source=SERVPRINC\SQLEXPRESS;User


ID=MiUsuario;Password=MiPassword reemplazando las credenciales por las
correspondientes a nuestra instalacin.
Comando SELECT: Al configurar el SqlDataSource1, el asistente nos preguntar cmo
recuperar la base de datos. Ntese que no nos permite acceder a ninguna tabla ya que no
hemos especificado una base de datos por defecto, y la nica opcin ser especificar una
consulta SQL. La opcin de procedimiento almacenado no est disponible.

Fig. 11 y 12

Este comando SELECT debe especificarse con sintaxis T-SQL de SQL Server, no con el
dialecto de Visual FoxPro. Ntese que hemos definido un parmetro de consulta en la
consulta:

SELECT nombre,doc_nro FROM miappvfpclientes WHERE doc_nro = @doc_nro


Ajuste del parmetro de la consulta: Como el control SqlDataSource1 acepta varias formas
de cargar el parmetro antes de ejecutar la consulta, seleccionamos que lo tome del control
del formulario txtDoc, que es el cuadro de texto donde el usuario especifica el nmero de
documento a buscar, colocando esos datos en el asistente:

Fig. 13
Prueba de la consulta:
En el siguiente paso del asistente probaremos la consulta. En nuestro caso, a los fines de
verificacin solamente, hemos creado varias entradas en la tabla (doc_nro no es clave
primaria en este test) con un mismo documento, para ver si recupera correctamente:

Fig. 14 y 15
Aceptemos todo y el SqlDataSource1 quedar configurado.
Ajuste del control GridView: Para el gridview de la pgina slo bastar hacer clic en su
smarttag (el pequeo tringulo que aparece en la esquina superior derecha al seleccionar el
control con el ratn), y elegir como origen de datos al recin configurado SqlDataSource1.

fig. 16
Al hacerlo, inmediatamente quedar configurada la visual del gridview. Podemos cambiar la
visual del gridview utilizando la opcin AutoFormat, etc. y cambiarle la cabecera a cada
columna utilizando la opcin Edit Columns. A efectos ilustrativos, vemos cmo cambiar la
cabecera de la primera columna, de nombre (que trae de la tabla de datos VFP) a Nombre

de cliente.

fig. 17
Prueba de la pgina:
Pulsamos F5 y aguardamos hasta que aparezca la pgina

fig. 18
Colocamos el numero de documento y pulsamos consultar. A los breves instantes tendremos
la respuesta:

fig. 19
Donde los datos provienen de Visual Foxpro. Tambin podramos haber utilizado un dataset,
etc.
Publicar la pgina en el servidor IIS de 64 bits.
La prueba de fuego ser publicar la pgina al servidor IIS, de 64 bits. Una vez hecho esto,
podremos verificarla para ver si funciona correctamente. Esta es una imagen de la misma
pgina instalada en el servidor de produccin:

fig. 20

Con lo cual, hemos podido publicar los datos de VFP en un entorno ASP.NET con IIS de
64 bits, consumiendo datos de VFP.
Algunos cuidados a tener
1. Campos de tipo fecha: Cuando se utilicen fechas como parmetros, la consulta utilizando
sintaxis de T-SQL no es optimizada en el motor VFP si la columna de filtrado es de tipo fecha.
Por algn motivo, OLEBD para VFP ejecuta una exploracin secuencial completa de toda la
tabla, dando como resultado un rendimiento de consulta sub-ptimo que puede llegar incluso a
una decena de segundos, algo inaceptable para una pgina web. En este caso, si
necesitamos optimizar la consulta por parmetros de fecha en la tabla de VFP, la nica
solucin posible ser utilizar OPENQUERY como se explica en el punto siguiente.
2. Funciones nativas de VFP. Al utilizar sintaxis T-SQL, no podremos enviar una consulta con
funciones propias de VFP, por ejemplo, INSTR() o DTOS() no podran incluirse en la consulta.
Como vimos en el paso anterior, tampoco podramos optimizar una consulta que se haga
sobre fechas de VFP. Para estos casos, debermos utilizar OPENQUERY indefectiblemente, a
fin de pasar slo un string de consulta en dialecto VFP que ser procesado desde el mismo
motor de VFP, sin pasar por ningun proceso de traduccin en el servidor encadenado.
Por ejemplo, supongamos que necesitamos optimizar una consulta por la columna de fecha
llamada fechaVenta en una tabla llamada VENTAS debemos seguir estos pasos:

indexar la tabla de Visual Foxpro con la funcin DTOS, y hacer la consulta desde
ASP.NET con dicha consulta. Suponiendo que la columna sea fechaVenta, debemos
indexarla con INDEX ON DTOS(fechaVenta) TAG fV en Visual Foxpro.

en ASP.NET, configurar los parmetros para que coincidan con el patrn YYYYMMDD
de VFP que devuelve la funcin DTOS(). Por ejemplo, si tenemos una variable dFecha

as date en .NET, podremos obtener su string equivalente al colocar dim


cFechaParam as string = dFecha.ToString(yyyyMMdd).

Armar la consulta en el SQLDataSource, SQLAdapter, etc. especificando que el


SelectCommand sea el sigiuente:

SELECT * FROM OPENQUERY( miappvfp, SELECT fechaVenta, factura, cliente FROM


ventas WHERE DTOS(fechaVenta) = +cFechaParam+)

3. Palabras clave en consulta. Si bien VFP nos deja emitir consultas con nombres de campo
o tablas que coincidan con las palabras clave, como por ejemplo llegar al extremo de colocar
SELECT select FROM select y que ejecute correctamente en VFP, siempre que haya una
tabla llamada SELECT con una columna con nombre SELECT, este tipo de consultas ser
rechazada por VFPOLEDB en el servidor encadenado, dando un error en en la instancia de
traduccin si utilizamos las consultas T-SQL. Incluso utilizando OPENQUERY, la consulta
podra realizarse correctamente en VFP, pero al rearmar la tabla de resultados, VFPOLEDB
dar un error y no se podr obtener el dataset, etc. desde .NET. Por tanto, debemos
asegurarnos que, tanto con consultas en T-SQL como con las especificadas dentro de
OPENQUERY, no se utilicen objetos de la base de datos que coincidan con palabras clave de
T-SQL.
Conclusin
Con la facilidad de servidor vinculado (linked server) que tiene SQL Server Express, podremos
hacer que los procesos de 64 bits consuman los datos de VFP a travs de VFPOLEDB. El
SQL Server Express no tiene costo, y el driver OLEDB para VFP es de descarga gratuita. Con
esta solucin, si bien se agrega una instancia ms al servidor principal o a algn otro de la red,
tenemos la ganancia es que no se debe alterar el mecanismo en .NET de acceso a los datos,
porque seguir siendo el driver nativo que siempre estar disponible, en sistemas de 32 o de
64 bits. As, uno puede tener toda una instalacin de un gran sistema ASP.NET en Windows
Server de 64 bits, y an as acceder a los datos de Visual FoxPro sin necesidad de alterar en
nada la programacin ni la instalacin en produccin del sitio.

You might also like