Bonjour,
comment je peut exporter les données d'une table access vers un fichier text via c++ builder.
merci d'avance.
Bonjour,
comment je peut exporter les données d'une table access vers un fichier text via c++ builder.
merci d'avance.
En OLE, avec un CreateObject("Access.Application").
Tu peux faire appel à DoCmd qui t'offrira l'export via Save ou via TransferText + acExportDelim, tu trouveras des nombreux exemples d'export en VBA utilisant ces mêmes objets en Excel ou Access pour convertir le résultat d'une Query en CSV
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Salut faniette
Je pense que l'on ne peut pas te donner une reponse correcte sans savoir comment tu utilise ta base Ado Ole ...
--
Plutot que d'essayer de réinventer la roue, apprenons à nous en servir
Bonjour,
merci pour vos réponse, je suis entrain de réaliser une application sous c++ builder 6 avec la bdd access pour cela j'utilise les alias BDE.
Si ton volume de données est faible (10Mo), tu peux remplir un TStringList via un TQuery, et faire un SaveToFile
Tu peux aussi utiliser un TTable en TableType sur ttASCII, et recopier un DataSet dans un autre via une boucle sur OEF et FieldCount
la solution via OLE "Access.Application", est toujours valable aussi
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Salut
merci ShaileTroll pour les solutions que tu ma proposés........
Bonjour
j'ai réussie a exporter les données d'une table ADO vers un fichier texte *.txt
je veut maintenant aligner mes données comme suite:
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 TStringList *sl = new TStringList(); FConnection->Table->First(); while(!FConnection->Table->Eof) { String Matricule=FConnection->Table->FieldByName("Matricule")->AsString; String Nom =FConnection->Table->FieldByName("Nom")->AsString; String Prenoms =FConnection->Table->FieldByName("Prenoms")->AsString; String Immat= FConnection->Table->FieldByName("NoSS")->AsString; sl->Add(String().sprintf("%s %s%s %s", N, Immat, Nom, Prenoms)); sl->Add(String().sprintf(" %s",Nom)); SaveDialog1->FileName = Edit3->Text; //sl->SaveToFile(SaveDialog1->FileName); sl->SaveToFile(ChangeFileExt(SaveDialog1->FileName, ".txt")); FConnection->table->Next(); }
N1 Immat1 Nom1 Prenom1
N2 Immat2 Nom2 Prenom2
N3 Immat3 Nom3 Prenom3
... .......... ....... ...........
merci d'avance pour votre aide
Hello
petites questions :
dans ton code
1. pourquoi insère tu 2 fois le champ Nom
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 sl->Add(String().sprintf("%s %s%s %s", N, Immat, Nom, Prenoms)); sl->Add(String().sprintf(" %s",Nom));
2. le champ N n'est-il pas stocké dans ta table
les champs dans ta base de donnée ont des dimensions définies
tu peux donc utiliser des spécificateurs de tailles ainsi que le symbole "\t" pou r insérer un tabulateur entre chaque chaine
le spécificateur de taille doit être adapté à la taille des champs de ta base de donnée. Dans le cas contraire les éléments seront tronqués
dans l'exemple ci-dessous la taille est spécifiée à 12 pour le prénom et le nom ce qui pourrait être insuffisant
ex:
cdlt
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 sl->Add(String().sprintf(L"%.2s\t%.8s\t%.12s\t%.12s",N,Mat,Pre,Name));
vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
je vous en souhaite une excellente lecture ...
A lire : Les règles du forum
Bonjour
merci DjmSoftware pour ta réponse
c'est une erreur de copier coller
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 sl->Add(String().sprintf("%s %s%s %s", N, Immat, Nom, Prenoms)); sl->Add(String().sprintf(" %s",Nom)); 1. pourquoi insère tu 2 fois le champ Nom
le champ N prend les donées d'un Edit
Code : Sélectionner tout - Visualiser dans une fenêtre à part 2. le champ N n'est-il pas stocké dans ta table
dans le cas ou tous les champs ne sont pas vide pas de probleme mais dans le cas ou j'ai un champ null j'ai cette résultat
N1 Immat1 Nom1 Prenom1
N2 (null) Nom2 Prenom2
N3 Immat3 Nom3 Prenom3
N4 (null) Nom4 Prenom4
... ...... ....... .........
merci d'avance pour votre aide
Salut, à la place Immat par exemple utilise plustôt Immat.c_str()
Il faut faire cela pour tout les types String.
- Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
- Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
- Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon
Bonjour,
merci chers developpeurs pour vos sollutions
avec c_str() je me suis débaressée de mot (null) mais le décalage éxiste toujours
Je ne suis pas certain de ce que tu recherches comme output, mais est-ce que tu as penser à utiliser des tab (\t)?
Sinon tu peux remplacer le texte vide par des espaces.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 if(Immat.IsEmpty()) { Immat = " "; }
- Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
- Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
- Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon
Bonjour, je reformule ma question
je veut specifier la taille de champs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 dans l'exemple ci-dessous la taille est spécifiée à 30 pour le prénom et le nom sl->Add(String().sprintf("%.2s%.8s%.30s%.30s",N,Mat,Pre,Name));
ce que je cherche meme si la taille du nom moins de 30 le reste espace reste vide.
merci d'avance pour votre aide
Utilise plutôt Format que sprintf !
sprintf est capricieux si l'on utilise des Strings (comme l'effet de bord sur le NULL)
Format gère mieux cela !
La chaine de format est légèrement différent,
je me demande si sprintf "%.30s" ne fourni pas juste une troncature pour les nombres,
tu confonds avec sprintf "%-30s" qui tronque si plus et "bourre" si moins
"%30s" bourre à gauche
"%-30s" bourre à droite
Voir ma fonction CopyStuff dans Chaine de caractères avec des espaces
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 MemoTrace->Lines->Add("%.30s : "); MemoTrace->Lines->Add(AnsiString().sprintf("sprintf : %-30s", "Bob 567 ! Reste 10 !") + " ?"); MemoTrace->Lines->Add(AnsiString().Format("Format : %-30s", OpenArray<TVarRec>("Bob 567 ! Reste 10 !"), 0) + " ?"); MemoTrace->Lines->Add(AnsiString().sprintf("sprintf : %-30s", "Bob 567 ! après cela il n'y aura plus de place !" ) + " ?"); MemoTrace->Lines->Add(AnsiString().Format("Format : %-30s", OpenArray<TVarRec>("Bob 567 ! après cela il n'y aura plus de place !"), 0) + " ?"); MemoTrace->Lines->Add(AnsiString().sprintf("sprintf : %30s", "Bob 567 ! Reste 10 !") + " ?"); MemoTrace->Lines->Add(AnsiString().Format("Format : %30s", OpenArray<TVarRec>("Bob 567 ! Reste 10 !"), 0) + " ?");
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
mille merci ShaiLeTroll
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager