#1 Thu 12 April 2007 14:08
- dujalont
- Juste Inscrit !
- Date d'inscription: 15 Jun 2006
- Messages: 4
MapBasic:Routine blocée par un mesage
Bonjour,
Lorsque l'on ouvre une table MapInfo dont certains champs sont indexes et que le fichier Nom_de_la_table.IND a été supprimé, MapInfo retourne un message:
"Impossible d'accéder à l'index pour le champ X de la table toto."
J'ai réalisé une routine MapBasic dont l'objectif est de réaliser une série d'opérations sur un ensemble de tables.
Le problème est qu'à chaque fois que la routine tente d'ouvrir une Table dont le fichier .IND a été supprimé, le message apparait et bloc l'exécution de la routine.
Il y a-t-il un moyen de supprimer ce message automatiquement?
Pour info MapInfo ne considère pas l'absence du fichier .IND comme une erreur. La fonction OnError ne fonctionne donc pas.
Dernière modification par dujalont (Thu 12 April 2007 14:09)
Hors ligne
#2 Thu 12 April 2007 14:16
- Cartosig
- Participant assidu
- Date d'inscription: 16 Oct 2006
- Messages: 222
Re: MapBasic:Routine blocée par un mesage
Avez-vous implémenté dans vos procédures / fonctions des fonctions MB de gestion d'erreur?
i.e. :
en tête de procédure / fonction
Code:
OnError Goto err
et à la fin de la procédure / fonction
Code:
err: Note "un message"
Si ce n'est pas le cas, rentrez ceci dans vos procédure / fonction :
Code:
Sub ... Dim ... OnError Goto err ... la procédure / fonction ... Goto exits err: Entrez ici l'action que vous desirez produire en cas d'erreur, dans votre cas vous pouvez laisser vide ou mettre un Goto pour retourner a l'endroit souhaité de la procédure / fonction exits: End Sub
Dernière modification par Cartosig (Thu 12 April 2007 14:18)
Hors ligne
#3 Thu 12 April 2007 14:55
- dujalont
- Juste Inscrit !
- Date d'inscription: 15 Jun 2006
- Messages: 4
Re: MapBasic:Routine blocée par un mesage
Oui tout à fait, j'utilise bien la fonction de gestion d'erreur "OnError".
Mais cela ne fonctionne pas dans ce cas. En effet MapInfo ne gère pas l'absence du fichier .IND comme une erreur. D'ailleurs la routine MapBasic n'e "plante" pas, elle est juste bloquée le temps que le message reste affiché. Une fois que l'on a fait disparaitre le message en cliquant sur "OK", la routine poursuit sont exécution.
Mais étant donnée la quantité importante de Tables MapInfo que la routine traite, je ne peux pas rester devant l'ordinateur pour cliquer sur "OK" à chaque fois que le message apparait.
Le type message que retourne MapInfo est similaire a celui qui apparait lorsque l'on utilise la fonction "Note" de MapBasic.
Merci tout de même pour cette réponse
Hors ligne
#4 Thu 12 April 2007 15:58
- Cartosig
- Participant assidu
- Date d'inscription: 16 Oct 2006
- Messages: 222
Re: MapBasic:Routine blocée par un mesage
ha oui dans ce cas ca va etre plus compliqué a résoudre...
une piste possible : chercher du coté des "Handler" Sub, qui pourraient peut etre permettre de détecter par exemple le passage de la fenetre carte de MI au second plan...
et de réagir à celà...
mais c'est sans garantie !
Hors ligne
#5 Thu 12 April 2007 16:14
- jasper
- Participant occasionnel
- Lieu: Paris
- Date d'inscription: 7 Mar 2007
- Messages: 44
Re: MapBasic:Routine blocée par un mesage
Bonjour.
Pour ma part, je ne suis pas trop convaincu pour l'utilisation d'un handler dans ce cas, mais c'est une piste à tester, et si effectivement le programme est basic cela peut être efficace !
Ce que je ferais, c'est lire le .Tab avant l'ouverture sous MapInfo et rechercher à l'intérieur de celui-ci le mot clef "Index", pour ensuite, s'il est trouvé, vérifier avec FileExists() que le fichier .Ind existe bien avant son ouverture...
Ce n'est pas direct, plutôt artisanal, mais ni compliqué et sans surprises...
Cordialement,
Jasper.
Hors ligne
#6 Thu 12 April 2007 17:03
- dujalont
- Juste Inscrit !
- Date d'inscription: 15 Jun 2006
- Messages: 4
Re: MapBasic:Routine blocée par un mesage
Merci à tous pour vos solutions.
J'ai testé la méthode de Jasper et elle répond bien à mes besoins.
Je pense l'utiliser dans ma routine.
Didier.
Hors ligne
#7 Thu 12 April 2007 17:09
- dujalont
- Juste Inscrit !
- Date d'inscription: 15 Jun 2006
- Messages: 4
Re: MapBasic:Routine blocée par un mesage
Pour info, voici le bout de scripte qui me permet d'appliquer cette méthode.
Include "Mapbasic.def"
Dim sErreur,sTexteLigne as String
Dim lLeFichierPeutEtreOuvert as Logical
OnError Goto LogErreur
Print chr$(12)
lLeFichierPeutEtreOuvert = True
If Not FileExists("C:\DOCUMENTS\TEMP\Sans_nom.ind")
Then
Print "pas de fichier ind"
Open File "C:\DOCUMENTS\TEMP\Sans_nom.TAB"
For Append
Access Read Write
As # 1
Do Until EOF(1)
Line Input # 1, sTexteLigne
If sTexteLigne like "%Index%"
Then
Print "le fichier ne peut pas etre ouver"
lLeFichierPeutEtreOuvert = False
Exit Do
End If
Loop
Close File # 1
End If
If lLeFichierPeutEtreOuvert
Then
open table "C:\DOCUMENTS\TEMP\Sans_nom.TAB" as toto
End if
LogErreur:
sErreur = Error$()
Print sErreur
Hors ligne
#8 Thu 12 April 2007 20:54
- Damien BEAUSEIGNEUR
- Participant assidu
- Lieu: meyzieu
- Date d'inscription: 5 Sep 2005
- Messages: 425
Re: MapBasic:Routine blocée par un mesage
Bonsoir
Il reste encore une autre solution.
Il faut modifier le fichier .tab .
En passant par un éditeur de texte de type notepad ou autre, vous verrez tout le descriptif des tables, il suffit d'enlever l'information index derrière le nom des champs qu'elle concerne.
Pour éviter toute mauvaise manipulation, il est préférable de faire un copie de sauvegarde de l'ancien descriptif de la table.
Cordialement.
Hors ligne