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!

#31 Wed 21 April 2010 11:54

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

Par contre je viens d'avoir une idée....

J'ai tenté les 3 lignes de codes dans un nouveau fichier .mb vierge...

Et là...................................... ça fonctionne, il ne me met pas de message comme quoi il ne reconnait pas la commande...

Ces 3 lignes là sont donc bonnes, et il doit y avoir une interférence avec autre chose, mais QUOI??????????????????

Hors ligne

 

#32 Wed 21 April 2010 12:02

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

Non, ça ne me créer aucun champ dans ma table...

Hors ligne

 

#33 Wed 21 April 2010 13:54

Damien BEAUSEIGNEUR
Participant assidu
Lieu: meyzieu
Date d'inscription: 5 Sep 2005
Messages: 425

Re: [MapBasic 9.x] Créer un champ avec un rowid

Ok donc les choses à vérifier 1 que le champ existe. S'il existe on ne touche pas au contenu
Si le champ n'existe pas .
S'il existe un champ du nom "ColumnID" dans la table nomtable
Utilise la fonction Columninfo pour récupérer le nom de tous les champs de la table nomtable
et numcols pour avoir le nombre de champ dans la table y compris les champs temporaires.

on crée le champ columnID et la mise à jour du champ par rowid aura lieu sur ColumnID

Code:

add Column nomtable (ColumnID  Integer)  'Créer un champ temporaire dans la table nomtable
update nomtable set ColumnID = rowid

NB on peut remplacer ColumnID par ID c'est juste pour l'exemple.

Hors ligne

 

#34 Wed 21 April 2010 14:16

Spacejo
Membre
Lieu: Nancy
Date d'inscription: 17 Aug 2008
Messages: 2511

Re: [MapBasic 9.x] Créer un champ avec un rowid

Cyril Chat a écrit:

Non, ça ne me créer aucun champ dans ma table...


Cette réponse faite suite à ma question?
Je comprends mieux ---> Comme dit Damien il faut une colonne pour récupérer l'ID.
Ma ligne de code du tout début n'est que l'incrémentation de cette colonne.
J'aurais dut la tourner comme ceci:

Code:

update nom_de_Ta_Table set Nouveau_Champs_Créer_Pour_recevoir_ID = Rowid

Hors ligne

 

#35 Wed 21 April 2010 14:36

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

Déjà merci pour vos aides... Tous me parait correct cette fois-ci, mais malheureusement, j'ai quand même 2 messages d'erreurs...

Je vais tout reprendre à zéro, et vous tiens au courant. Merci à vous.

Hors ligne

 

#36 Thu 22 April 2010 09:11

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

Bonjour,

Donc hier j'ai étudié le problème de la colonne Rowid.

Lorsque j'utilise le code que vous m'avez fourni, ci-dessous, j'ai encore un message d'erreur qui me dit "found... while searching for...". il trouve donc un élément mais cherche autre chose.

Code:

add Column nomtable (ColumnID  Integer)

Dans un tuto, j'ai trouvé cette syntaxe :

Code:

Add Column Nom de la table (colonne[Type de la colonne])
{Values const[,const]/ From Table_Source
Set to expression
[where {colonne de destination= colonne source/whithin/Contains/Intersects}]
[dynamic]}

D'aprés ce que j'ai compris, c'est que le premier code, n'est utilisable qu'avec les éléments qui suivent dans le deuxième...

Alors ma question est : Est-ce quelqu'un a déjà réussit à utiliser le premier code en le faisant fonctionné???

Merci

Hors ligne

 

#37 Thu 22 April 2010 11:02

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

J'ai réussi à trouver une parade pour Add column, je suis passé par du SQL et un run command.... Voici mon code

Code:

'on crée un champ temporaire dans la table nomtable
    
    Cmd = "ALTER TABLE nomtable ADD ID Integer"
    Run command cmd
    Update nomtable Set ID = RowId
    
'on fait la boucle sur les enregistrements de la table choisie
    Fetch First from nomtable
    Do while not EOT(nomtable)

    idPolygone = nomtable.ID

'on crée une table temporaire à partir du polygone sélectionné
     SELECT * FROM nomtable WHERE ID = idPolygone into monPolygone

Malheureusement j'ai toujours le même message d'erreur pour "idPolygone = nomtable.ColumnID". J'ai toujours commande inconnue (Unrecognized command)... Donc le problème ne venait pas de mon champ...

