Requête sur FoxPro via OLEDB & SEEK [Résolu]

Therian 7 Messages postés mardi 21 novembre 2006Date d'inscription 3 juin 2009 Dernière intervention - 4 févr. 2009 à 09:52 - Dernière réponse : Therian 7 Messages postés mardi 21 novembre 2006Date d'inscription 3 juin 2009 Dernière intervention
- 6 févr. 2009 à 18:35
Bonjour,

 
Voilà plusieurs jours que je cherche une solution, parcourant
atoutfox et foxprofr et tombant sur plusieurs messages proposant des pistes intéressantes. Cependant, vu mon niveau sur FoxPro (qui au
début de la semaine était inexistant), je ne parviens pas à tester
certaines de ces solutions.
 
Voici mon problème :

J'ai une page asp (sur un serveur différent de celui de Foxpro)
qui doit afficher des données depuis la plus importante des tables (dbf
de 776MB) du serveur Foxpro. Quand j'effectue la requête avec l'outil
de Foxpro, le résultat arrive en quelques secondes. En revanche,
sur la page asp, la même requête met 4 min, ce qui est beaucoup pour un affichage intranet.

La table dbf a bien des index, mais je me demandais si ils
étaient bien utilisé via OLEDB. Je suis notamment tombé sur ce post où il est question d'utiliser les commandes en natif comme le SEEK. 

J'ai passé mon après midi hier à essayer de comprendre comment cela
fonctionne mais je n'y parviens pas et l'aide sur l'utilisation du VFP
OLEDB (v6) dont j'entends parler partout reste introuvable.

 
Pourriez vous m'éclaircir sur ce SEEK (ou sur une autre méthode pour optimiser ma requête) ?

 
Merci d'avance.

 
Ci-dessous voici un extrait du code de ma page :

 
strconn = "Provider=VFPOLEDB.1;Data
Source=\\192.168.xx.xx\ste01\;Mode=ReadWrite|Share Deny
None;Password='';Collating Sequence=MACHINE"

' >>>J'ai essayé avec et sans le collating, j'ai le même temps
 Set conn = CreateObject("ADODB.Connection")

 conn.ConnectionString = strconn

 conn.ConnectionTimeout = 300

 conn.Open

 
 Set Rs2 = server.CreateObject("ADODB.Recordset")

 strRs2 ="select a.dateoper, a.serie, a.user, a.numero, a.nbrm3 from GB_HIST a where operation = '60' and fichier = ''"

 ' >>>il existe des index sur fichier et sur operation

 Set Rs2 = conn.Execute(strRS2)
Afficher la suite 

Votre réponse

5 réponses

michelatoutfox 834 Messages postés mardi 5 octobre 2004Date d'inscription 7 mai 2013 Dernière intervention - 6 févr. 2009 à 14:40
+3
Utile
non, le msm c'est un fichier de package à joindre à un install si on veut y inclure l'install du vfpoledb.

l'aide de vfpoledb est en ligne sur MSDN
(http://msdn.microsoft.com/en-us/library/aa976965(VS.71).aspx)

tu trouveras aussi des exemples sur le Visual FoxPro Wiki avec entre autres un exemple pour des pages ASP dans lequel cette question du collate est abordée.
(http://fox.wikis.com/wc.dll?Wiki~VFPOleDBProvider)

pour le collate, il faut comprendre que ce n'est pas "machine" ou rien : il y a de nombreuses séquences de collate (les plus fréquentes en France sont MACHINE, GENERAL, FRENCH) et il te faut savoir sur laquelle tes index ont été construits. Dans 1 premier temps, vérifie les perfs avec GENERAL puis avec FRENCH.
Si ça ne change rien, il te faudra utiliser la fonction IdxCollate() pour retrouver cette séquence dans les tag d'index.

Si ton utilitaire te permet de lancer des commandes Fox et d'en lire le résultat, alors SET("COLLATE") te renvoie le collate courant.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de michelatoutfox
Therian 7 Messages postés mardi 21 novembre 2006Date d'inscription 3 juin 2009 Dernière intervention - 4 févr. 2009 à 10:20
Commenter la réponse de Therian
michelatoutfox 834 Messages postés mardi 5 octobre 2004Date d'inscription 7 mai 2013 Dernière intervention - 6 févr. 2009 à 12:02
0
Utile
Bonjour,


si mes souvenirs sont bons, l'aide est disponible dans le pack d'install de VFPOLEDB, que tu trouveras sur le site de Microsoft. (http://www.microsoft.com/downloads/details.aspx?FamilyId=E1A87D8F-2D58-491F-A0FA-95A3289C5FD4&displaylang=en)

Sur le fond du problème, VFPOLEDB utilise les index exactement de la même façon que VFP.
Je ne serais pas étonné que le problème vienne en effet de la séquence de Collate. Il faudrait vérifier quelle est la séquence qui a été utilisée lors de la création des index, et essayer avec la même séquence dans ta connectstring.
J'ai déjà vu des dégradations de perf de cette importance (et même pire) à cause de ces séquences de collate.

Qu'appelles-tu "l'outil de FoxPro"? tu veux parler de l'interface de développement?
Commenter la réponse de michelatoutfox
Therian 7 Messages postés mardi 21 novembre 2006Date d'inscription 3 juin 2009 Dernière intervention - 6 févr. 2009 à 13:49
0
Utile
Pour l'aide, c'est le fichier msm? (si oui, je ne sais pas trop comment le lire)

Pour le collate, comment je l'ai mis, j'ai essayé avec et sans et cel an'a eu aucun effet. Comment puis-je faire pour vérifier la séquence de collate ?

L'utilitaire que j'ai sur foxpro est un petit logiciel fourni par l'éditeur du logiciel fait en foxpro où je peux voir les dbf, leur structure, leurs index et tester des lignes de commandes, mais je n'y ai pas vu d'information sur le collate.
Commenter la réponse de Therian
Therian 7 Messages postés mardi 21 novembre 2006Date d'inscription 3 juin 2009 Dernière intervention - 6 févr. 2009 à 18:35
0
Utile
Merci beaucoup.

Effectivement, ça marche beaucoup mieux avec GENERAL (5s).

Encore merci.
Commenter la réponse de Therian

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.