md21
Messages postés32Date d'inscriptionmercredi 10 janvier 2007StatutMembreDernière intervention 1 septembre 2015
-
25 mai 2011 à 14:10
md21
Messages postés32Date d'inscriptionmercredi 10 janvier 2007StatutMembreDernière intervention 1 septembre 2015
-
8 juin 2011 à 09:56
Bonjour,
depuis de nombreuses années, j'utilise des fichiers à accès direct avec des formats propriétaires que je défini moi même. La démarche est la suivante :
je défini la structure puis les variables associées (les champs déclarés dans la structure le sont à titre d'exemple, on peut bien sûr faire ce que l'on veut)
Type FichierAccesDirect = Record
ID: Cardinal;
Champ1: String[10];
Champ2: integer;
Champ3: Boolean;
Champ4: array[0..2] of Byte;
end;
Type FichierAD = File of FichierAccesDirect;
var
MainFiche: TMainFiche;
FADEnreg: FichierAccesDirect;
FAD: FichierAD;
Ensuite pour écrire dans le fichier, j'utilise une structure du type :
AssignFile(FAD,'Fichier.dat'); (l'extension peut être différente bien sûr)
Reset(FAD); (ou ReWrite selon le cas)
Seek(FAD,indice de l'enregistrement à définir);
FADEnreg.ID := I + 1;
FADEnreg.Champ1 := 'Champ1_' + IntToStr(I);
FADEnreg.Champ2 := I;
FADEnreg.Champ3 := true;
FADEnreg.Champ4[0] := 5;
FADEnreg.Champ4[1] := 6;
FADEnreg.Champ4[2] := 7;
Write(FAD,FADEnreg);
CloseFile(FAD);
Le tout pouvant se combiner avec des boucles, etc ... (j'ai fait des copier-coller pour montrer le principe que j'utilise, je ne garanti pas qu'il n'y a pas d'erreurs dues aux manips)
Voici maintenant ma question : jusqu'alors la structure des fichiers dont j'avais besoin était figée, donc je la définissais par avance comme dans mon exemple avec l'instruction "type". J'aurais maintenant besoin de pouvoir définir une structure dynamiquement et créer les champs depuis une interface. Est-il possible de générer le bloc "type ...end;" de manière dynamique ? et comment faut'il procéder ?
md21
Messages postés32Date d'inscriptionmercredi 10 janvier 2007StatutMembreDernière intervention 1 septembre 20151 6 juin 2011 à 10:11
Bonjour,
merci de vos réponses, je croyais ne jamais en avoir, merci !! (c'est pour ça que je ne surveillais plus trop).
Je ne souhaite pas basculer vers une base de données car :
- j'ai besoin de vitesse et les moteurs moteurs de bases de données sont généralement bien plus lent que mon système (moi j'ai une réponse quasi immédiate même sur des gros fichiers et sur des requêtes assez lourdes)
- mes codes sont simples, je maitrise bien mieux ce que je fais. Avec un moteur de base de données je contrôle moin ce qui se passe.
Seulement voilà, pour un cas particulier, j'aurais besoin de pouvoir dimensionner dynamiquement le bloc de déclaration de format, et ça je ne sais pas faire mais je reconnais humblement que j'ai beaucoup encore à apprendre. Par ailleurs je n'ai rien trouvé sur les forums. Si vous saver comment faire je suis vraiment intéressé ?
md21
Messages postés32Date d'inscriptionmercredi 10 janvier 2007StatutMembreDernière intervention 1 septembre 20151 8 juin 2011 à 09:56
merci
effectivement, stream a l'air très puissant, mais aussi très compliqué ...
En fait, pour être plus précis, j'aurais besoin de passer des tableaux dynamiques de longueurs variables dans mes blocs de déclaration de format. J'ai trouvé ceci dans l'aide de delphi (v6):
"Les types ne peuvent pas être des chaînes longues, des tableaux dynamiques, des types Variant, des interfaces ou des types structurés contenant ces mêmes types.
Par contre, ce peut être des pointeurs sur ces types."
apparemment il y a une solution, le problème c'est que j'ai toujours eu du mal avec les pointeurs, même avec le tuto très bien fait de Bactérius. Mais en m'accrochant un peu je decvrais réussir