Malheureusement aussi, quand j'exécute le .mbx dans MapInfo, il me dit 'La table nomtable n'est pas ouverte' et ceux quand il arrive à la commande...

Quelqu'un aurait il une idée d'ou cela peut venir???

Merci

Dernière modification par Cyril Chat (Thu 22 April 2010 11:18)

Hors ligne

 

#38 Thu 22 April 2010 22:54

Damien BEAUSEIGNEUR
Participant assidu
Lieu: meyzieu
Date d'inscription: 5 Sep 2005
Messages: 425

Re: [MapBasic 9.x] Créer un champ avec un rowid

NB avec alter TABLE la colonne n'est pas temporaire.

réessaye avec add Column nomtable (ColumnID  Integer) values 0.

Par contre comment ce fait-il que la table nomtable soit fermée?
Est-elle bien ouverte avant l'alter TABLE?, ou l'add Column ...

retrouve nous le nom du fichier de la table nomtable pour savoir si elle est ouverte.

Hors ligne

 

#39 Fri 23 April 2010 09:16

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

Bonjour,

Je n'obtiens pas de message d'erreur cette fois-ci avec votre proposition... Mais malheureusement, il faut toujours qu'il y ait un problème quelques parts!!! MapInfo me dit : "Impossible de mettre à jour la colonne ID : il s'agit d'une colonne dérivée"...

Savez vous ce que cela signifie????

Hors ligne

 

#40 Fri 23 April 2010 09:38

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

Re: [MapBasic 9.x] Créer un champ avec un rowid

Pour avoir la colonne dérivée directement remplie avec le numéro de ligne:

Code:

add column nomtable (ColumnID integer) from nomtable set to rowid

nb: je pense qu'il serait temps de faire une synthèse car je ne suis même pas sûr que cette colonne temporaire vous soit utile...

Hors ligne

 

#41 Fri 23 April 2010 09:45

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

Maintenant j'ai un nouveau message : "Impossible d'inclure la clause Datatype si la colonne existante est mise à jour"...

Je ne sais pas si ce champ est utile ou non, mais je suis les conseils que l'on me donne, car cela fait 2 semaines que je suis bloqué sur cette "BIPPPPP", qu'on j'aimerais bien trouvé une solution...

Hors ligne

 

#42 Fri 23 April 2010 09:50

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

Synthèse

Lorsque j'exécute mon code (ci-dessous), je n'ai aucun message d'erreur, donc tout va bien pour cela... Sauf que je dois avoir un problème au niveau de la table monPolygone, car le pochoir se fait bien sur l'entité sélectionné, mais le zoom ne se fait pas... On dirait qu'il prend l'ensemble des entités pour faire le zoom, donc cela ne m'avance à rien...

On m'a donc conseillé d'utilisé un ID unique pour chaque entité et de faire référence à celui ci pour qu'il zoom bien sur l'entité sélectionné...

Ce qui est le plus bizard, c'est qu'il reconnait bien monPolygone pour le pochoir et pas pour le zoom...

Voici le code d'origine, avant d'inclure le champ ID :

Code:

'on fait la boucle sur les enregistrements de la table choisie
    Fetch First from nomtable
    Do while not EOT(nomtable)

'on crée une table temporaire à partir du polygone sélectionné
     SELECT * FROM nomtable into monPolygone

'on crée une copie de la table d'où le polygone est sélectionné
    DIM maTable AS string
    maTable = selectioninfo(SEL_INFO_TABLENAME)

'on rajoute une couche avec le polygone sélectionné et on zoome sur celle-ci
    Add Map window WindowID(IdMap) Layer monPolygone
    SET Map Window WindowID(IdMap) Zoom Entire Layer monPolygone

'on défini le polygone en pochoir
    Fetch First from monPolygone
    SET Map Clipping Object monPolygone.obj

'on dessine dans le Layout un cadre permettant l'affichage de la carte
    create frame into window WindowID(IdLayout) (0.63, 3.48) (41.37, 29.1) Pen(1,1,0) brush(1, 16777215, 16777215) FROM WINDOW WindowID(IdMap) fillframe on

'on supprime la couche avec le polygone sélectionné
    Remove Map Window WindowID(IdMap) Layer monPolygone
