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
Salut faniette
Je pense que l'on ne peut pas te donner une reponse correcte sans savoir comment tu utilise ta base Ado Ole ...
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
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));
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.
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 = " "; }
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) + " ?");
mille merci ShaiLeTroll
Partager