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

Printemps des cartes 2024

#1 Mon 03 December 2012 16:37

ebiseau
Participant actif
Date d'inscription: 6 Sep 2010
Messages: 98

Map Basic : ouvrir une table qui a une dimension de string

Bonjour,

J'ai utilisé la fonction FileSaveAsDlg pour permettre d'enregistrer une table sous un autre nom.
dim table_1 as string
table_1=FileSaveAsDlg("","",".tab","emplacement")             'donc table_1 est du genre c:\nom.tab
Puis j'ai ouvert cette table :
ouverture_table="open table "+chr$(34)+table_1+chr$(34)+""
run command ouverture_table
Puis j'ai voulu connaitre la valeur d'un champ :
J'ai commencé par vouloir récupérer le nom de la table :
dim table_nom as string
table_nom=tableinfo(1,tab_info_name)
Et j'ai fini en écrivant ceci :
valeur=table_nom.colonne1

MAIS j'ai alors le message d'erreur suivant : Unrecognized command: ..
Pourquoi et comment rectifier ?
Pourquoi ne veut il pas de table_nom ? A priori parce que c'est un dim string, mais dans mon cas je suis obligé de le dimensionner.

Merci pour votre aide :-)

Hors ligne

 

#2 Thu 13 December 2012 20:38

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: Map Basic : ouvrir une table qui a une dimension de string

Bonjour
Votre "colonne1" est incorrect
Faire référence à une colonne d'une table peut se faire de 3 façons
table_name.column_name    world.Country
table_name.col#    world.COL2
table_name.col( SmallInt )     world.COL(i)
Bon courage

Hors ligne

 

#3 Fri 14 December 2012 08:59

ebiseau
Participant actif
Date d'inscription: 6 Sep 2010
Messages: 98

Re: Map Basic : ouvrir une table qui a une dimension de string

Merci pour votre réponse

Hors ligne

 

#4 Thu 07 November 2013 16:26

Nicolas Szlapka
Participant actif
Lieu: NPDC
Date d'inscription: 20 Dec 2006
Messages: 107

Re: Map Basic : ouvrir une table qui a une dimension de string

Bonjour

J'ai quelques inquiétudes sur le rapport entre le "chemin" ou le nom d'une table et la variable de type String qui peut lui être associée, notamment dans un FileSaveASdlg.
J'ai déjà cherché des éléments de réponse ici et , mais cela ne me permet pas de comprendre à 100% et de résoudre mon problème. Je sèche un peu.

J'explique :

Le processus que je fais commence par l'enregistrement d'une sélection en tant que table, celle-ci étant ouverte dans la foulée.
Je passe donc par :

Code:

dim savetable as string
savetable = FileSaveASdlg("C:\", "x", "tab","Enregistrer")   'x est remplacé par le nom qu'on va donner à cette table
if savetable <> "" then
commit table Selection as savetable
open table savetable as Exemple

Jusque là, tout va bien. Je sais que la variable savetable correspond au chemin complet qui mène à la table en question (de C:\dossier\... jusqu'à ...\sous dossier\nomtable.tab). Je sais aussi que cet alias est très utile, car le nom choisi pour la table lors de son enregistrement n'est pas toujours le même.
Bref. C'est dans la suite que ça se corse un peu.

Je veux que des éléments de la table soient assemblés selon le même identifiant. C'est le processus réalisé via Table > Fusionner des objets depuis une colonne. J'ai récupéré les lignes de code dans la FMB.
Dans ce processus, on peut créer une nouvelle table d'après la table Exemple qui est ouverte.
Cette nouvelle table sera nommée Assemblage :

Code:

Create table "Assemblage" (CODE Char(2), ... , POP Float) file "C:\dossier\...\sous dossier\Assemblage.tab" type native Charset "WindowsLatin1"
Create Object As Union From Exemple Into Table Assemblage Group by CODE Data CODE=CODE, ... ,POP=sum(POP)

Je veux que la table soit enregistrée dans le même répertoire que son modèle, dont le chemin est sous-entendu dans savetable.
Ce qui me fait donc réfléchir sur l'utilité/l'utilisation de savetable.
Peut-on "fractionner" la variable savetable dans le FileSaveASdlg ?
De sorte que l'on ait par exemple une variable chemin qui part de "C:\" jusqu'à "sous dossier\" et une autre qui correspond au nom de la table...?
De cette manière je pourrais peut-être réutiliser ces variables pour l'enregistrement de Assemblage ? Notamment derrière "file", dans le code correspondant à la fusion.

J'espère être assez clair... smile
Si quelqu'un a compris mon souci et peut me renseigner, je l'en remercie d'avance.
(si ça se trouve, je me plante complètement dans la façon de faire) big_smile


Nicolas

Hors ligne

 

#5 Fri 08 November 2013 11:08

Nicolas Szlapka
Participant actif
Lieu: NPDC
Date d'inscription: 20 Dec 2006
Messages: 107

Re: Map Basic : ouvrir une table qui a une dimension de string

J'ai trouvé réponse à ma question en tombant sur ce sujet de Forum SIG.
Le terme PathToDirectory$() m'a été très utile.

J'ai cherché dans le guide et l'aide de MB où j'ai trouvé les significations des fonctions :

PathToDirectory$(), qui renvoit le chemin "C:\dossier\sous dossier\"
PathToFileName$(), qui renvoit à "nom_table.tab"
PathToTableName$(), qui renvoit à "nom_table"

Je n'avais jamais utilisé ces fonctions. C'est exactement ce dont j'avais besoin !

Donc pour le suivi, je vais tout de même montrer le résultat qui semble fonctionner (si ça peut aider quelqu'un) :

Code:

sub agregation
    dim chemin, nom_table_agreg, assembler As String
    chemin = PathToDirectory$(enregistrement)    'dim enregistrement as string est indiqué en tête de programme
    nom_table_agreg = "Assemblage"
    assembler = PathToDirectory$(enregistrement)+ PathToTableName$(nom_table_agreg) + ".tab"

    Create Table "Assemblage" (CODE Char(2), POP Float) file assembler TYPE NATIVE Charset "WindowsLatin1"
    Create Map For Assemblage CoordSys Earth Projection 3, 33, "m", 3, 46.5, 44, 49, 700000, 6600000 Bounds (-112761336.458, -100805724.408) (114161336.458, 126116948.507)
    Create Index On Assemblage (CODE)
    Add Map Layer Assemblage
    Set Map Layer Assemblage Editable On
    Create Object As Union From Exemple Into Table Assemblage Group by CODE Data CODE=CODE, POP=sum(POP)
    Set Map Layer Assemblage Display Global  Global Pen (2,2,0)   Global Brush (1,16777215,16777215) Editable Off
    Commit table Assemblage interactive
end sub

La table Assemblage apparaît bien dans le même répertoire que la table Exemple. Quel bonheur. smile

Bonne journée à tous !

Dernière modification par Nicolas Szlapka (Fri 08 November 2013 14:25)


Nicolas

Hors ligne

 

Pied de page des forums

Powered by FluxBB