'on ferme la table monPolygone
    Close table monPolygone

[...]

Fetch next from nomtable
Loop

Merci

Hors ligne

 

#43 Fri 23 April 2010 09:57

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

J'avais oublié, l'ID devait aussi m'aider à résoudre le problème de la géométrie, car lorsque je fais la boucle, il me fait bien le nombre de mise en page égal au nombre d'enregistrement, mais me garde toujours la géométrie de la première mise en page...

Hors ligne

 

#44 Fri 23 April 2010 10:02

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

Re: [MapBasic 9.x] Créer un champ avec un rowid

Cyril Chat a écrit:

..."Impossible d'inclure la clause Datatype si la colonne existante est mise à jour"...


C'est parce qu'en mémoire il reste trace des tentatives précédentes
Si vous recommencez dans une nouvelle session ou que vous changez le nom de colonne "ColumnID" par "bidule", ça marchera
Pour le bout de code (qui n'est pas un code intégral...!!):
SELECT * FROM nomtable into monPolygone sélectionne tous les enregistrements de la table nomtable et pas UN polygone
Déjà à partir de là votre commentaire 'on crée une table temporaire à partir du polygone sélectionné n'est pas respecté...

Hors ligne

 

#45 Fri 23 April 2010 10:05

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

D'accord!!! Je pensais que le SELECT * permettait de sélectionner tous les champs de la table pour l'enregistrement sélectionné...

Merci

Hors ligne

 

#46 Fri 23 April 2010 10:07

Damien BEAUSEIGNEUR
Participant assidu
Lieu: meyzieu
Date d'inscription: 5 Sep 2005
Messages: 425

Re: [MapBasic 9.x] Créer un champ avec un rowid

Donc pour poursuivre vu qu'il ne veux pas le type de donnée...

Code:

add column nomtable (ColumnID) from nomtable set to rowid

cela devrait être suffisant.

Pour Maurice l'idée consiste à réaliser une table temporaire n'ayant que le polygone choisit pour permettre un zoom dessus.
c'était la valeur défini initialement.

Code:

'on défini le polygone en pochoir
    Fetch Rec Z from monPolygone
    SET Map Clipping Object monPolygone.obj

Hors ligne

 

#47 Fri 23 April 2010 10:17

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

Pour la création du champ Rowid, impeccable, ça marche, sans aucun message d'erreur!!! sa soulage un peu!!!

Maintenant le "    idPolygone = nomtable.dede" est toujours en commande non reconnue, donc je ne peux pas tenter de sélectionner le polygone avec l'ID créé...

Hors ligne

 

#48 Fri 23 April 2010 10:26

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

Re: [MapBasic 9.x] Créer un champ avec un rowid

D'accord, mais regardez où nous en sommes dans les échanges: entre ici et chez nos voisins on doit en être à 10 sujets ouverts et pas loin de 100 posts sad
Quand on multiplie les mini questions sur des bouts de code sans contexte par le nombre d'incompréhension inhérent à chaque sujet...ça fait lourd !!
Pour Damien: je crois avoir compris, mais si on a réussi à "isoler" un objet polygone pour en faire le pochoir...on peut utiliser le même pour l'ajouter à la fenêtre carte et faire le zoom dessus, non ?? (si j'avais un code exhaustif sous les yeux je n'aurais pas à me poser cette question sad)

Hors ligne

 

#49 Fri 23 April 2010 10:41

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

Le code exhaustif a été mis dans la synthèse plus haut... En ce qui concerne nos voisins, cela n'a rien à voir car personne n'a répondu a ce problème mais à celui du compteur d'enregistrement...

Je ne vois pas ce que je peux faire pour être plus claire...

Je vous remet le code :

Code:

DIM idPolygone as Integer

add column nomtable (dede integer) from nomtable set to rowid

'on fait la boucle sur les enregistrements de la table choisie
    Fetch First from nomtable
    Do while not EOT(nomtable)

    idPolygone = nomtable.dede

'on crée une table temporaire à partir du polygone sélectionné
     SELECT * FROM nomtable WHERE dede = idPolygone into monPolygone

'on crée une copie de la table d'où le polygone est sélectionné
    DIM maTable AS string
    maTable = selectioninfo(SEL_INFO_TABLENAME)

'on rajoute une couche avec le polygone sélectionné et on zoome sur celle-ci
    Add Map window WindowID(IdMap) Layer monPolygone
    SET Map Window WindowID(IdMap) Zoom Entire Layer monPolygone

'on défini le polygone en pochoir
    Fetch First from monPolygone
    SET Map Clipping Object monPolygone.obj

'on dessine dans le Layout un cadre permettant l'affichage de la carte
    create frame into window WindowID(IdLayout) (0.63, 3.48) (41.37, 29.1) Pen(1,1,0) brush(1, 16777215, 16777215) FROM WINDOW WindowID(IdMap) fillframe on

'on supprime la couche avec le polygone sélectionné
    Remove Map Window WindowID(IdMap) Layer monPolygone
'on ferme la table monPolygone
    Close table monPolygone

Le problème vient donc de idPolygone = nomtable.dede => commande non reconnue

Dernière modification par Cyril Chat (Fri 23 April 2010 10:45)

Hors ligne

 

#50 Fri 23 April 2010 11:40

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

Re: [MapBasic 9.x] Créer un champ avec un rowid

Un code exhaustif est un code qui se compile ...
Sur la base de ce que vous avez fourni, voilà un code qui fonctionne (en supposant ouverts au départ une fenêtre carte et une mise en page - vide- en A3 paysage)

Code:

Dim idPolygone, idMap, idLayout, k, i as Integer
Dim essai as String

for k=1 to NumWindows()
If WindowInfo(k,3)=1 then idMap=WindowID(k)
ElseIf WindowInfo(k,3)=3 then idLayout=WindowID(k)
End If
Next

add column nomtable (dede integer) from nomtable set to rowid
i=1
'on fait la boucle sur les enregistrements de la table choisie
    Fetch First from nomtable
    Do while not EOT(nomtable)

    idPolygone = nomtable.dede

'on crée une table temporaire à partir du polygone sélectionné
     SELECT * FROM nomtable WHERE dede = idPolygone into monPolygone

'on crée une copie de la table d'où le polygone est sélectionné
    DIM maTable AS string
    maTable = selectioninfo(1)

'on rajoute une couche avec le polygone sélectionné et on zoome sur celle-ci
    Add Map window idMap Layer monPolygone
    SET Map Window idMap Zoom Entire Layer monPolygone

'on défini le polygone en pochoir
    Fetch First from monPolygone
    SET Map Clipping Object monPolygone.obj

'on dessine dans le Layout un cadre permettant l'affichage de la carte
Set CoordSys Layout Units "cm"
create frame into window IdLayout (1, 1) (41, 28.7) Pen(1,1,0) brush(1, 16777215, 16777215) From Window IdMap fillframe on

'on supprime la couche avec le polygone sélectionné
    Remove Map Window IdMap Layer monPolygone
'on ferme la table monPolygone
    Close table monPolygone
' on enregistre la mise en page en image
essai="test"+i+".png"
Save Window IdLayout As essai Type "PNG"

Fetch Next from nomtable
i=i+1
Loop

Hors ligne

 

#51 Fri 23 April 2010 11:52

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

Désolé, je n'avais pas compris ça dans ce sens...

Je vous l'ai envoyé par mail tout à l'heure, mais je le met pour les autres :

Code:

    include "mapbasic.def"

'---------------------------------------------------------------------------
'--- déclaration des procédures et variables globales
'---------------------------------------------------------------------------
    DECLARE SUB main
    DECLARE SUB MEPA
    DECLARE FUNCTION MakeOpenTabsList$(ByVal OnlyMappable As Logical) as STRING

    DIM j, k, l, m, z, cpt, nomcarte, totale, selection, idPolygone as INTEGER
    DIM NbrFenetre,IdMap,Idlayout,Idlegend, nbchamp as SMALLINT 
    DIM tbl_list, field_list, nomtable, nomchamp as STRING

'---------------------------------------------------------------------------
'---------------------------SUB PRINCIPALE----------------------------------
'---------------------------------------------------------------------------
SUB main
    create buttonpad "Facil'Atlas" as
        pushbutton calling MEPA icon 78 helpmsg "Facil'Atlas\nFacil'Atlas"
    fixed
END SUB
    
'---------------------------------------------------------------------------
'---------------------------SUB FACIL'ATLAS---------------------------------
'---------------------------------------------------------------------------
SUB MEPA

'***********************************Ouvre une fenetre MEP dans MI***********************************
    Layout width 12.6808 Height 7.5869 position (0, 0)
    Set coordsys Layout units "cm" set window WindowID(IdLayout) printer orientation Landscape Copies 1 Papersize 8

'************************cherche les ID de la fenetre MAP, layout et legende************************
    NbrFenetre = NumWindows()
    For cpt=1 to NbrFenetre Step 1

        if WindowInfo(cpt,WIN_INFO_TYPE) = WIN_MAPPER then
            IdMap=cpt
            print "Carte : "+str$(IdMap)
        end if

        if WindowInfo(cpt,WIN_INFO_TYPE) = WIN_LAYOUT then
            Idlayout=cpt
            print "Mise en page : "+str$(Idlayout)
        end if

        if WindowInfo(cpt,WIN_INFO_TYPE) = WIN_CART_LEGEND then
            Idlegend =cpt
            print "Légende : "+str$(Idlegend )
        end if
    Next

'******************récupère la table choisie parmit les tables ouvertes dans MI************************
'on sélectionne la table sur laquelle sera effectué les manipulations    
    tbl_list = ""

    tbl_list = MakeOpenTabsList$(TRUE)
    If tbl_list = "" Then
        Note "Pas de tables ouvertes"
            Exit Sub
    End If

    Dialog title "Tables"
        Control StaticText Title "Choisissez la table :" Position 10, 10
         Control ListBox value j into j
           Position 10, 20 Width 120 Height 140
           Title tbl_list 
        Control OKbutton 
           Title "Confirmez le choix" 

    nomtable = TableInfo (j, TAB_INFO_NAME)

'on récupère les champs de la table choisie
    nbchamp = NumCols(j)

    For k=1 to nbchamp
    field_list= field_list + ColumnInfo (nomtable, "COL"+k, COL_INFO_NAME) + ";"
    Next

    Dialog title "Champs"
           Control StaticText Title "Choisissez le champ :" Position 10, 10
           Control ListBox value l into l
           Position 10, 20 Width 120 Height 140
           Title field_list
           Control OKbutton
           Title "Confirmez le choix"
  
'    nomchamp = ColumnInfo(l, COL_INFO_NAME)

'*******************************************Crée un cadre carte*******************************************
DIM idPolygone as Integer

'on crée un champ ID dans la table nomtable
    add column nomtable (dede integer) from nomtable set to rowid

'on fait la boucle sur les enregistrements de la table choisie
    Fetch rec z from nomtable
    z = 1
'    Do while not EOT(nomtable)

'    idPolygone = nomtable.dede

'on crée une table temporaire à partir du polygone sélectionné
     SELECT * FROM nomtable into monPolygone

'on crée une copie de la table d'où le polygone est sélectionné
    DIM maTable AS string
    maTable = selectioninfo(SEL_INFO_TABLENAME)

'on rajoute une couche avec le polygone sélectionné et on zoome sur celle-ci
    Add Map window WindowID(IdMap) Layer monPolygone
    SET Map Window WindowID(IdMap) Zoom Entire Layer monPolygone

'on défini le polygone en pochoir
    Fetch rec z from monPolygone
    SET Map Clipping Object monPolygone.obj

'on dessine dans le Layout un cadre permettant l'affichage de la carte
    create frame into window WindowID(IdLayout) (0.63, 3.48) (41.37, 29.1) Pen(1,1,0) brush(1, 16777215, 16777215) FROM WINDOW WindowID(IdMap) fillframe on

'on supprime la couche avec le polygone sélectionné
    Remove Map Window WindowID(IdMap) Layer monPolygone
'on ferme la table monPolygone
    Close table monPolygone

'************************paramètre la taille de la fenetre carte pour calculer l'echelle************************
    DIM echelle as STRING  
  
      Set Distance Units "cm" 
      Set Paper Units "cm"
   
    echelle= (MAPPERINFO(WindowID(IdMap), MAPPER_INFO_SCALE))/100

    create text into Window WindowID(IdLayout) "Echelle : 1cm = "& echelle &"m" (28.5, 28) (33.5, 28) Font("Arial", 0, 12, BLACK)

'*************************************dessine dans le Layout une flèche Nord*************************************
    create point into Window WindowID(IdLayout) (40.3, 4.5) symbol(42, 0, 40, "MapInfo Arrows", 0, 0)

'*********************************affiche les sources des données dans le layout*********************************
    create text into Window WindowID(IdLayout) "Sources : IGN - Données : ONEMA, DDT" (41.37, 29.1) (41.37, 29.1) Font("Arial", 1, 7, BLACK) Angle 90

'*******************************crée un cadre permettant l'insertion d'une légende*******************************
    create Frame into Window WindowID(IdLayout) (33.18, 16.5) (41.37, 29.1) Pen(1,1,0) brush(1, 16777215, 16777215)FROM WINDOW WindowID(Idlegend) fillframe on

'****************************************Dessine les bordures sur la MEP****************************************
    DIM valeur as STRING

'on dessine dans le Layout les bordures
    create Line into Window WindowID(IdLayout) (0.63, 0.6) (41.37, 0.6) Pen(2,2,0) 'en haut
    create Line into Window WindowID(IdLayout) (0.63, 0.6) (0.63, 29.1) Pen(2,2,0) 'a gauche
    create Line into window WindowID(IdLayout) (0.63, 29.1) (41.37, 29.1) Pen(2,2,0) 'en bas
    create Line into window WindowID(IdLayout) (41.37, 29.1) (41.37, 0.60) Pen(2,2,0) 'a droite
    create Line into window WindowID(IdLayout) (0.63, 3.48) (41.37, 3.48) Pen(2,2,0) 'le titre

'on insère dans le Layout un titre et sous titre
    create text into window WindowID(IdLayout) " sTitre " (1, 1.2) (41, 1.2) Font("Arial", 1, 12, BLACK)
    create text into window WindowID(IdLayout) " sSousTitre " (1, 1.8) (41, 1.8) Font("Arial", 1, 10, BLACK)
    
'on inclue la valeur du champs dans le commentaire
    valeur = l.nomtable
    create text into window WindowID(IdLayout) " Cartographie de la commune : "& valeur &" " (1, 2.7) (41, 2.7) Font("Arial", 0, 10, BLACK)

'on compte le nombre d'enregistrement présent dans le champ sélectionné
    selection = TableInfo(z,TAB_INFO_NROWS)
    totale = TableInfo(nomtable,TAB_INFO_NROWS)
    create text into window WindowID(IdLayout) " Carte n° "& selection &" / "& totale &" " (1, 2) (41, 2) Font("Arial", 0, 10, BLACK)

'***************************mise en place du logo*******************************************
    DIM DDT_logo as INTEGER
    DIM bool1 as LOGICAL
    DIM c as INTEGER

'on ouvre la table du logo
    open table "C:\Documents and Settings\cyril.chat.DDE-79\Bureau\Stage\Doc_WOR\Bloc_Marque_DDT.TAB"

'on insertion du logo en configurant sa fenetre
    bool1 = FALSE
    For c=1 to numWindows()
        If WindowInfo(c, WIN_INFO_NAME) = "logo" THEN 
        bool1= TRUE 
        End if
    Next
    If bool1 = FALSE Then
    map from Bloc_Marque_DDT width 2.5 units "cm" height 2.5 units "cm" min 
    End if
'on profite que cette fenêtre soit au premier plan pour la renommer
    Set Window FrontWindow() Title "logo"
'on récupère l'ID de la fenetre logo
    ddt_logo = WindowID(FrontWindow())

'on crée le cadre logo dans la mise en page en le placant
    Create Frame into Window WindowID(IdLayout) (1, 28.7) (4, 25.7) Pen(1,1,0) brush(1, 16777215, 16777215) from Title "logo" FillFrame On

'***************************utilisation de l'impression MI pour imprimer directement en PDF*******************************************
'on paramètre l'imprimante pour une impression en PDF
    Set Window FrontWindow() Printer 
        Name "PDFCreator" Orientation Landscape Copies 1 Papersize 8
    Printwin window WindowID(IdLayout) interactive

    Fetch next from nomtable
    Loop

END SUB

'---------------------------------------------------------------------------
'------------FUNCTION permettant de connaitre les tables ouvertes-----------
'---------------------------------------------------------------------------
FUNCTION MakeOpenTabsList$(ByVal OnlyMappable As Logical) As String
      Dim i, iNumOpen as smallint
      Dim sTabList as string
        
    iNumOpen = NumTables()
        For i = 1 to iNumOpen
            If OnlyMappable Then

                  If TableInfo(i,TAB_INFO_MAPPABLE) and TableInfo(i,TAB_INFO_TYPE) <> TAB_TYPE_IMAGE Then 
                sTabList = sTabList + tableinfo(i,TAB_INFO_NAME) + ";"
                  End If
            Else
              sTabList = sTabList + tableinfo(i,TAB_INFO_NAME) + ";"
            End If
        Next
    MakeOpenTabsList$ = sTabList
END FUNCTION

Hors ligne

 

#52 Fri 23 April 2010 15:23

Damien BEAUSEIGNEUR
Participant assidu
Lieu: meyzieu
Date d'inscription: 5 Sep 2005
Messages: 425

Re: [MapBasic 9.x] Créer un champ avec un rowid

tout s'explique NomTable est un string et il n'est pas considéré comme une table ouverte.
NomTable doit être un alias pour que cela fonctionne...

on va y arriver...

Pour Maurice: compte tenu des méthodes de zoom disponible, si on ne l'isole pas dans une table, on doit récupérer les limites de l'objet et calculer la valeur exacte du zoom à utiliser, c'est possible mais on se complique la vie.
c'est plus simple de zoomer complètement sur une couche.

C'est une idée à rentrer dans la liste des demandes d'amélioration, la possibilité de zoomer sur un objet de la carte, ça limiterai ce genre de casse tête.


NB ça aide beaucoup de voir la déclaration des variables pour la réalisation de ce genre de problème.

Hors ligne

 

#53 Fri 23 April 2010 15:32

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

Ca aurait été trop beau, ........................................................ mais toujours le même problème de commande...

Merci de la proposition...

Hors ligne

 

#54 Fri 23 April 2010 15:37

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

Désolé, je me suis trompé de problème... Le problème de la table ouverte est résolu...

Maintenant j'aimerais savoir pourquoi, j'ai systématiquement "UNrecognized command" sur "idPolygone = nomtable.dede".

Merci pour l'aide

Hors ligne

 

#55 Mon 26 April 2010 14:53

Damien BEAUSEIGNEUR
Participant assidu
Lieu: meyzieu
Date d'inscription: 5 Sep 2005
Messages: 425

Re: [MapBasic 9.x] Créer un champ avec un rowid

Bonjour

Je ne vois plus qu'une solution.

rajoute une ligne de code avant l'ajout d'un champ temporaire

select * from nomtable into matable

ensuite remplace nomtable par matable dans le code qui suit.

Hors ligne

 

#56 Mon 26 April 2010 15:09

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [MapBasic 9.x] Créer un champ avec un rowid

Merci pour la proposition, mais le problème est enfin résolu!!!!!!

Voici le code :

Code:

DIM idPolygone as Integer

'on crée un champ ID dans la table nomtable
    add column nomtable (ID integer) from nomtable set to rowid

    
'on fait la boucle sur les enregistrements de la table choisie
    i = 1
        Fetch First from nomtable
    Do while not EOT(nomtable)

'on crée une table temporaire à partir du polygone sélectionné
     SELECT * FROM nomtable WHERE rowid = i into monPolygone    

'on crée une copie de la table d'où le polygone est sélectionné
    DIM maTable AS string
    maTable = selectioninfo(SEL_INFO_TABLENAME)

'on rajoute une couche avec le polygone sélectionné et on zoome sur celle-ci
    Add Map window WindowID(IdMap) Layer monPolygone
    SET Map Window WindowID(IdMap) Zoom Entire Layer monPolygone

'on défini le polygone en pochoir
    Fetch First from monPolygone
    SET Map Clipping Object monPolygone.obj

'on dessine dans le Layout un cadre permettant l'affichage de la carte
    create frame into window WindowID(IdLayout) (0.63, 3.48) (41.37, 29.1) Pen(1,1,0) brush(1, 16777215, 16777215) FROM WINDOW WindowID(IdMap) fillframe on

'on supprime la couche avec le polygone sélectionné
    Remove Map Window WindowID(IdMap) Layer monPolygone
'on ferme la table monPolygone
    Close table monPolygone

Merci à tous

Hors ligne

 

Pied de page des forums

Powered by FluxBB