Précédent   Forum des professionnels en informatique > Bases de données > Autres SGBD > Paradox
Paradox Forum d'entraide sur Paradox, et sur Borland Database Engine
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/11/2007, 09h11   #1
Invité régulier
 
Inscription : mai 2004
Messages : 35
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 35
Points : 9
Points : 9
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 !
Steph4fun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2007, 13h52   #2
Membre habitué
 
Inscription : octobre 2007
Messages : 96
Détails du profil
Informations personnelles :
Localisation : France, Essonne (Île de France)

Informations forums :
Inscription : octobre 2007
Messages : 96
Points : 106
Points : 106
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.
comico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2007, 14h05   #3
Invité régulier
 
Inscription : mai 2004
Messages : 35
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 35
Points : 9
Points : 9
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...
Steph4fun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2007, 15h31   #4
Membre habitué
 
Inscription : octobre 2007
Messages : 96
Détails du profil
Informations personnelles :
Localisation : France, Essonne (Île de France)

Informations forums :
Inscription : octobre 2007
Messages : 96
Points : 106
Points : 106
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 !
comico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2007, 18h39   #5
Invité régulier
 
Inscription : mai 2004
Messages : 35
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 35
Points : 9
Points : 9
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
Steph4fun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2007, 20h06   #6
Membre habitué
 
Inscription : octobre 2007
Messages : 96
Détails du profil
Informations personnelles :
Localisation : France, Essonne (Île de France)

Informations forums :
Inscription : octobre 2007
Messages : 96
Points : 106
Points : 106
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.
comico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2007, 22h00   #7
Invité régulier
 
Inscription : mai 2004
Messages : 35
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 35
Points : 9
Points : 9
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
Steph4fun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2007, 01h01   #8
Membre habitué
 
Inscription : octobre 2007
Messages : 96
Détails du profil
Informations personnelles :
Localisation : France, Essonne (Île de France)

Informations forums :
Inscription : octobre 2007
Messages : 96
Points : 106
Points : 106
Salut
Citation:
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)

Citation:
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
Citation:
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
comico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2007, 13h34   #9
Invité régulier
 
Inscription : mai 2004
Messages : 35
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 35
Points : 9
Points : 9
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 :
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 !
Steph4fun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2007, 15h00   #10
Membre habitué
 
Inscription : octobre 2007
Messages : 96
Détails du profil
Informations personnelles :
Localisation : France, Essonne (Île de France)

Informations forums :
Inscription : octobre 2007
Messages : 96
Points : 106
Points : 106
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 :
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 :
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.
comico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2007, 19h45   #11
Invité régulier
 
Inscription : mai 2004
Messages : 35
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 35
Points : 9
Points : 9
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..
Citation:
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
Steph4fun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2007, 19h17   #12
Membre habitué
 
Inscription : octobre 2007
Messages : 96
Détails du profil
Informations personnelles :
Localisation : France, Essonne (Île de France)

Informations forums :
Inscription : octobre 2007
Messages : 96
Points : 106
Points : 106
Salut
Citation:
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 :
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
Citation:
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 :
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 :
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
comico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2007, 23h10   #13
Invité régulier
 
Inscription : mai 2004
Messages : 35
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 35
Points : 9
Points : 9
Voilà, j'ai pu effectuer toutes les manips sur les tables Paradox !!
Encore MERCI !!!!!!!!!!!!!!!!!!!!!!!!!!!! pour ton aide Comico !!!!
Steph4fun est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h55.


 
 
 
 
Partenaires

Hébergement Web