Bienvenue! Inscrivez-vous et rejoignez notre communauté :)
  • Login:

Bienvenue sur Forum SIG - Systèmes d'Information Géographique et Géomatique.

Bienvenue sur le forumSIG. S'il s'agit de votre première visite, assurez vous de faire une recherche préalable dans les FAQ SIG. Vous devez vous inscrire avant de pouvoir poster.

Affichage des résultats 1 à 15 sur 15
  1. #1

    Date d'inscription
    février 2012
    Messages
    21

    Par défaut Non Résolu : Copier contenu d'une table

    Bonjour,

    Débutante avec MapBasic, je ne parviens pas à copier le contenu d'une table dans une autre.
    J'ai une table, que je souhaiterai dupliquer, afin de mettre à jour la seconde et pas la première.
    Je pensais qu'en créant une table temporaire :
    Code:
     Select * From sNom_Maillage Into sNom_Analyse_Bis NoSelect
    Je pourrais par la suite la mettre à jour : Update sNom_Analyse_Bis Set "VP" = rVPM 
    Mais cela me met à jour les deux tables pas seulement sNom_Analyse_Bis .
    et la commande:
    CREATE TABLE sNom_Analyse_Bis Using sNom_Maillage
    Me copie uniquement les colonnes non pas le contenu

  2. #2

    Date d'inscription
    août 2011
    Localisation
    Paris
    Emploi
    Chargé de mission SIG
    Âge
    30
    Messages
    503

    Par défaut

    En fait, comme lors de l'utilisation courante de MapInfo, lorsqu'une sélection est effectuée sur une table, les données de cette sélection sont liées à la table d'origine.

    Donc pour créer un duplicata d'une table et que les données ne soient plus liées, il faut "enregistrer la table sous" un autre nom ou un autre dossier.

    Je t'oriente en Mapbasic vers les commandes "Commit Table" et "Open Table" pour enregistrer ta table puis l'ouvrir pour ensuite la modifier.

  3. #3

    Date d'inscription
    février 2012
    Messages
    21

    Par défaut

    Merci de la réponse, j'avais déjà songé à utiliser le Commit mais en vain, je l'utilise à plusieurs reprises dans mon code et il fonctionne mais dans ce cas ci il n'y a rien à faire cela modifie les deux tables à chaque fois :

    Je veux copier sNom_Maillage dans sNom_Analyse_Bis
    Pour cela je sauvegarde la table sNom_Analyse_Bis pour ensuite la parcourir et faire un Update dessus
    Code:
    Select * From sNom_Maillage Into sNom_Analyse_Bis NoSelect
    			Commit Table sNom_Analyse_Bis
    
    			sTableRequete = Get_Random_Name()
    
    		Select * From sNom_Analyse_Bis Into sTableRequete NoSelect
    				Fetch First From sTableRequete

  4. #4

    Date d'inscription
    mars 2008
    Localisation
    Nancy
    Emploi
    Sans
    Messages
    4 416

    Par défaut

    Salut,

    -->
    Code:
    Commit Table sNom_Analyse_Bis Interactive
    Si tu veux faire un Update aprés
    A+
    Joël

  5. #5

    Date d'inscription
    février 2012
    Messages
    21

    Par défaut

    Cela ne change rien du tout :s
    Cela modifie toujours la table d'origine.
    Code:
    Select * From sNom_Maillage Into sNom_Analyse_Bis NoSelect
    			Commit Table sNom_Analyse_Bis Interactive
    
    			sTableRequete = Get_Random_Name()
    
    		Select * From sNom_Analyse_Bis Into sTableRequete NoSelect
    				Fetch First From sTableRequete 
    			
    				While not EOT(sTableRequete)
    					AliasID = sTableRequete + ".ID_MAILLE"
    					AliasVPL = sTableRequete + ".VPL"
    					rVL = AliasVPL
                                   rVPM=((rp_VN*rVN)+(rp_VL*rVL))*rp_Fperte*rFperte	
    			
    sRequete = "Update "+ sTableRequete+" Set VP = "+rVPM+ " Where RowId = " + AliasID
    			Run Command sRequete
    *******
    EDIT
    *******
    Code:
    			Fetch Next From sTableRequete
    				Wend
    Call Kill_Table("", sTableRequete)
    Dernière modification par Ellimac60 ; 04/04/2012 à 13h22. Motif: Fusion automatique des messages postés à la suite

  6. #6

    Date d'inscription
    mars 2008
    Localisation
    Nancy
    Emploi
    Sans
    Messages
    4 416

    Par défaut

    Et en fermant la table initiale --> Close Table sNom_Maillage
    Ou ne pas sauvegarder les changements occasionnés dans ta table initiale --> Rollback Table sNom_Maillage

  7. #7

    Date d'inscription
    février 2012
    Messages
    21

    Par défaut

    J'ai tout essayé, en changeant de place le Rollback Table sNom_Maillage et le Commit

    Code:
    Select * From sNom_Maillage Into sNom_Analyse_Bis NoSelect
    
    				Fetch First From sNom_Analyse_Bis 
    			
    				While not EOT(sNom_Analyse_Bis)
    					AliasID = sNom_Analyse_Bis + ".ID_MAILLE"
    					AliasVPL = sNom_Analyse_Bis + ".VPL"
    
    sRequete = "Update "+ sNom_Analyse_Bis+" Set VP = "+rVPM+ " Where RowId = " + AliasID
    			Run Command sRequete
    			Rollback Table sNom_Maillage
    			Commit Table sNom_Analyse_Bis  
    			
    
    			
    			'Update sNom_Analyse_Bis Set "VP" = rVPM
    			
    			Fetch Next From sNom_Analyse_Bis
    				Wend
    Je vais essayer en fermant la table mais ça m'arrange pas du tout du tout !
    Merci en tout cas

  8. #8

    Date d'inscription
    août 2011
    Localisation
    Paris
    Emploi
    Chargé de mission SIG
    Âge
    30
    Messages
    503

    Par défaut

    Il faut enregistrer ta table sNom_Analyse_Bis puis fermer la sélection qui s'appelle sNom_Analyse_Bis, puis ouvrir la table enregistrée comme sNom_Analyse_Bis.

    De cette manière, ta table ne sera plus considérée comme une sélection de sNom_Maillage.

    Et ensuite continuer ton code sur un "Update" etc.

  9. #9

    Date d'inscription
    février 2012
    Messages
    21

    Par défaut

    Je suis vraiment désolée d'insister mais vraiment cela ne fonctionne pas, il me dit maintenant que la table sNom_Analyse_Bis n'est pas ouverte
    Code:
    Select * From sNom_Maillage Into sNom_Analyse_Bis NoSelect
    				Commit Table sNom_Analyse_Bis ' Enregistrement de la table sNom_Analyse_Bis
    			Close Table sNom_Maillage
    
    			If IsTableOpen(sNom_Analyse_Bis) Then
    				Print "Table ouverte"
    			End If
    sTableRequete = Get_Random_Name()
    			
    		Select * From sNom_Analyse_Bis Into sTableRequete NoSelect
    				Fetch First From sTableRequete 
    			
    				While not EOT(sTableRequete)
    					AliasID = sTableRequete + ".ID_MAILLE"
    					AliasVPL = sTableRequete + ".VPL"
    					rVL = AliasVPL
    sRequete = "Update "+ sTableRequete+" Set VP = "+rVPM+ " Where RowId = " + AliasID
    			Run Command sRequete
    			Commit Table sNom_Analyse_Bis
    			 
    			
    			Fetch Next From sTableRequete
    				Wend
    	Call Kill_Table("", sTableRequete)
    	Open Table sNom_Maillage
    Je ne vois pas comment fermer la selection, d'habitude je ferme les Select en Killant les Tables mais la je ne souhaite pas la supprimer, je souhaite juste dissocier les deux tables.

  10. #10

    Date d'inscription
    mars 2008
    Localisation
    Nancy
    Emploi
    Sans
    Messages
    4 416

    Par défaut

    Que dis -->
    Print "Table ouverte"
    le message d'erreur arrive avec
    Select * From sNom_Analyse_Bis Into sTableRequete NoSelect
    C'est ça

  11. #11

    Date d'inscription
    février 2012
    Messages
    21

    Par défaut

    Il n'affiche pas " table ouverte" ce qui indique donc que la table n'est pas ouverte.
    Et il me dit " la table sNom_Analyse_Bis n'est pas ouverte " à la ligne :
    Select * From sNom_Analyse_Bis Into sTableRequete NoSelect

  12. #12

    Date d'inscription
    août 2011
    Localisation
    Paris
    Emploi
    Chargé de mission SIG
    Âge
    30
    Messages
    503

    Par défaut

    Code:
    Dim rep As String
    
    rep = ApplicationDirectory$()
    
    Select * From sNom_Maillage Into sNom_Analyse_Bis NoSelect
    
    Commit Table sNom_Analyse_Bis As rep+"sNom_Analyse_Bis.TAB" TYPE NATIVE Charset "WindowsLatin1"
    
    Close Table sNom_Analyse_Bis Interactive
    
    Open Table rep+"sNom_Analyse_Bis.TAB" Interactive

  13. #13

    Date d'inscription
    février 2012
    Messages
    21

    Par défaut

    Je me lasse pas du sentiment que l'on ressent quand cela fonctionne
    Merci beaucoup. Par contre pouvez-vous m'expliquer très brièvement ce qu'est :
    Code:
    ApplicationDirectory$()
    Merci encore
    *******
    EDIT
    *******
    et c'est normal qu'à la fermeture de MapInfo il ne me demande pas d'enregistrer ni la table sNom_Maillage et ni la table sNom_Analyse_Bis ?
    D'habitude il le fait !
    Dernière modification par Ellimac60 ; 04/04/2012 à 15h25. Motif: Fusion automatique des messages postés à la suite

  14. #14

    Date d'inscription
    mars 2008
    Localisation
    Nancy
    Emploi
    Sans
    Messages
    4 416

    Par défaut

    ApplicationDirectory$( ) function
    Purpose
    Returns a string containing the path from which the current MapBasic application is executing. You
    can call this function from the MapBasic Window in MapInfo Professional.
    Syntax
    ApplicationDirectory$( )
    Return Value
    String expression, representing a directory path.
    Description
    By calling the ApplicationDirectory$( ) function from within a compiled MapBasic application, you
    can determine the directory or folder from which the application is running. If no application is
    running (e.g., if you call the function by typing into the MapBasic window), ApplicationDirectory$( )
    returns a null string.
    To determine the directory or folder where the MapInfo Professional software is installed, call the
    ProgramDirectory$( ) function.
    Example
    Dim sAppPath As String
    sAppPath = ApplicationDirectory$( )
    ' At this point, sAppPath might look like this:
    '
    ' "C:\MAPBASIC\CODE\"

    Si celà t'interesse:
    Page 92 de --> http://reference.mapinfo.com/softwar...cReference.pdf

    Je me lasse pas du sentiment que l'on ressent quand cela fonctionne
    D'accord avec toi

  15. #15

    Date d'inscription
    août 2011
    Localisation
    Paris
    Emploi
    Chargé de mission SIG
    Âge
    30
    Messages
    503

    Par défaut

    Citation Envoyé par SkåL Voir le message
    Il faut enregistrer ta table sNom_Analyse_Bis
    Code:
    Commit Table sNom_Analyse_Bis As rep+"sNom_Analyse_Bis.TAB" TYPE NATIVE Charset "WindowsLatin1"
    Si vous ne précisez pas où il faut sauvegarder la table, MapInfo va se contenter d'enregistrer les modifications. J'ai ajouté l'argument pour enregistrer la requête en tant que table.

    puis fermer la sélection qui s'appelle sNom_Analyse_Bis,
    Code:
    Close Table sNom_Analyse_Bis Interactive
    J'ai fermé la requête pour ne plus interférer par la suite.

    puis ouvrir la table enregistrée comme sNom_Analyse_Bis.
    De cette manière, ta table ne sera plus considérée comme une sélection de sNom_Maillage.

    Et ensuite continuer ton code sur un "Update" etc.
    Code:
    Open Table rep+"sNom_Analyse_Bis.TAB" Interactive
    Et j'ouvre la table enregistrée précédemment, qui n'a plus aucun lien avec la table maillage.

    La fonction ApplicationDirectory$() récupère le chemin du répertoire dans lequel est exécuté le .mbx et du coup, sauvegarde la table sNom_Analyse_Bis à cet endroit.

 

 

Discussions similaires

  1. [ArcGIS 9.x] Copier-coller dans la table attributaire
    Par CarineC dans le forum Assistance Technique
    Réponses: 22
    Dernier message: 27/01/2010, 08h15
  2. [MapInfo 8.x] Sélection d'objets contenu dans un objet d'une autre table
    Par Arnaudc86 dans le forum Assistance Technique
    Réponses: 23
    Dernier message: 10/07/2009, 08h23
  3. [AutoCAD LT 2005] Copier le contenu de la barre de commande
    Par lalaprout dans le forum Assistance Technique
    Réponses: 3
    Dernier message: 17/05/2008, 13h22
  4. [MapBasic 7.x] Copier le contenu d'un fichier txt
    Par sohih dans le forum Programmation
    Réponses: 2
    Dernier message: 18/01/2007, 15h10
  5. [ArcGIS 9.x] Copier/coller des enregistrements dans une table
    Par MacGeol dans le forum Assistance Technique
    Réponses: 2
    Dernier message: 08/09/2005, 10h25

Les tags pour cette discussion

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •