Acceso a datos de foxpro sin foxpro

Acceso a datos de foxpro sin foxpro


Esta pequeña DLL de VFP puede ayudar a traer el poder de Rushmore no Rushmore aplicaciones.

FoxTalk de febrero de 1999

derechos de Autor Pinnacle Publishing, Inc. Todos los derechos reservados.el Acceso a Datos de FoxPro sin FoxPro Front-End
Steve Zimmelman

Hay veces cuando los datos de FoxPro es necesario tener acceso de otras aplicaciones de FoxPro. Cuando eso sucede, la mejor herramienta para el trabajo todavía puede ser FoxPro. Este pequeño DLL de VFP puede ayudar a traer el poder de Rushmore no Rushmore aplicaciones.

el año Pasado, he desarrollado una aplicación para nuestra empresa en Delphi 3, en la que se lee en las tablas de nuestro FoxPro DOS legado de sistema. Todo salió bien en la beta, así que empezamos a distribuir la aplicación a nuestros clientes. Hubo, sin embargo, una supervisión: nunca Hemos probado el sistema en contra de las mesas que estaban muy pobladas. Cuando instalamos la aplicación en uno de nuestros más grandes sitios de los clientes, la aplicación se cayó a sus rodillas y murió. El problema: El Borland Database Engine fue el intento de algunas consultas complejas usando SQL contra una mesa que tenía más de dos millones de registros. Nuestro cliente nos informó que las consultas fueron de tomar hasta 72 horas (sí, que & #39 s horas, no minutos) para completar. Esto, por supuesto, era & #39 t aceptable, así que empecé a investigar formas alternativas de ejecución de las consultas. El resultado fue un VFP objeto OLE en la forma de un archivo DLL que ejecuta las consultas (o casi cualquier comando de FoxPro) desde dentro de Delphi (o cualquier otro de 32 bits idioma) de forma transparente y con la velocidad de Rushmore. El uso de esta tecnología, el tiempo de consulta cayó de horas a segundos.

el código de La VFP DLL de OLE es realmente muy simple, y puede contener tan poco como una sola función o un procedimiento. Decidí escribir unos procedimientos que son específicas de la aplicación, pero también he incluido algunos genérico que puede ser utilizado por cualquier aplicación. Por el bien de la simplicidad, & #39 cinco incluyó sólo el genérico de procedimientos y funciones en el código siguiente:


**************************************
* Programa: VFP_OLE.PRG
* 5 de Visual FoxPro DLL de OLE
**************************************
DEFINIR la CLASE VFP_OLE_Server COMO CONTENEDOR de OLEPUBLIC

Procedimiento Init
* El Procedimiento INIT es automáticamente
* se ejecuta cuando se carga la DLL.
Set Talk Off
Definir Seguro
En el Error de Hacer Ole_Err Con Error(),Lineno(),
Message(),Programa()
Set Exclusivo Off
Set Null
*****************************************
* & Si CPDIALOG está ENCENDIDO y una DBF que se
* & creado sin que la página de códigos que se abre,
* & la página de códigos del cuadro de diálogo enfrentar
* & el usuario.
*****************************************
CONJUNTO de CPDIALOG OFF
*
Conjunto de volver a procesar A 1
*
* Mover FoxPro pantalla principal camino para la
* bit-cubo para que no & #39 t ver si
* & #39 s visible.
Mover la Ventana de la Pantalla Para -1000,-1000
Modificar la Pantalla de la Ventana de Título 'VFP OLE'
Ocultar la Ventana de la Pantalla
EndProc

Procedimiento SetDir
Parámetro redc
Set Default (m.redc)
EndProc

Función ExeSql
Parámetro cSql
Private nRecs,i,cFile,cFileSrc,cFullPath,
cDestpath,IsVFPFile,
cDbfFileName,nHandle
lIsVFPFile = .F.
cFullPath = (& #39 FullPath & #39 )
*
* Mostrar VFP principal de la ventana de modo de Archivo
* cuadro de diálogo será visible
* si VFP & #39 t encontrar un archivo que & #39 s
* necesarios para el comando SQL.
*
Mostrar Ventana de la Pantalla
*
* & Ejecutar la Instrucción SQL & *
*
cSql = AllTrim(m.cSql)
& cSql
*
Ocultar la Ventana de la Pantalla
*
nRecs = _Tally
*
Conjunto de FullPath En
cFileSrc = DBF()

**************************************
* & Check tabla escriba.
* & Si Es de Tipo Visual FoxPro,
* & convertir a Fox2x.
**************************************
nHandle = FOpen(m.cFileSrc)
Si nHandle <> -1
lIsVFPFile = (FGets(m.nHandle,1)=Chr(48))
=FClose(m.nHandle)
Endif
Uso (m.cFileSrc) Exclusivo
cDestPath = izquierda(dbf(),rata( & #39 / & #39 ,dbf()))
Si m.lIsVFPFile
* & Convertir el resultado A Fox2x formato & *
cFile = & #39 T & #39 derecho(sys(3),7)
Copiar (m.cDestPath m.cFile) Tipo de Fox2x

Borrar (m.cFileSrc)
Si el Archivo(a la Izquierda(m.cFileSrc,
Len(m.cFileSrc)-4) & #39 .FTP & #39 )
Borrar (a la Izquierda(m.cFileSrc,
Len(m.cFileSrc)-4) & #39 .FTP & #39 )
Endif
cambiar el nombre de (m.cDestPath m.cFile & #39 .DBF & #39 )
A. (m.cFileSrc)
Si el Archivo. (m.cDestPath m.cFile & #39 .FPT & #39 )
cambiar el nombre de (m.cDestPath m.cFile & #39 .FPT & #39 )
A (a la Izquierda(m.cFileSrc,
Len(m.cFileSrc)-4) & #39 .FTP & #39 )
Endif


Uso (m.cFileSrc) Exclusivo
Endif
* & Restaurar FullPath configuración & *
Conjunto de FullPath & cFullPath

** & Resultado número de Registro & **
Return (m.nRecs)
EndFunc

Procedimiento IndexOn
** & Crear Etiquetas de Índice & *
Parámetro cDBF,cKey,cTag,lDeleteTags
Uso (m.cDBF) EXCLUSIVO En 0 Alias IndexDBF
Seleccione IndexDBF
Si m.lDeleteTags
ELIMINAR la ETIQUETA de TODOS los
Endif
ÍNDICE de SOBRE-cKey ETIQUETA & cTag

EndProc

Procedimiento SetPath
Parámetro cPath
Set Path To (m.cPath)
EndProc

Procedimiento FoxCommand
Parámetro división
& división
EndProc

Función FoxFunction
Parámetro cFunc
Private Rtn
Rtn = Eval(m.cFunc)
Return (m.Rtn)
EndFunc

ENDDEFINE

Procedimiento Ole_Err
** & Identificador DLL errores internos & **
Parámetro nErr,nLine,cMessage,cPRG
SI (m.nErr=1707)
* & CDX no existe, OK para Reintentar & *
Reintentar
Else
MessageBox( m.cMessage Chr(13) Chr(13)
& #39 Error# & #39 str(m.nErr,5) Chr(13)
& #39 En Línea# & #39 Str(m.nLine,5) Chr(13)
& #39 & #39 m.cPrg chr(13) Chr(13)
& #39 Ver File:OLE_ERR.TXT para obtener más detalles. & #39
,16, & #39 de ERROR en VFP_OLE.DLL Módulo & #39 )

*
* & Dump de la memoria y el Estado de los archivos en un archivo de texto.
*
Create Cursor OleError (ErrText M(10))
Estado de la Lista NoConsole A Archivo OLE_STAT.TMP
Lista de Memoria Como * NoConsole A Archivo OLE_MEM.TMP

Append en Blanco
Reemplazar ErrText Con
Replicar( & #39 * & #39 ,80) Chr(13) Chr(10)
DTOC(Date()) & #39 & #39 Tiempo()
Chr(13) Chr(10)
PadC( & #39 ESTADO & #39 ,80, & #39 * & #39 )
Chr(13) Chr(10)

Añadir Memo ErrText De OLE_STAT.TMP
Reemplazar ErrText Con Chr(13) Chr(10)
PadC( & #39 MEMORIA & #39 ,80, & #39 * & #39 )
Chr(13) Chr(10) Addi

Añadir Memo ErrText De OLE_MEM.TMP
Reemplazar ErrText Con Chr(13) Chr(10)
PadC( & #39 & End Error & & #39 ,80, & #39 * & #39 )
Chr(13) Chr(10) Addi

Si el Archivo( & #39 OLE_ERR.TXT & #39 )
Copia Memo ErrText A OLE_ERR.TXT Addi
Else
Copia Memo ErrText A OLE_ERR.TXT
Endif

Borrar OLE_STAT.TMP
Borrar OLE_MEM.TMP
*
Cerrar de Datos
* & Cancelar causas Delphi o visual basic a plantear una
* & error.
Ocultar la Ventana de la Pantalla
* & El comando CANCELAR causas Delphi
* & ser capaz de capturar el error.
Cancelar
Endif
EndProc

*:EF(VFP_OLE.PRG)

la Creación de la DLL es muy fácil en VFP. Cuando usted haga clic en el botón Generar el proyecto, & #39 s una opción para crear una DLL de OLE. Simplemente haga clic en la DLL de OLE botón de radio, luego en el botón ACEPTAR

Acceso a datos de foxpro sin foxpro

una Vez que el archivo DLL se construye, el siguiente paso es registrar con Windows. Esto se hace fácilmente mediante REGSVR32.EXE, que se distribuye con Windows 95/98, NT, y de VFP. La sintaxis para registrar la DLL es:

REGSVR32 VFP_OLE.DLL

& #39 s get connected
a la hora de conectarse usando la DLL es casi tan fácil como compilarlo. En Delphi, el uso de la CreateOleObject() método, y en VB utilizar CreateObject(). Porque tengo la leve sospecha de que la mayoría de los desarrolladores VFP son probablemente más familiarizados con VB de Delphi, he utilizado sólo el código de VB para demostrar esta técnica.

Private Sub Command1_Click()
& #39 & Declarar variable para contener la referencia
Dim VFPOLE Como Objeto

& #39 & Asignar la referencia de objeto a la variable
Conjunto de VFPOLE = CreateObject('VFP_OLE.VFP_OLE_Server')

VFPOLE.FoxCommand _
('Ventana de Espera & #39 la Ejecución de la Consulta & #39 Nowait')

VFPOLE.FoxCommand ('Select * From Factura' & _
'(Fecha()-Fechfact)>=60 ' & _
'En la Tabla de MyInvAge')

VFPOLE.FoxCommand ('Esperar Clara')

Si VFPOLE.FoxFunction ('Utilizado( & #39 MyInvAge & #39 )'), a Continuación,
Algo
Si

& #39 & Liberación de la referencia
Conjunto de VFPOLE = Nada
End Sub

Se puede utilizar un código similar a este, o, si usted tiene necesidades más específicas, usted puede escribir una serie de PRGs, compile en una APLICACIÓN o FXPs, y ejecutarlas de la no-VFP aplicaciones utilizando el FoxCommand método, como esta:

VFPOLE.FoxCommand ('¿MyApp.APP')

Con esta DLL, usted tiene la capacidad de hacer casi cualquier cosa que usted puede hacer desde dentro de FoxPro de no VFP aplicaciones. Cuando usted necesita el poder de Rushmore, nada corre como un Zorro!

& nbsp







Acceso a datos de foxpro sin foxpro


Acceso a datos de foxpro sin foxpro : Multi-millones de consejos para hacer su vida mas facil.


Esta pequeña DLL de VFP puede ayudar a traer el poder de Rushmore no Rushmore aplicaciones.

FoxTalk de febrero de 1999

derechos de Autor Pinnacle Publishing, Inc. Todos los derechos reservados.el Acceso a Datos de FoxPro sin FoxPro Front-End
Steve Zimmelman

Hay veces cuando los datos de FoxPro es necesario tener acceso de otras aplicaciones de FoxPro. Cuando eso sucede, la mejor herramienta para el trabajo todavia puede ser FoxPro. Este pequeño DLL de VFP puede ayudar a traer el poder de Rushmore no Rushmore aplicaciones.

el año Pasado, he desarrollado una aplicacion para nuestra empresa en Delphi 3, en la que se lee en las tablas de nuestro FoxPro DOS legado de sistema. Todo salio bien en la beta, asi que empezamos a distribuir la aplicacion a nuestros clientes. Hubo, sin embargo, una supervision: nunca Hemos probado el sistema en contra de las mesas que estaban muy pobladas. Cuando instalamos la aplicacion en uno de nuestros mas grandes sitios de los clientes, la aplicacion se cayo a sus rodillas y murio. El problema: El Borland Database Engine fue el intento de algunas consultas complejas usando SQL contra una mesa que tenia mas de dos millones de registros. Nuestro cliente nos informo que las consultas fueron de tomar hasta 72 horas (si, que & #39 s horas, no minutos) para completar. Esto, por supuesto, era & #39 t aceptable, asi que empece a investigar formas alternativas de ejecucion de las consultas. El resultado fue un VFP objeto OLE en la forma de un archivo DLL que ejecuta las consultas (o casi cualquier comando de FoxPro) desde dentro de Delphi (o cualquier otro de 32 bits idioma) de forma transparente y con la velocidad de Rushmore. El uso de esta tecnologia, el tiempo de consulta cayo de horas a segundos.

el codigo de La VFP DLL de OLE es realmente muy simple, y puede contener tan poco como una sola funcion o un procedimiento. Decidi escribir unos procedimientos que son especificas de la aplicacion, pero tambien he incluido algunos generico que puede ser utilizado por cualquier aplicacion. Por el bien de la simplicidad, & #39 cinco incluyo solo el generico de procedimientos y funciones en el codigo siguiente:


**************************************
* Programa: VFP_OLE.PRG
* 5 de Visual FoxPro DLL de OLE
**************************************
DEFINIR la CLASE VFP_OLE_Server COMO CONTENEDOR de OLEPUBLIC

Procedimiento Init
* El Procedimiento INIT es automaticamente
* se ejecuta cuando se carga la DLL.
Set Talk Off
Definir Seguro
En el Error de Hacer Ole_Err Con Error(),Lineno(),
Message(),Programa()
Set Exclusivo Off
Set Null
*****************************************
* & Si CPDIALOG esta ENCENDIDO y una DBF que se
* & creado sin que la pagina de codigos que se abre,
* & la pagina de codigos del cuadro de dialogo enfrentar
* & el usuario.
*****************************************
CONJUNTO de CPDIALOG OFF
*
Conjunto de volver a procesar A 1
*
* Mover FoxPro pantalla principal camino para la
* bit-cubo para que no & #39 t ver si
* & #39 s visible.
Mover la Ventana de la Pantalla Para -1000,-1000
Modificar la Pantalla de la Ventana de Titulo 'VFP OLE'
Ocultar la Ventana de la Pantalla
EndProc

Procedimiento SetDir
Parametro redc
Set Default (m.redc)
EndProc

Funcion ExeSql
Parametro cSql
Private nRecs,i,cFile,cFileSrc,cFullPath,
cDestpath,IsVFPFile,
cDbfFileName,nHandle
lIsVFPFile = .F.
cFullPath = (& #39 FullPath & #39 )
*
* Mostrar VFP principal de la ventana de modo de Archivo
* cuadro de dialogo sera visible
* si VFP & #39 t encontrar un archivo que & #39 s
* necesarios para el comando SQL.
*
Mostrar Ventana de la Pantalla
*
* & Ejecutar la Instruccion SQL & *
*
cSql = AllTrim(m.cSql)
& cSql
*
Ocultar la Ventana de la Pantalla
*
nRecs = _Tally
*
Conjunto de FullPath En
cFileSrc = DBF()

**************************************
* & Check tabla escriba.
* & Si Es de Tipo Visual FoxPro,
* & convertir a Fox2x.
**************************************
nHandle = FOpen(m.cFileSrc)
Si nHandle <> -1
lIsVFPFile = (FGets(m.nHandle,1)=Chr(48))
=FClose(m.nHandle)
Endif
Uso (m.cFileSrc) Exclusivo
cDestPath = izquierda(dbf(),rata( & #39 / & #39 ,dbf()))
Si m.lIsVFPFile
* & Convertir el resultado A Fox2x formato & *
cFile = & #39 T & #39 derecho(sys(3),7)
Copiar (m.cDestPath m.cFile) Tipo de Fox2x

Borrar (m.cFileSrc)
Si el Archivo(a la Izquierda(m.cFileSrc,
Len(m.cFileSrc)-4) & #39 .FTP & #39 )
Borrar (a la Izquierda(m.cFileSrc,
Len(m.cFileSrc)-4) & #39 .FTP & #39 )
Endif
cambiar el nombre de (m.cDestPath m.cFile & #39 .DBF & #39 )
A. (m.cFileSrc)
Si el Archivo. (m.cDestPath m.cFile & #39 .FPT & #39 )
cambiar el nombre de (m.cDestPath m.cFile & #39 .FPT & #39 )
A (a la Izquierda(m.cFileSrc,
Len(m.cFileSrc)-4) & #39 .FTP & #39 )
Endif


Uso (m.cFileSrc) Exclusivo
Endif
* & Restaurar FullPath configuracion & *
Conjunto de FullPath & cFullPath

** & Resultado numero de Registro & **
Return (m.nRecs)
EndFunc

Procedimiento IndexOn
** & Crear Etiquetas de Indice & *
Parametro cDBF,cKey,cTag,lDeleteTags
Uso (m.cDBF) EXCLUSIVO En 0 Alias IndexDBF
Seleccione IndexDBF
Si m.lDeleteTags
ELIMINAR la ETIQUETA de TODOS los
Endif
INDICE de SOBRE-cKey ETIQUETA & cTag

EndProc

Procedimiento SetPath
Parametro cPath
Set Path To (m.cPath)
EndProc

Procedimiento FoxCommand
Parametro division
& division
EndProc

Funcion FoxFunction
Parametro cFunc
Private Rtn
Rtn = Eval(m.cFunc)
Return (m.Rtn)
EndFunc

ENDDEFINE

Procedimiento Ole_Err
** & Identificador DLL errores internos & **
Parametro nErr,nLine,cMessage,cPRG
SI (m.nErr=1707)
* & CDX no existe, OK para Reintentar & *
Reintentar
Else
MessageBox( m.cMessage Chr(13) Chr(13)
& #39 Error# & #39 str(m.nErr,5) Chr(13)
& #39 En Linea# & #39 Str(m.nLine,5) Chr(13)
& #39 & #39 m.cPrg chr(13) Chr(13)
& #39 Ver File:OLE_ERR.TXT para obtener mas detalles. & #39
,16, & #39 de ERROR en VFP_OLE.DLL Modulo & #39 )

*
* & Dump de la memoria y el Estado de los archivos en un archivo de texto.
*
Create Cursor OleError (ErrText M(10))
Estado de la Lista NoConsole A Archivo OLE_STAT.TMP
Lista de Memoria Como * NoConsole A Archivo OLE_MEM.TMP

Append en Blanco
Reemplazar ErrText Con
Replicar( & #39 * & #39 ,80) Chr(13) Chr(10)
DTOC(Date()) & #39 & #39 Tiempo()
Chr(13) Chr(10)
PadC( & #39 ESTADO & #39 ,80, & #39 * & #39 )
Chr(13) Chr(10)

Añadir Memo ErrText De OLE_STAT.TMP
Reemplazar ErrText Con Chr(13) Chr(10)
PadC( & #39 MEMORIA & #39 ,80, & #39 * & #39 )
Chr(13) Chr(10) Addi

Añadir Memo ErrText De OLE_MEM.TMP
Reemplazar ErrText Con Chr(13) Chr(10)
PadC( & #39 & End Error & & #39 ,80, & #39 * & #39 )
Chr(13) Chr(10) Addi

Si el Archivo( & #39 OLE_ERR.TXT & #39 )
Copia Memo ErrText A OLE_ERR.TXT Addi
Else
Copia Memo ErrText A OLE_ERR.TXT
Endif

Borrar OLE_STAT.TMP
Borrar OLE_MEM.TMP
*
Cerrar de Datos
* & Cancelar causas Delphi o visual basic a plantear una
* & error.
Ocultar la Ventana de la Pantalla
* & El comando CANCELAR causas Delphi
* & ser capaz de capturar el error.
Cancelar
Endif
EndProc

*:EF(VFP_OLE.PRG)

la Creacion de la DLL es muy facil en VFP. Cuando usted haga clic en el boton Generar el proyecto, & #39 s una opcion para crear una DLL de OLE. Simplemente haga clic en la DLL de OLE boton de radio, luego en el boton ACEPTAR

Acceso a datos de foxpro sin foxpro

una Vez que el archivo DLL se construye, el siguiente paso es registrar con Windows. Esto se hace facilmente mediante REGSVR32.EXE, que se distribuye con Windows 95/98, NT, y de VFP. La sintaxis para registrar la DLL es:

REGSVR32 VFP_OLE.DLL

& #39 s get connected
a la hora de conectarse usando la DLL es casi tan facil como compilarlo. En Delphi, el uso de la CreateOleObject() metodo, y en VB utilizar CreateObject(). Porque tengo la leve sospecha de que la mayoria de los desarrolladores VFP son probablemente mas familiarizados con VB de Delphi, he utilizado solo el codigo de VB para demostrar esta tecnica.

Private Sub Command1_Click()
& #39 & Declarar variable para contener la referencia
Dim VFPOLE Como Objeto

& #39 & Asignar la referencia de objeto a la variable
Conjunto de VFPOLE = CreateObject('VFP_OLE.VFP_OLE_Server')

VFPOLE.FoxCommand _
('Ventana de Espera & #39 la Ejecucion de la Consulta & #39 Nowait')

VFPOLE.FoxCommand ('Select * From Factura' & _
'(Fecha()-Fechfact)>=60 ' & _
'En la Tabla de MyInvAge')

VFPOLE.FoxCommand ('Esperar Clara')

Si VFPOLE.FoxFunction ('Utilizado( & #39 MyInvAge & #39 )'), a Continuacion,
Algo
Si

& #39 & Liberacion de la referencia
Conjunto de VFPOLE = Nada
End Sub

Se puede utilizar un codigo similar a este, o, si usted tiene necesidades mas especificas, usted puede escribir una serie de PRGs, compile en una APLICACION o FXPs, y ejecutarlas de la no-VFP aplicaciones utilizando el FoxCommand metodo, como esta:

VFPOLE.FoxCommand ('¿MyApp.APP')

Con esta DLL, usted tiene la capacidad de hacer casi cualquier cosa que usted puede hacer desde dentro de FoxPro de no VFP aplicaciones. Cuando usted necesita el poder de Rushmore, nada corre como un Zorro!

& nbsp

Acceso a datos de foxpro sin foxpro

Acceso a datos de foxpro sin foxpro : Multi-millones de consejos para hacer su vida más fácil.
Recommander aux amis
  • gplus
  • pinterest

Comentario

Dejar un comentario

Clasificación