IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Paradox Discussion :

Importer un fichier texte dans une table avec champ Memo


Sujet :

Paradox

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 35
    Points : 24
    Points
    24
    Par défaut Importer un fichier texte dans une table avec champ Memo
    Bonjour,

    J'importe, sous Paradox v10, un fichier texte ascii délimité dans une table.
    J'obtiens un message d'erreur : Capability not supported.
    J'ai fait des tests et cela vient du fait qu'un champ Mémo est présent dans la table.

    Comment doit être le fichier texte au niveau des données du champ Mémo pour que cela marche ?

    J'ai essayé plusieurs choses :
    - Chaine entre guillemets (ex. : "toto";"texte pour le champ Mémo";1)
    - Chaine vide (ex. : "toto";"";1)
    - ne rien mettre (ex. : "toto";;1)

    Mais rien n'a fonctionné...
    Je voudrais arriver à importer des données dans le champ Mémo ou au pire ne pas les importer mais ne pas avoir de message et que ça marche...

    Merci !

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 130
    Points : 162
    Points
    162
    Par défaut
    SI les assistants ne passent pas tu peux toujours le faire par un petit programme OPAL.
    Mais bon si c'est la suite de ton message précédent, le plus simple est de corriger la table directement.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    Merci pour ta réponse.

    Malheureusement je ne connais pas OPAL...
    Perso, je développe sous Visual FoxPro.
    Je comptais donc faire toutes les manips nécessaires dans un environnement "familier" et exporter ça en format texte, puis importer au final mon texte dans mon DB à l'aide de Paradox.
    Oui effectivement c'est la suite de mon message précédent. Que veux-tu dire par "corriger la table directement" ?
    C'est quand même bizarre cette histoire de champ Memo...

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 130
    Points : 162
    Points
    162
    Par défaut
    Faire ce que l'on t'a conseillé :

    - passer ton champ + en I
    - faire tes modis (ajout de record...) directement dans la table (tu as donc Pdox 10)
    - une fois cela fait, repasser ton champ I en +
    - tha's all !

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    Le problème, c'est que je ne connais pas assez Paradox pour faire ça alors que je ferais ça sans pb sous Visual Foxpro...
    C'est pour ça que j'en reviens à mon pb initial, pourquoi cette erreur par rapport aux champs mémo ??
    Encore Merci

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 130
    Points : 162
    Points
    162
    Par défaut
    Salut

    En Pdox 10 :

    a) Passer le champ + en I :

    Fichier/Ouvrir/table tu choisis la table
    Menu Format/Restructurer la table
    Tu remplace le + de la colonne Type par un I (i majuscule) pour le champ
    Tu valides en cliquant sur le bouton Enregistrer

    b) Effectuer les corrections :

    Tu ouvres à nouveau ta table
    Pour pouvoir insérer il faut passer en mode édition
    Pour cela tu appuis sur <F9>, il t'affiche "Edition" en bas d'écran

    Pour insérer un enregistrement
    Tu appuis sur <INS> et tu remplis ton enregistrement.
    Tu as donc maintenant libre accès au champ précédemment autoincrémenté.
    Tu peux répéter ces insertions à loisir
    Pour mettre à jour la partie mémo il suffit de double-cliquer sur le champ (copier /coller est bien sûr disponible). Pour sortir de la vue mémo tu peux fermer la vue mémo (raccourci clavier <Maj><F2> = Entrer vue mémo, <F2>=sortir vue mémo)

    Pour arrêter tes saisies il suffit de fermer la table

    c) Revenir au champ autoincrémenté

    Tu refais le a) en remettant + à la place de I
    Ta numérotation automatique repartira de la plus grande valeur de la table.

    C'est fini

    Pour des soucis d'import avec l'assistant j'avoue ne pas m'embêter. Dès que cela ne passe pas directement je le fais en OPAL, un langage simple qui dispose de tout le nécessaire pour ce type de traitement. En gros un textStream te permet d'accéder aux fichiers en lecture (et écriture si besoin) très facilement (open, readline, writeline, commit, close...), un TCursor te permet d'accéder à tes table en lecture et écriture très facilement (open, edit, postrecord, locate, scan, close...), quelques variables string au milieu pour manipuler ce qui doit l'être, éventuellement une variable de type memo pour préparer le formatage d'un mémo (on passe sans souci d'une string à un mémo et vice versa) et hop... Mais dans ton cas c'est clairement plus de boulot.

    Bon courage, si tu butes sur un point n'hésites pas.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    Merci BEAUCOUP !
    Effectivement la meilleure méthode est d'utiliser Paradox.
    Je me suis penché sur l'aide en ligne + tes précieux conseils.

    Je vais (encore) poser quelques questions basiques mais dont je n'ai pas de réponses :
    - Comment réindexer une table (regénerer les index) ?
    - A quoi correspondent les fichiers *.XG0, *.XG1, *.YG0, *.YG1 ?
    - Est-il possible de faire une requête ou une opération d'import entre 2 tables qui ne sont pas dans le même espace de travail ?

    Encore un GRAND Merci !
    Steph

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 130
    Points : 162
    Points
    162
    Par défaut
    Salut
    Comment réindexer une table (regénerer les index) ?
    Nombreuses possibilités, en OPAL avec Reindex() ou ReindexAll() par exemple mais sinon en interactif en restructurant la table et en la compactant (case à cocher) ou encore avec les outils de réparation de tables interne à Paradox (Menu outils/Récupération de table) ou externe (nombreux programmes delphi notamment)

    A quoi correspondent les fichiers *.XG0, *.XG1, *.YG0, *.YG1 ?
    Aux index secondaires d'une table Paradox. Ce sont en fait des tables paradox normales mais avec une extension différente
    Est-il possible de faire une requête ou une opération d'import entre 2 tables qui ne sont pas dans le même espace de travail ?
    Bien sûr les alias permettent cela facilement. Je sens que tu commences à prendre goût à Paradox
    Paradox est même capable de te faire une requête hétérogène cross bases (tu interroges une table ORACLE en liaison avec une table SQLServeur... )

    Si tu veux découvrir un outil formidable, lis donc mon tutorial : http://www.clairinfo.fr/scripts/trace.php?noart=1

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    Merci pour le tutorial !
    Juste 2 dernières questions :

    - J'ai réussi, via l'interface, à importer une table dans une autre depuis 2 espaces de travail différents, mais comment faire pour effectuer une requête SQL sur 2 tables situées dans 2 répertoires de travail différents ?
    J'ai essayé un truc du style:
    select * from :work:table1 where.... mais ça marche pas..

    - Pour réindexer une table, je créé un script avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    var 
      tblVar Table
      pdoxTbl String
    endVar
    pdoxTbl = "matable.db"
     
    tblVar.attach(pdoxTbl)
    if tblVar.lock("Exclusive") then  ; lock de la table en exclusif.
      tblVar.reIndex("N° compte")     ; Rebuild index.
      tblVar.unLock("Exclusive")      ; Unlock the table.
      msgInfo("OK", "Table " + pdoxTbl + " réindexée.")
    else
      msgStop("Sorry", "Can't lock " + pdoxTbl + " table.")
    endIf
    mais lorsque j'exécute, je n'ai pas de msgbox qui s'affiche et la réindexation n'a semble t-il pas été faite, comme si le code n'avait pas été exécuté.

    MErci !

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 130
    Points : 162
    Points
    162
    Par défaut
    Salut

    Exemple de requête sur des tables atteintes par des alias (donc potentiellement dans des répertoires différents)
    Dans cet exemple B1 et B2 sont 2 alias BDE pointant sur des répertoires distincts, le reste est classique. Mais les alias peuvent pointer sur une ou plusieurs bases client serveur...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T1.CodeClient,T1.Nom,SUM(T2.Duree)
    FROM ":B1:Client.db" T1 LEFT JOIN ":B2:Interv.db" T2
    ON (T1.CodeClient=T2.CodeClient)
    GROUP BY CodeClient,Nom
    Tu peux faire la même chose en QBE (Query By Example) un autre système de requête disponible en Paradox (Il y a 2 parseurs de requêtes dans le BDE)

    Pour la réindexation essaie de nommer simplement tes index sans caractère particulier (°, espace etc...) C'est le nom de l'index que tu passes à Reindex() sinon essaie plutôt ReindexAll() qui traitent tous les index de la table

    Voici un exemple simple qui fonctionne (la table client ayant un index secondaire nommé idx_nom) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    method pushButton(var eventInfo Event)
    Var
    	T Table
    EndVar
     
    T.attach(":B1:Client.db")
    if not T.Reindex("idx_nom") then
    	MsgStop("Erreur !","Impossible de réindexer")
    else
    	MsgInfo("Message :","Ok ! Le traitement est terminé")
    endif
    T.unAttach()
     
    endMethod
    Bon il est très facile de contruire un utilitaire qui laisse l'utilisateur choisir un alias et qui balaye toutes les tables de cet alias pour les réindexer complètement.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    Encore une fois, Merci !
    Un dernier point (vraiment le dernier cette fois...) par rapport à la reindexation des tables et à l'exécution d'un code en général :
    Je n'arrive pas exécuter du code (sans passer par un formulaire).
    Je fais "file>New>script" et je colle le code, par exemple celui que tu m'as passé.
    Je suppose qu'il faut enlever le method et endmethod car le code ne fait partie d'aucune méthode. Je tape F8 et là il me dit erreur de syntaxe sur le T de "T.attach", alors que T est bien défini "T TABLE".
    C'est surement très simple mais j'y arrive pas..
    Bon il est très facile de contruire un utilitaire qui laisse l'utilisateur choisir un alias et qui balaye toutes les tables de cet alias pour les réindexer complètement
    Si tu as le code qui fait ça, c'exactement ce qu'il me faudrait...

    Merci
    Steph

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 130
    Points : 162
    Points
    162
    Par défaut
    Salut
    Je n'arrive pas exécuter du code (sans passer par un formulaire).
    Je fais "file>New>script" et je colle le code, par exemple celui que tu m'as passé.Je suppose qu'il faut enlever le method et endmethod car le code ne fait partie d'aucune méthode. Je tape F8 et là il me dit erreur de syntaxe sur le T de "T.attach", alors que T est bien défini "T TABLE".
    C'est surement très simple mais j'y arrive pas.
    Il faut laisser method run... endmethod, ensuite tu exécutes (F8 par exemple). tu peux également jouer un script au sein d'un code OPAL avec la méthode play (regarde l'aide). Le script suivant fonctionne par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    method run(var eventInfo Event)
    Var
      T TABLE
    EndVar
     
    T.attach(":B1:Client.db")
    IF NOT T.Reindex("idx_nom") then
      MsgStop("Erreur !","Impossible de réindexer")
    else
      MsgInfo("Message :","Ok ! Le traitement est terminé")
    endif
    T.unAttach()
     
    endMethod
    Si tu as le code qui fait ça, c'exactement ce qu'il me faudrait...
    Personnellement j'ai construit une petite fiche qui affiche une liste déroulante nommée lAlias. L'objet liste de cette liste est nommé ListeA. La liste est remplie à l'ouverture de la fiche avec tous les alias :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    method open(var eventInfo Event)
    var
      arNomAlias	Array[] String
    endVar
     
    ;Récupérer les alias
     
    enumAliasNames(arNomAlias)   
     
    For I from 1 to arNomAlias.size()
      lAlias.ListeA.list.Selection=I
      lAlias.ListeA.list.Value=arNomAlias[I]
    endfor
     
    endmethod
    Pour simplifier voici un bout de code qui retrouve toutes les tables de cet alias pour les réindexer, a mettre par exemple dans un bouton "Réindexer". Bon j'adapte un peu ici un de mes programmes donc à tester et à adapter si besoin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    method pushButton(var eventInfo Event)
    Var
      T Table
      sTable string
      NbreErr,I LongInt
      sAlias string
      arNomTables Array[] String
    EndVar
     
    if lAlias="" then
      MsgStop("Attention !","Vous devez choisir un alias.")
      return
    endif
     
    ;// Trouver toutes les tables de l alias
     
    sAlias=":"+lAlias+":"
    enumDataBaseTables(arNomTables, sAlias, "*.db")
     
    ;// Eventuellement ajouter les passwords nécessaires
    ;AddPassWord("XXX")
     
    NbreErr=0
    ErrorTrapOnWarnings(Yes)
     
    For I from 1 to arNomTables.size()
     
      sTable=sAlias+arNomTables[I]
      Try
        message("Traitement de : "+sTable)
        T.attach(sTable)
        T.lock("Exclusive")
        T.ReIndexAll()
        T.unlock("Exclusive")
        T.unAttach()
      onfail
        Errorshow("Erreur ! Impossible d etraiter la table "+sTable)
        NbreErr=NbreErr+1
      endtry
     
    endfor
     
    ErrorTrapOnWarnings(No)
     
    message("")
    if NbreErr=0 then
      msgInfo("Message :","Ok ! Le traitement est terminé.")
    else
      if NbreErr=1 then
        msgInfo("Message :","Le traitement est terminé.\n\n1 erreur est survenue.")
      else
        msgInfo("Message :","Le traitement est terminé.\n\n"
            +StrVal(NbreErr)+" erreurs sont survenues.")
      endif
    endif
     
    endmethod

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    Voilà, j'ai pu effectuer toutes les manips sur les tables Paradox !!
    Encore MERCI !!!!!!!!!!!!!!!!!!!!!!!!!!!! pour ton aide Comico !!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Importer un fichier csv dans une table avec une commande sql ?
    Par pepito62 dans le forum Import/Export
    Réponses: 8
    Dernier message: 25/03/2015, 15h10
  2. Réponses: 8
    Dernier message: 15/02/2014, 01h30
  3. [VB6]Importer un fichier texte dans une table ACCESS
    Par jean-pierre96 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 26/02/2013, 15h55
  4. Importer un fichier texte dans une table en VBA
    Par Benji01 dans le forum VBA Access
    Réponses: 8
    Dernier message: 18/04/2008, 23h47
  5. Comment importer un fichier text dans une table
    Par mongilotti dans le forum SQL
    Réponses: 6
    Dernier message: 21/05/2007, 13h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo