![]() |
Datenbank: keine • Zugriff über: TClientDataSet
TClientDataSet/midas.dll und RegistryEinträge
Ich hab für meinen Vater ne kleine Anwendung unter D7 geschrieben, mit der Textdateien eingelesen und verarbeitet werden.
Es wird nix weggespeichert. Deswegen hab ich mich zwecks einfacher Handhabung für das TClientDataSet entschieden um die Daten einfach im Speicher zu halten/zu bearbeiten und die Datensätze nach drei Eigenschaften gleichzeitig zu sortieren. Dies brauche ich unbedingt für die Auswetung. Da das Programm nur aus 4 Dateien besteht (Echse, midas.dll und 2 INI-Dateien) und nur von 3/4-versierten :stupid: Anwender genutzt wird, gibts keinen Installer. Die DLL liegt mit im Programmverzeichniss, damit das %windir%\system32-Verzeichnis nicht noch mehr zugemüllt wird. Nun hatte mein Vater das Programmverzeichnis geändert (von nem Test-Verzeichnis in das endgültige). Danach lief das Programm auf einmal nicht mehr, da es die midas.dll nicht mehr finden konnte. Also hab ich erstmal wie blöd gerätselt, und dann die Registry nach der midas durchsucht. Ich wurde auch fündig und was war? Es gab mehrere Einträge, in dem der alte Pfad angegeben war. Nach dem Löschen all dieser Einträge aus der Registry lief wieder alles perfekt. Meine Frage it jetzt, ob man das anlegen der Registry-Werte unterbinden kann, oder ob jemand ne Methode kennt, wie man ein array of Record nach drei Eigenschaften sortieren kann. [Zuerst nach KartenNr, innerhalb der KartenNr dann nach Datum, und innerhalb der von KartenNr/Datum nach Uhrzeit. (KartenNr = string, Datum = TDate, Uhrzeit = TTime)]. Schönen Dank im Voraus, |
Re: TClientDataSet/midas.dll und RegistryEinträge
1. Nimm ADO und einen Textdatei-Treiber ODER
2. Sortiere dein array of record mit einer TStringList. Die String-Einträge setzen sich aus den Sortierkriterium zusammen.
Delphi-Quellcode:
Achtung! Ungetestet und aus der hohlen Hand gesch....
Procedure ArraySort (Var aList : TRecordArray);
Var sl : TStringList; i : Integer; Function _MakeKey (Const aRec : TUserRecord) : String; // Liefert einen String, der als Sortierkriterium dient. Hier wird nach Kartennummer (max 20 Stellig), // innerhalb gleicher Kartennr. nach Datum (10 stellig) und innerhalb gleichen Datums nach der Uhrzeit sortiert // Das Verfahren lässt leicht sich auf andere Sortierkriterien anpassen. Begin Result := Format ('%-20s%-10s%-10s',[KartenNr, DateToStr (Datum), TimeToStr (Uhrzeit)]); End; Begin sl := TStringlist.Create; Try // Erst in die Stringliste schreiben... For i:=0 to Length (aList) - 1 do sl.addObject (_MakeKey (aList[i]), @aList[i]); // ... dann sortieren ... sl.Sort; // ... und nun sortiert wieder zurückschreiben For i:=0 To sl.Count - 1 do aList[i] := PUserRecord (sl.Objects[i])^ Finally sl.free end End; |
Re: TClientDataSet/midas.dll und RegistryEinträge
Danke! Dass erte hatte ich mir ausch schon überlegt, aber die zweite Methode sagt mir mehr zu. Ich arbeite wohl einfach zu gerne mit Records :-D Werde das ganze mal testen, sobaldsich der Restalkohol verflüchtigt hat :wink: Werde mich dann wieder melden, und falls bei deinem Coe was nicht stimmen sollte, eine geänderte Prozedur posten.
Aber soweit ich ds jetzt beurteilen kann, sieht das sehr gut aus :thumb: |
Re: TClientDataSet/midas.dll und RegistryEinträge
Zitat:
ergänze einfach die uses Anweisung im *.dpr um die Zeile "MidasLib,". Damit wird die Funktionalität der midas.dll in die *.exe eingebunden, und die midas.dll wird nicht mehr benötigt. Das Programm (*.exe) wird damit zwar 200kb größer, aber das ist in den meisten Fällen egal. (dafür braucht man ja nicht mehr die midas.dll) ich hatte mal folgendes geschrieben: Es ist möglich den in der midas.dll ausgelagerten Code in das Projekt einzubinden. Dazu muss nur in dem Projekt die *.dpr um eine Zeile ergänzt werden:
Delphi-Quellcode:
Das Einbinden der Midas in das Projekt hat folgende Vorteile:
uses
MidasLib, // damit wird die midas.dll nicht mehr benötigt Forms, ...
![]() Noch ein Beisp.
Delphi-Quellcode:
program Project1;
uses Forms, MidasLib, // <-- diese Zeile einfügen !!! Unit1 in 'Unit1.pas' {Form1}; {$R *.res} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. |
Re: TClientDataSet/midas.dll und RegistryEinträge
Danke für den Hinweis!
Hab es gestern abend aber so ähnlich gelöst wie alzaimar vorgeschlagen hat. Habe mir allerdings ein Objekt draus gemacht und nutze das ganze mit ner TObjectList. Bin heute nach der Arbeit dann wohl damit beschäftigt, mich in die VirtualListView einzuarbeiten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz