AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi TClientDataSet/midas.dll und RegistryEinträge
Thema durchsuchen
Ansicht
Themen-Optionen

TClientDataSet/midas.dll und RegistryEinträge

Ein Thema von Thanatos81 · begonnen am 13. Aug 2005 · letzter Beitrag vom 15. Aug 2005
Antwort Antwort
Thanatos81
(Gast)

n/a Beiträge
 
#1

TClientDataSet/midas.dll und RegistryEinträge

  Alt 13. Aug 2005, 21:55
Datenbank: keine • Zugriff über: TClientDataSet
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 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,
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: TClientDataSet/midas.dll und RegistryEinträge

  Alt 14. Aug 2005, 12:41
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:
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;
Achtung! Ungetestet und aus der hohlen Hand gesch....
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#3

Re: TClientDataSet/midas.dll und RegistryEinträge

  Alt 14. Aug 2005, 16:31
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 Werde das ganze mal testen, sobaldsich der Restalkohol verflüchtigt hat 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
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.838 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

Re: TClientDataSet/midas.dll und RegistryEinträge

  Alt 15. Aug 2005, 07:23
Zitat von Thanatos81:
...Danach lief das Programm auf einmal nicht mehr, da es die midas.dll nicht mehr finden konnte...
Hallo,
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:
uses
  MidasLib, // damit wird die midas.dll nicht mehr benötigt
  Forms,
...
Das Einbinden der Midas in das Projekt hat folgende Vorteile:
  • Es wird keine midas.dll mehr benötigt
  • Die midas.dll muss demnach auch nicht mehr registriert sein
  • Es wird immer die Version verwendet, mit der auch das Programm erstellt wurde
  • Es ist also nicht mehr möglich, das eine Delphi 5 midas.dll mit einem Delphi 7 Programm verwendet wird
  • Es ist nur ein minimaler Aufwand Midas einzubinden (eine Zeile Quelltext / Projekt)
Das Einbinden der Midas in das Projekt hat im Wesentlichen 2 Nachteile:
  • Die Exe Datei wird ca. 200k größer
  • Wenn z.B. zwei Projekte Midas benutzen, wird nicht nur eine midas.dll geladen, sondern jedes Projekt lädt den Code jetzt in den Speicher.
Das Ganze ist noch mal (auf Englisch) nachzulesen unter: http://bdn.borland.com/article/0,1410,29297,00.html



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.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#5

Re: TClientDataSet/midas.dll und RegistryEinträge

  Alt 15. Aug 2005, 08:12
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz