Pages: 1
- Sujet précédent - MapBasic: pb de code pour tester si une table est ouverte - Sujet suivant
#1 Wed 23 May 2007 11:25
- didier.bondyfalat
- Participant occasionnel
- Lieu: Nice
- Date d'inscription: 31 Jan 2007
- Messages: 31
MapBasic: pb de code pour tester si une table est ouverte
Bonjour,
Je cherche à écrire une fonction mapbasic très simple qui permet de savoir si une table est déja ouverte.
J'ai écrit le code suivant qui compile :
Code:
Function IsAnOpenTable(tabName As String) As Logical Dim result As String result = "" OnError GoTo errorTrap result = TableInfo(tabName,TAB_INFO_NAME) afterErrorTrap: OnError GoTo 0 IsAnOpenTable= result <> "" errorTrap: Resume afterErrorTrap End Function
J'ai l'erreur 405 lors de l'exécution comme si elle n'était pas récupérée par le "errorTrap"
Si quelqu'un a une idée de ce qui se passe ?
Merci
Hors ligne
#2 Wed 23 May 2007 14:15
- Cartosig
- Participant assidu
- Date d'inscription: 16 Oct 2006
- Messages: 222
Re: MapBasic: pb de code pour tester si une table est ouverte
Bonjour,
votre fonction est un logical, je pense que l'erreur vient de la ligne
Code:
IsAnOpenTable= result <> ""
Déjà je ne connais pas cette syntaxe (mais je ne connais pas tout!) qui consiste a assigner à une fonction la valeur d'une variable si son résultat est différent de vide (peut-être que ça marche mais ça m'interpelle en tout cas).
En tout cas ce qui est sur c'est que TableInfo renvoie une string et que vous essayez de passer cette string dans une fonction dont le type est booléen. Il faut par exemple ajouter une variable logical qui prend la valeur true ou false en fonction du résultat de TableInfo.
Pour vous simplifier la tâche voilà la fonction que j'utilise et qui a fait ses preuves dans toutes mes applis MB :
Code:
'=========IsTableOpen Function IsTableOpen(ByVal TableName As String) As logical Dim a As String IsTableOpen=false OnError Goto TableNotOpened a=TableInfo(TableName,TAB_INFO_NAME) IsTableOpen=True OnError Goto 0 Exit Function TableNotOpened: OnError Goto 0 Exit Function End Function
Dernière modification par Cartosig (Wed 23 May 2007 14:20)
Hors ligne
#3 Wed 23 May 2007 14:31
- ahermange
- Juste Inscrit !
- Date d'inscription: 26 Apr 2006
- Messages: 9
Re: MapBasic: pb de code pour tester si une table est ouverte
autre solution
Code:
Declare function IsTableOpen(ByVal TableName as String) as Logical function IsTableOpen(ByVal TableName as String) as Logical Dim result as Logical Dim i,NombreTable as Integer result = FALSE NombreTable = NumTables() for i=1 to NombreTable if TableInfo(i,TAB_INFO_NAME) = TableName then result = TRUE end if next IsTableOpen = result end function
Dernière modification par ahermange (Wed 23 May 2007 14:31)
Hors ligne
#4 Wed 23 May 2007 16:36
- didier.bondyfalat
- Participant occasionnel
- Lieu: Nice
- Date d'inscription: 31 Jan 2007
- Messages: 31
Re: MapBasic: pb de code pour tester si une table est ouverte
Merci de vos réponses.
Petite précision:
Code:
IsAnOpenTable= (result <> "")
permet d'affecter la valeur booleenne du resultat du test à la variable IsAnOpenTable.
Hors ligne
#5 Wed 23 May 2007 17:50
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: MapBasic: pb de code pour tester si une table est ouverte
...IsAnOpenTable= (result <> "")
permet d'affecter la valeur booleenne du resultat du test à la variable IsAnOpenTable.
Déjà vous avez rajouté des parenthèses par rapport à votre code du début...
Mais même avec ça je doute fort que MapBasic comprenne cette ligne comme vous l'évoquez
Je vérifierai si je trouve le temps mais je n'y crois guère
Hors ligne
#6 Wed 23 May 2007 18:22
- Cartosig
- Participant assidu
- Date d'inscription: 16 Oct 2006
- Messages: 222
Re: MapBasic: pb de code pour tester si une table est ouverte
Je serais preneur d'une vérif aussi , mais après tout avec les parenthèses ça ne paraît pas aberrant.
en tout cas si ça marche c'est sympa a connaître...
Dernière modification par Cartosig (Wed 23 May 2007 18:25)
Hors ligne
#7 Fri 25 May 2007 10:14
- didier.bondyfalat
- Participant occasionnel
- Lieu: Nice
- Date d'inscription: 31 Jan 2007
- Messages: 31
Re: MapBasic: pb de code pour tester si une table est ouverte
Re-bonjour,
Je vous propose un copier coller dans la fenetre MapBasic deMapInfo V7.8 des lignes suivantes :
Code:
Dim ok As Logical Dim s As String s = "toto" ok = s<>"tata" print ok ' affiche T ok = s = "toto" print ok ' affiche T ok = s<>"toto" print ok ' affiche F
Encore merci de vos réponses.
Hors ligne
#8 Fri 25 May 2007 10:47
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: MapBasic: pb de code pour tester si une table est ouverte
Je me rends à l'évidence...
Merci Didier, j'ai grace à toi l'occasion d'apprendre ... et de programmer un peu moins "bourrin" !!
Hors ligne
#9 Thu 17 January 2008 17:46
- pbellum
- Juste Inscrit !
- Date d'inscription: 17 Jan 2008
- Messages: 1
Re: MapBasic: pb de code pour tester si une table est ouverte
Bonjour,
j'ai testé vos codes sous MI 9 ... je n'y arrive pas.
Je fait un test avec un
note IsTableOpen(matable)
si elle est ouverte tout va bien si elle ne l'est pas ... j'ai un message d'erreur
Je ne peux donc pas donner mon instruction d'ouvrir cette table si elle ne l'est pas encore.
Si quelqu'un a un autre boute de code ... ou une autre solution.
J'ai essayé pas mal de chose mais sans succès.
A+
Antoine
Hors ligne
#10 Thu 17 January 2008 22:51
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: MapBasic: pb de code pour tester si une table est ouverte
Bonjour
Ces codes marchent, en adaptant pour pouvoir tester. Par exemple celui de Cartosig donnera 1 si la table est ouverte, sinon 0
Code:
Include "mapbasic.def" Dim TableName as string Declare Sub Main Declare function IsTableOpen(ByVal TableName as String) as Logical Sub Main Dialog width 130 title "ouvert ??" Control edittext position 5 , 5 width 120 height 10 into TableName id 991 Control OKButton Control CancelButton If CommandInfo(CMD_INFO_DLG_OK) Then note IsTableOpen(TableName) call main Else exit sub End If End Sub Function IsTableOpen(ByVal TableName As String) As logical Dim a As String IsTableOpen=false OnError Goto TableNotOpened a=TableInfo(TableName,TAB_INFO_NAME) IsTableOpen=True OnError Goto 0 Exit Function TableNotOpened: OnError Goto 0 Exit Function End Function
Hors ligne
Pages: 1
- Sujet précédent - MapBasic: pb de code pour tester si une table est ouverte - Sujet suivant