----Problème 2 et solution
En plus du contenu du fichier ISO, chaque enregistrement de la table importée a également besoin du type de livre, du numéro de numéro et du numéro d'identification. Lors de l'insertion d'un nouvel enregistrement, TPgCSV traite uniquement les champs liés aux données du fichier texte. , ,Le contenu de ces champs doit être ajouté par nous-mêmes. Inutile de dire qu'il est naturel de penser à l'événement AfterInsert dans Table. Mais le problème est que ma Table est dans l'unité DataModule et je dois transmettre des paramètres à l'événement AfterInsert. Dans le même temps, un tel traitement entraînera un chaos de maintenance. Les événements qui se produisent dans une unité doivent être traités autant que possible par les fonctions ou les procédures de cette unité. J'ai donc pensé à écrire un processus de traitement dans l'unité actuelle, puis à attribuer ce processus à l'événement AfterInsert de Table lorsque le programme est en cours d'exécution, puis à le désactiver une fois l'importation terminée. Ça marche, mais c'est toujours gênant ! Puisque vous rencontrerez un tel problème dans la plupart des cas, pourquoi ne pas le résoudre immédiatement et résumer cet incident.
Comme pour la question 1, nous avons encore besoin ici d'un processus de gestion des événements AfterInsert. Où doit-il être ajouté cette fois-ci ? Vous pouvez certainement le voir en un coup d'œil :
PROcédure TPgCSV.CSVToDataSet ;
commencer
…
FDataset.DisableControls ;
while (pas Eof(FFile)) et (pas FStop) font
commencer
//lire depuis CSV
Readln(FFile,RecordString);
//modification de xm4014
si assigné (FRegulateString) alors
FRegulateString(soi,RecordString);
//ajouter un nouvel enregistrement
essayer
FDataset.Append ;
//Devrait être ajouté ici !
//modification de xm4014
si assigné (FAfterInsert) alors
AfterInsert(soi,FDataset);
…
pour i:=1 à CountMapItems faire
…
fin;
De même, de nouvelles déclarations d'événements et attributs d'événements doivent être définis ici, car les paramètres de FDataSet doivent être transmis. Pour le code de déclaration, veuillez vous référer à l'utilisation des contrôles Delphi (2) (http://www.csdn. net/develop/read_article.asp?id=11855).
Après avoir recompilé le contrôle, vous pouvez ajouter du code dans l'événement AfterInsert pour attribuer des valeurs au type de livre, au numéro de numéro et au numéro d'identification.
----Problème 3 et solution
Les problèmes liés à la base de données sont désormais résolus. Mais il reste un problème d'affichage. Le programme nécessite l'utilisation de ProgressBar pour afficher la progression de l'importation. Afin de définir la valeur de ProgressBar.Max, j'ai besoin de savoir combien d'enregistrements il y a. le fichier ISO avant l'importation, c'est-à-dire une propriété similaire à RecordCount Mais il n'existe pas de telle propriété dans TPgCSV.
Alors ajoutons un attribut comme celui-ci
//modification de xm4014
propriété CSVRecordCount : entier lu FCSVRecordCount écriture FCSVRecordCount par défaut 0 ;
Comment lui attribuer une valeur ? C'est très simple. Vous pouvez utiliser ReadLn(F) pour scanner le fichier ISO, puis cumuler le nombre de scans.
La clé est de savoir où effectuer ce traitement. Évidemment, pour un même fichier, ce travail ne doit être effectué qu'une seule fois. Étant donné que les statistiques doivent être recalculées pour différents fichiers, nous pouvons analyser le fichier texte chaque fois que nous définissons l'attribut de nom de fichier.
OK, recherchez l'attribut de nom de fichier de TPgCSV
propriété CSVFile : chaîne de lecture FCSVFile écriture de FCSVFile ;
Apportez quelques petites modifications
nouvelle déclaration de propriété
propriété CSVFile : chaîne de lecture FCSVFile écriture SetCSVFile ;
Appuyez sur Ctrl+shift+c pour écrire le code de la méthode SetCSVFile comme suit
procédure TPgCSV.SetFCSVFile(const Value: string);
var
F1 : Fichier texte ;
iCount : entier ;
commencer
si FCSVFile<>Valeur alors
commencer
FCSVFile := Valeur ;
//Dès que le nom du fichier est modifié, réanalysez et modifiez la valeur de FCSVRecordCount.
si FichierExiste (Valeur) alors
commencer
AssignFile(F1, Valeur);
Réinitialiser (F1);
iCompte :=0 ;
alors que ce n'est pas le cas de Eof(F1)
commencer
LireLn(F1);
Inc(iCount);
fin;
FCSVRecordCount:=iCount;
fin;
fin;
fin;
Après la compilation, nous pouvons appeler en toute sécurité la propriété CSVRecordCount pour obtenir la valeur de l'enregistrement avant l'opération d'importation :
ProgressBar1.Min :=0;
ProgressBar1.Max :=PgCSV1.CSVRecordCount ;
Le programme ci-dessus a réussi le débogage sous Delphi 6.0/Win98
À ce stade, j'ai pratiquement terminé. En fait, je peux compter les modifications que j'ai apportées sur mes doigts, mais c'est juste une si petite mise à niveau qui me rend plus à l'aise pour l'utiliser. encore la prochaine fois. Quand je l'utiliserai, je me rendrai de plus en plus compte de sa valeur. Et après de telles analyses et modifications, j'ai fait beaucoup de progrès, quelques gouttes plus d'un demi-scoop, haha ! Il convient de souligner que TPgCSV est un contrôle simple. Il n'a pas de relations très compliquées et n'implique pas d'appeler le contenu principal de la VCL, il n'y a donc pas lieu de s'inquiéter outre mesure lors de sa modification une fois le code source impliqué. est une relation hiérarchique très complexe , vous devez bien réfléchir à chaque ligne de code que vous ajoutez ou modifiez, sinon cela peut affecter tout le corps, et il sera finalement difficile de revenir en arrière. Par conséquent, le principe d'utilisation que j'ai mentionné est en fait basé sur le. contrôler ses propres fonctions sans aucune modification du contenu substantiel. Pour parvenir à faire ce que vous voulez, tout le monde (moi y compris) doit continuer à travailler dur ! (Pièce jointe : adresse de téléchargement TPgCSV http://www.internet-bj.com/delphikongjian.asp?id=2 )