Accéder aux données foxpro sans foxpro
Cette petite VFP DLL peuvent aider à apporter la puissance de Rushmore dans le non-Rushmore applications.
Copyright Pinnacle Publishing, Inc. Tous droits réservés.Accéder aux Données FoxPro sans FoxPro Avant la Fin de l'
Steve Zimmelman
Il ya des moments où FoxPro d'accès aux données est nécessaire à partir d'autres applications que FoxPro. Lorsque cela se produit, le meilleur outil pour le travail, ne pourraient être FoxPro. Ce petit VFP DLL peuvent aider à apporter la puissance de Rushmore dans le non-Rushmore applications.
l'année Dernière, j'ai développé une application pour notre entreprise en Delphi 3 qui lit les tables dans notre FoxPro DOS système d'héritage. Tout s'est bien passé en version bêta, donc nous avons commencé à distribuer de la demande de nos clients. Il y avait, cependant, une surveillance: Nous n'avons jamais testé le système sur des tables qui ont été fortement peuplées. Quand nous avons installé l'application à l'un de nos plus grand client des sites, l'application est tombé à ses genoux et il est mort. Le problème: Le Borland Database Engine a été de tenter certaines requêtes complexes à l'aide de SQL Local contre une table qui a eu plus de deux millions d'enregistrements. Notre client nous a informés que les requêtes ont été prise aussi longtemps que 72 heures (oui, c' & #39 heures, pas de procès-verbaux). Ceci, bien sûr, n'est & #39 t acceptable, alors j'ai commencé à explorer d'autres façons de l'exécution de requêtes. Le résultat a été une VFP objet OLE dans la forme d'une DLL qui exécute les requêtes (ou presque toute commande FoxPro) à partir de Delphi (ou tout autre 32 bits langue) de manière transparente et avec la vitesse de Rushmore. Grâce à cette technologie, la durée de la requête a chuté de quelques heures à quelques secondes.
le code de La VFP DLL OLE est en fait très simple, et il peut contenir aussi peu que un seul de procédure ou de fonction. J'ai choisi d'écrire quelques procédures spécifiques à l'application, mais j'ai aussi inclus quelques génériques qui peuvent être utilisés par n'importe quelle application. Par souci de simplicité, j' & #39 ve inclus seulement le générique de procédures et de fonctions dans le code suivant:
**************************************
* Programme: VFP_OLE.PRG
* Visual FoxPro 5 DLL OLE
**************************************
permet de DÉFINIR la CLASSE VFP_OLE_Server COMME CONTENEUR OLEPUBLIC
Procédure Init
* La Procédure INIT est automatiquement
* exécutée lorsque la DLL est chargée.
Set Parler Off
Sécurité
en cas d'Erreur Ne Ole_Err Avec l'Erreur(),Lineno(),
Message(),Programme()
Set Exclusif
Set Null
*****************************************
* & Si CPDIALOG est SUR et un DBF qui a été
* & créé sans une page de Codes est ouvert,
* & la page de Codes de la boîte de dialogue se confronter
* & l'utilisateur.
*****************************************
l'ENSEMBLE CPDIALOG OFF
*
Jeu de Retraiter À 1
*
* Déplacer FoxPro écran principal moyen de sortir de la
* seau de bits de sorte qu'il ne & #39 t être vu si
* & #39 s rendue visible.
pour Déplacer la Fenêtre de l'Écran À -1000,-1000
Fenêtre de modification de Titre de l'Écran 'VFP OLE'
Masquer l'Écran de la Fenêtre
EndProc
Procédure SetDir
Paramètre du redc
Définir par Défaut à m.redc)
EndProc
Function ExeSql
Paramètre cSql
Private nRecs,j',cFile,cFileSrc,cFullPath,
cDestpath,IsVFPFile,
cDbfFileName,nHandle
lIsVFPFile = .F.
cFullPath = Set( & #39 FullPath & #39 )
*
* Afficher le principal VFP fenêtre pour le Fichier
* boîte de dialogue sera visible
* si VFP peut & #39 t trouver un fichier & #39 s
* nécessaire pour la commande SQL.
*
Afficher l'Écran de la Fenêtre
*
* & Exécution de l'Instruction SQL & *
*
cSql = AllTrim(m.cSql)
& cSql
*
Masquer l'Écran de la Fenêtre
*
nRecs = _Tally
*
Définir le nom de chemin complet Sur
cFileSrc = DBF()
Utilisation
**************************************
* & Check tableau tapez.
* & Si le Type Est Visual FoxPro,
* & convertir Fox2x.
**************************************
nHandle = FOpen(m.cFileSrc)
Si nHandle <> -1
lIsVFPFile = (FGets(m.nHandle,1)=Chr(48))
=FClose(m.nHandle)
Endif
Utiliser (m.cFileSrc) Exclusive
cDestPath = gauche(dbf(),rat( & #39 \ & #39 ,dbf()))
Si m.lIsVFPFile
* & Convertir résultat À Fox2x format & *
cFile = & #39 T & #39 droit(sys(3),7)
Copie À m.cDestPath m.cFile) Type Fox2x
Utilisation
Effacer (m.cFileSrc)
Si le Fichier(à Gauche(m.cFileSrc,
Len(m.cFileSrc)-4) & #39 .FTP & #39 )
Effacer (à Gauche(m.cFileSrc,
Len(m.cFileSrc)-4) & #39 .FTP & #39 )
Endif
Renommer (m.cDestPath m.cFile & #39 .DBF & #39 )
À m.cFileSrc)
Si le Fichier(m.cDestPath m.cFile & #39 .FPT & #39 )
Renommer (m.cDestPath m.cFile & #39 .FPT & #39 )
(à Gauche(m.cFileSrc,
Len(m.cFileSrc)-4) & #39 .FTP & #39 )
Endif
Utiliser (m.cFileSrc) Exclusive
Endif
* & Restaurer FullPath paramètre & *
Définir FullPath & cFullPath
** & Résultat de Retour le nombre d'Enregistrement & **
Return (m.nRecs)
EndFunc
Procédure IndexOn
** & Créer des Balises d'Index & *
Paramètre cDBF,cKey,cTag,lDeleteTags
Utiliser (m.cDBF) EXCLUSIF À 0 Alias IndexDBF
Sélectionnez IndexDBF
Si m.lDeleteTags
SUPPRIMER la BALISE
Endif
INDICE de SUR-cKey TAG & cTag
UTILISATION
EndProc
Procédure SetPath
Paramètre cPath
Définir le Chemin d'accès À m.cPath)
EndProc
Procédure FoxCommand
Paramètre du ccg
& ccg
EndProc
Function FoxFunction
Paramètre cFunc
Private Rtn
Rtn = Eval(m.cFunc)
Return (m.Rtn)
EndFunc
ENDDEFINE
Procédure Ole_Err
** & Poignée DLL erreurs internes & **
Paramètre nErr,nLine,cMessage,cPRG
SI (m.nErr=1707)
* & CDX présente pas, OK pour Réessayer & *
Réessayez
Else
MessageBox( m.cMessage Chr(13) Chr(13)
& #39 Erreur# & #39 str(m.nErr,5) Chr(13)
& #39 En Ligne# & #39 Str(m.nLine,5) Chr(13)
& #39 & #39 m de.cPrg chr(13) Chr(13)
& #39 Voir File:OLE_ERR.TXT pour plus de détails. & #39
,16, & #39 ERREUR dans VFP_OLE.DLL Module & #39 )
*
* & Dump de la mémoire et de l'État des fichiers dans un fichier texte.
*
Créer un Curseur OleError (ErrText M(10))
État de la Liste des NoConsole De Fichier OLE_STAT.TMP
la Liste de la Mémoire * NoConsole De Fichier OLE_MEM.TMP
Append Blank
Remplacer ErrText Avec
Reproduire( & #39 * & #39 ,80) Chr(13) Chr(10)
DTOC(Date()) & #39 & #39 Time()
Chr(13) Chr(10)
nom de padc( & #39 STATUT & #39 ,80, & #39 * & #39 )
Chr(13) Chr(10)
Ajouter Memo ErrText De OLE_STAT.TMP
Remplacer ErrText Avec Chr(13) Chr(10)
nom de padc( & #39 de la MÉMOIRE & #39 ,80, & #39 * & #39 )
Chr(13) Chr(10) Addi
Ajouter Memo ErrText De OLE_MEM.TMP
Remplacer ErrText Avec Chr(13) Chr(10)
nom de padc( & #39 & Fin de Erreur & & #39 ,80, & #39 * & #39 )
Chr(13) Chr(10) Addi
Si le Fichier( & #39 OLE_ERR.TXT & #39 )
Copie Mémo ErrText À OLE_ERR.TXT Addi
Else
Copie Mémo ErrText À OLE_ERR.TXT
Endif
Effacer OLE_STAT.TMP
Effacer OLE_MEM.TMP
*
* & Annuler causes Delphi ou VB pour élever un
* & erreur.
Masquer l'Écran de la Fenêtre
* & La commande ANNULER causes Delphi
* & pour être en mesure d'intercepter l'erreur.
Annuler
Endif
EndProc
*:EOF(VFP_OLE.PRG)
la Création de la DLL est très facile de VFP. Lorsque vous cliquez sur le bouton générer le projet, là & #39 s une option pour créer une DLL OLE. Cliquez simplement sur la DLL OLE bouton radio, puis sur le bouton OK
une Fois que la DLL est construit, la prochaine étape est de vous inscrire avec Windows. Ceci est facilement réalisé en utilisant REGSVR32.EXE qui est distribué avec Windows 95/98, NT, et VFP. La syntaxe pour l'enregistrement de la DLL est:
REGSVR32 VFP_OLE.DLL
Laissez - & #39 s se connecter
Se connecter à l'aide de la DLL est à peu près aussi facile que de le compiler. Dans Delphi, vous utilisez le CreateOleObject() la méthode, et en VB vous utilisez la fonction CreateObject(). Parce que j'ai l'intuition que la plupart des développeurs VFP sont probablement plus familier avec VB que Delphi, j'ai utilisé uniquement le code VB pour illustrer cette technique.
Private Sub Command1_Click()
& #39 & Déclarer la variable pour contenir la référence
Dim VFPOLE Comme Objet
& #39 & Attribuer la référence d'objet à la variable
Définir VFPOLE = CreateObject('VFP_OLE.VFP_OLE_Server')
VFPOLE.FoxCommand _
('Wait Window & #39 l'Exécution de la Requête & #39 Nowait')
VFPOLE.FoxCommand ('Select * from Facture' & _
'Où (Date()-InvDate)>=60' & _
'Dans la Table MyInvAge')
VFPOLE.FoxCommand ('Attendez-Clear')
Si VFPOLE.FoxFunction ('Utilisé( & #39 MyInvAge & #39 )')
DoSomething
End if
& #39-la Libération de la référence
Définir VFPOLE = Rien
End Sub
Vous pouvez utiliser un code similaire à celui, ou, si vous avez des besoins plus précis, vous pouvez écrire une série de la Scrp, les compiler dans une APPLICATION ou FXPs, et de les exécuter à partir de la non-VFP applications à l'aide de la FoxCommand méthode, comme ceci:
VFPOLE.FoxCommand('MyApp.APP')
Avec cette DLL, vous avez la possibilité de faire presque tout ce que vous pouvez faire à partir de FoxPro à partir de non-VFP applications. Lorsque vous avez besoin de la puissance de Rushmore, rien ne fonctionne comme un Renard!
& nbsp
Acceder aux donnees foxpro sans foxpro
Acceder aux donnees foxpro sans foxpro : Plusieurs milliers de conseils pour vous faciliter la vie.
Cette petite VFP DLL peuvent aider a apporter la puissance de Rushmore dans le non-Rushmore applications.
Copyright Pinnacle Publishing, Inc. Tous droits reserves.Acceder aux Donnees FoxPro sans FoxPro Avant la Fin de l'
Steve Zimmelman
Il ya des moments ou FoxPro d'acces aux donnees est necessaire a partir d'autres applications que FoxPro. Lorsque cela se produit, le meilleur outil pour le travail, ne pourraient etre FoxPro. Ce petit VFP DLL peuvent aider a apporter la puissance de Rushmore dans le non-Rushmore applications.
l'annee Derniere, j'ai developpe une application pour notre entreprise en Delphi 3 qui lit les tables dans notre FoxPro DOS systeme d'heritage. Tout s'est bien passe en version beta, donc nous avons commence a distribuer de la demande de nos clients. Il y avait, cependant, une surveillance: Nous n'avons jamais teste le systeme sur des tables qui ont ete fortement peuplees. Quand nous avons installe l'application a l'un de nos plus grand client des sites, l'application est tombe a ses genoux et il est mort. Le probleme: Le Borland Database Engine a ete de tenter certaines requetes complexes a l'aide de SQL Local contre une table qui a eu plus de deux millions d'enregistrements. Notre client nous a informes que les requetes ont ete prise aussi longtemps que 72 heures (oui, c' & #39 heures, pas de proces-verbaux). Ceci, bien sûr, n'est & #39 t acceptable, alors j'ai commence a explorer d'autres façons de l'execution de requetes. Le resultat a ete une VFP objet OLE dans la forme d'une DLL qui execute les requetes (ou presque toute commande FoxPro) a partir de Delphi (ou tout autre 32 bits langue) de maniere transparente et avec la vitesse de Rushmore. Grace a cette technologie, la duree de la requete a chute de quelques heures a quelques secondes.
le code de La VFP DLL OLE est en fait tres simple, et il peut contenir aussi peu que un seul de procedure ou de fonction. J'ai choisi d'ecrire quelques procedures specifiques a l'application, mais j'ai aussi inclus quelques generiques qui peuvent etre utilises par n'importe quelle application. Par souci de simplicite, j' & #39 ve inclus seulement le generique de procedures et de fonctions dans le code suivant:
**************************************
* Programme: VFP_OLE.PRG
* Visual FoxPro 5 DLL OLE
**************************************
permet de DEFINIR la CLASSE VFP_OLE_Server COMME CONTENEUR OLEPUBLIC
Procedure Init
* La Procedure INIT est automatiquement
* executee lorsque la DLL est chargee.
Set Parler Off
Securite
en cas d'Erreur Ne Ole_Err Avec l'Erreur(),Lineno(),
Message(),Programme()
Set Exclusif
Set Null
*****************************************
* & Si CPDIALOG est SUR et un DBF qui a ete
* & cree sans une page de Codes est ouvert,
* & la page de Codes de la boîte de dialogue se confronter
* & l'utilisateur.
*****************************************
l'ENSEMBLE CPDIALOG OFF
*
Jeu de Retraiter A 1
*
* Deplacer FoxPro ecran principal moyen de sortir de la
* seau de bits de sorte qu'il ne & #39 t etre vu si
* & #39 s rendue visible.
pour Deplacer la Fenetre de l'Ecran A -1000,-1000
Fenetre de modification de Titre de l'Ecran 'VFP OLE'
Masquer l'Ecran de la Fenetre
EndProc
Procedure SetDir
Parametre du redc
Definir par Defaut a m.redc)
EndProc
Function ExeSql
Parametre cSql
Private nRecs,j',cFile,cFileSrc,cFullPath,
cDestpath,IsVFPFile,
cDbfFileName,nHandle
lIsVFPFile = .F.
cFullPath = Set( & #39 FullPath & #39 )
*
* Afficher le principal VFP fenetre pour le Fichier
* boîte de dialogue sera visible
* si VFP peut & #39 t trouver un fichier & #39 s
* necessaire pour la commande SQL.
*
Afficher l'Ecran de la Fenetre
*
* & Execution de l'Instruction SQL & *
*
cSql = AllTrim(m.cSql)
& cSql
*
Masquer l'Ecran de la Fenetre
*
nRecs = _Tally
*
Definir le nom de chemin complet Sur
cFileSrc = DBF()
Utilisation
**************************************
* & Check tableau tapez.
* & Si le Type Est Visual FoxPro,
* & convertir Fox2x.
**************************************
nHandle = FOpen(m.cFileSrc)
Si nHandle <> -1
lIsVFPFile = (FGets(m.nHandle,1)=Chr(48))
=FClose(m.nHandle)
Endif
Utiliser (m.cFileSrc) Exclusive
cDestPath = gauche(dbf(),rat( & #39 \ & #39 ,dbf()))
Si m.lIsVFPFile
* & Convertir resultat A Fox2x format & *
cFile = & #39 T & #39 droit(sys(3),7)
Copie A m.cDestPath m.cFile) Type Fox2x
Utilisation
Effacer (m.cFileSrc)
Si le Fichier(a Gauche(m.cFileSrc,
Len(m.cFileSrc)-4) & #39 .FTP & #39 )
Effacer (a Gauche(m.cFileSrc,
Len(m.cFileSrc)-4) & #39 .FTP & #39 )
Endif
Renommer (m.cDestPath m.cFile & #39 .DBF & #39 )
A m.cFileSrc)
Si le Fichier(m.cDestPath m.cFile & #39 .FPT & #39 )
Renommer (m.cDestPath m.cFile & #39 .FPT & #39 )
(a Gauche(m.cFileSrc,
Len(m.cFileSrc)-4) & #39 .FTP & #39 )
Endif
Utiliser (m.cFileSrc) Exclusive
Endif
* & Restaurer FullPath parametre & *
Definir FullPath & cFullPath
** & Resultat de Retour le nombre d'Enregistrement & **
Return (m.nRecs)
EndFunc
Procedure IndexOn
** & Creer des Balises d'Index & *
Parametre cDBF,cKey,cTag,lDeleteTags
Utiliser (m.cDBF) EXCLUSIF A 0 Alias IndexDBF
Selectionnez IndexDBF
Si m.lDeleteTags
SUPPRIMER la BALISE
Endif
INDICE de SUR-cKey TAG & cTag
UTILISATION
EndProc
Procedure SetPath
Parametre cPath
Definir le Chemin d'acces A m.cPath)
EndProc
Procedure FoxCommand
Parametre du ccg
& ccg
EndProc
Function FoxFunction
Parametre cFunc
Private Rtn
Rtn = Eval(m.cFunc)
Return (m.Rtn)
EndFunc
ENDDEFINE
Procedure Ole_Err
** & Poignee DLL erreurs internes & **
Parametre nErr,nLine,cMessage,cPRG
SI (m.nErr=1707)
* & CDX presente pas, OK pour Reessayer & *
Reessayez
Else
MessageBox( m.cMessage Chr(13) Chr(13)
& #39 Erreur# & #39 str(m.nErr,5) Chr(13)
& #39 En Ligne# & #39 Str(m.nLine,5) Chr(13)
& #39 & #39 m de.cPrg chr(13) Chr(13)
& #39 Voir File:OLE_ERR.TXT pour plus de details. & #39
,16, & #39 ERREUR dans VFP_OLE.DLL Module & #39 )
*
* & Dump de la memoire et de l'Etat des fichiers dans un fichier texte.
*
Creer un Curseur OleError (ErrText M(10))
Etat de la Liste des NoConsole De Fichier OLE_STAT.TMP
la Liste de la Memoire * NoConsole De Fichier OLE_MEM.TMP
Append Blank
Remplacer ErrText Avec
Reproduire( & #39 * & #39 ,80) Chr(13) Chr(10)
DTOC(Date()) & #39 & #39 Time()
Chr(13) Chr(10)
nom de padc( & #39 STATUT & #39 ,80, & #39 * & #39 )
Chr(13) Chr(10)
Ajouter Memo ErrText De OLE_STAT.TMP
Remplacer ErrText Avec Chr(13) Chr(10)
nom de padc( & #39 de la MEMOIRE & #39 ,80, & #39 * & #39 )
Chr(13) Chr(10) Addi
Ajouter Memo ErrText De OLE_MEM.TMP
Remplacer ErrText Avec Chr(13) Chr(10)
nom de padc( & #39 & Fin de Erreur & & #39 ,80, & #39 * & #39 )
Chr(13) Chr(10) Addi
Si le Fichier( & #39 OLE_ERR.TXT & #39 )
Copie Memo ErrText A OLE_ERR.TXT Addi
Else
Copie Memo ErrText A OLE_ERR.TXT
Endif
Effacer OLE_STAT.TMP
Effacer OLE_MEM.TMP
*
* & Annuler causes Delphi ou VB pour elever un
* & erreur.
Masquer l'Ecran de la Fenetre
* & La commande ANNULER causes Delphi
* & pour etre en mesure d'intercepter l'erreur.
Annuler
Endif
EndProc
*:EOF(VFP_OLE.PRG)
la Creation de la DLL est tres facile de VFP. Lorsque vous cliquez sur le bouton generer le projet, la & #39 s une option pour creer une DLL OLE. Cliquez simplement sur la DLL OLE bouton radio, puis sur le bouton OK
une Fois que la DLL est construit, la prochaine etape est de vous inscrire avec Windows. Ceci est facilement realise en utilisant REGSVR32.EXE qui est distribue avec Windows 95/98, NT, et VFP. La syntaxe pour l'enregistrement de la DLL est:
REGSVR32 VFP_OLE.DLL
Laissez - & #39 s se connecter
Se connecter a l'aide de la DLL est a peu pres aussi facile que de le compiler. Dans Delphi, vous utilisez le CreateOleObject() la methode, et en VB vous utilisez la fonction CreateObject(). Parce que j'ai l'intuition que la plupart des developpeurs VFP sont probablement plus familier avec VB que Delphi, j'ai utilise uniquement le code VB pour illustrer cette technique.
Private Sub Command1_Click()
& #39 & Declarer la variable pour contenir la reference
Dim VFPOLE Comme Objet
& #39 & Attribuer la reference d'objet a la variable
Definir VFPOLE = CreateObject('VFP_OLE.VFP_OLE_Server')
VFPOLE.FoxCommand _
('Wait Window & #39 l'Execution de la Requete & #39 Nowait')
VFPOLE.FoxCommand ('Select * from Facture' & _
'Ou (Date()-InvDate)>=60' & _
'Dans la Table MyInvAge')
VFPOLE.FoxCommand ('Attendez-Clear')
Si VFPOLE.FoxFunction ('Utilise( & #39 MyInvAge & #39 )')
DoSomething
End if
& #39-la Liberation de la reference
Definir VFPOLE = Rien
End Sub
Vous pouvez utiliser un code similaire a celui, ou, si vous avez des besoins plus precis, vous pouvez ecrire une serie de la Scrp, les compiler dans une APPLICATION ou FXPs, et de les executer a partir de la non-VFP applications a l'aide de la FoxCommand methode, comme ceci:
VFPOLE.FoxCommand('MyApp.APP')
Avec cette DLL, vous avez la possibilite de faire presque tout ce que vous pouvez faire a partir de FoxPro a partir de non-VFP applications. Lorsque vous avez besoin de la puissance de Rushmore, rien ne fonctionne comme un Renard!
& nbsp
Accéder aux données foxpro sans foxpro
By commentfaire
Accéder aux données foxpro sans foxpro : Plusieurs milliers de conseils pour vous faciliter la vie.