Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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

 

Pied de page des forums

Powered by FluxBB