#1 Wed 03 January 2007 17:16
- mathildeharel
- Participant occasionnel
- Date d'inscription: 4 Nov 2005
- Messages: 17
fenêtre mapbasic
Bonjour à tous et bonne année 2007!
voici mes problèmes:
1) je ne connais quasimment rien en visual basic...mais...
2) j'ai créé un script dans lequel je demande l'ouverture d'une table dans un répertoire donné, puis de l'enregister sous un autre répertoire dans une autre projection. Je voudrais répéter cette demande un certain nombre de fois, mais au bout de la quatrième, il m'affiche un message d'erreur:
"(C:\SIG\.....\nom fichier.tab:10)le résultat de l'expression n'est pas un nom de table ou de colonne"
Voici un extrait de mon script:
dim matable as string
matable=fileopendlg("C:\SIG_CRPF\","","TAB","choisir la table HAB_LIN)
open table matable interactive
Map from Hab_lin
dim nom as string
dim nomfinal as string
nomfinal = filesaveasdlg("C:\SIG_CRPF\",nom+"hablin_","TAB","enregistrer le fichier HAB_LIN")
commit table Hab_lin as nomfinal TYPE NATIVE Charset "WindowsLatin1" CoordSys Earth Projection 3, 1002, "m", 0, 46.8, 45.898918964419, 47.696014502038, 600000, 2200000 Bounds (30000, 1600000) (1230000, 2700000)
drop table Hab_lin
matable=fileopendlg("C:\SIG_CRPF\","","TAB","choisir la table BATI ")
open table matable interactive
Map from Bati
nomfinal = filesaveasdlg("C:\SIG_CRPF\",nom+"bati_","TAB","enregistrer le fichier BATI dans le dossier MAPINFO de la commune")
commit table Bati as nomfinal TYPE NATIVE Charset "WindowsLatin1" CoordSys Earth Projection 3, 1002, "m", 0, 46.8, 45.898918964419, 47.696014502038, 600000, 2200000 Bounds (30000, 1600000) (1230000, 2700000)
drop table Bati
matable=fileopendlg("C:\SIG_CRPF\","","TAB","choisir la table BATI_PT")
open table matable interactive
Map from Bati_pt
nomfinal = filesaveasdlg("C:\SIG_CRPF\",nom+"bati_pt_","TAB","enregistrer le fichier BATI_PT")
commit table Bati_pt as nomfinal TYPE NATIVE Charset "WindowsLatin1" CoordSys Earth Projection 3, 1002, "m", 0, 46.8, 45.898918964419, 47.696014502038, 600000, 2200000 Bounds (30000, 1600000) (1230000, 2700000)
drop table Bati_pt
matable=fileopendlg("C:\SIG_CRPF\","","TAB","choisir la table HAB_PT")
open table matable interactive
Map from Hab_pt
nomfinal = filesaveasdlg("C:\SIG_CRPF\",nom+"hab_pt_","TAB","enregistrer le fichier HAB_PT")
commit table Hab_pt as nomfinal TYPE NATIVE Charset "WindowsLatin1" CoordSys Earth Projection 3, 1002, "m", 0, 46.8, 45.898918964419, 47.696014502038, 600000, 2200000 Bounds (30000, 1600000) (1230000, 2700000)
drop table Hab_pt
Merci beaucoup à tous ceux qui voudront bien un peu de temps pour déchiffrer tout cela.
Hors ligne
#2 Wed 03 January 2007 18:36
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: fenêtre mapbasic
Bonjour,
Pas le temps de tout lire mais juste un moyen de vérifier les valeurs que prend nomfinal :
intercaler avant chaque "commit" un "print nomfinal"
Hors ligne
#3 Mon 08 January 2007 09:38
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3193
- Site web
Re: fenêtre mapbasic
Bonjour
Je ne connais rien à MapInfo mais:
dim matable as string
matable=fileopendlg("C:\SIG_CRPF\","","TAB","choisir la table HAB_LIN)
open table matable interactive
Map from Hab_lin
dim nom as string
dim nomfinal as string
1) Utiliser en tête de module:
option explicit
ce qui oblige la déclaration des variables, ceci évite bien des erreurs.
2) Déclarer toutes vos variables en tête de procédure ou de fonction
dim matable as string
dim nom as string
dim nomfinal as string
ensuite le code.
3) Je ne suis pas un spécialiste de VBA (mais plutôt de VB6) et une chose me surprend :
nomfinal = filesaveasdlg("C:\SIG_CRPF\",nom+"hablin_","TAB","enregistrer le fichier HAB_LIN")
La variable "nom" est affectée quand ???
A la lecture de votre code il me semble qu'elle vaut toujours "" (chaine vide). A moins que celle ci soit affectée par la fonction filesaveasdlg, qui si j'ai bien compris comprends 4 paramètres:
- chemin d'enregistrement
- nom du fichier
- extention
- texte de la boite de dialogue.
d'autre part la répétition du code pourrait être évitée avec une boucle de type do while ... Loop.
Si le problème n'est toujours pas résolu (la solution de Maurice est un debug efficace), donnez moi la doc de la fonction filesaveasdlg et je tenterai de vous répondre plus précisément La nature et l'écriture du troisième paramètre étant surprenante pour du VB. Car nom + "bati_" si nom vaut toto donne "totobati_ " (j'aurais plutôt vu bati_toto) de plus à l'opérateur de concaténation "+" on préfére & pour les chaines de caractères question de lisibilité.
A+
Christophe
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#4 Mon 08 January 2007 13:20
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: fenêtre mapbasic
Pour faire ce job (ouverture et reprojection, au même endroit ou pas, d'une ou plusieurs tables) j'avais commis l'outil ci-joint. Mais que cela ne vous empêche pas de continuer à développer
Je crois que Christophe met le doigt sur le problème: c'est quoi cette variable nom ?? et sur la "philisophie" du script: les mbx permettent de faire des boucles, donc autant se servir de cette possibilité...
Hors ligne
#5 Fri 02 July 2010 08:46
- hugoroussaffa
- Participant occasionnel
- Lieu: Verdun en lauraguais
- Date d'inscription: 19 Oct 2008
- Messages: 38
- Site web
Hors ligne