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

GEODATA DAYS 2024

#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

didier.bondyfalat a écrit:

...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 wink, 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 smile ... 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

 

Pied de page des forums

Powered by FluxBB