#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
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
..."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
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 )
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