Autor Beitrag
Blue
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Di 24.10.06 14:18 
[[Ich wusste nicht ob ich das Thema in Dateizugriff oder Datenbanken öffnen sollte,
bitte evtl. verschieben.]]

So, und jetzt meine Frage:
Ich habe ein Programm geschrieben in dem der Benutzer 2 Edit-Felder,
3 Combo-Boxen und eine Memo ausfüllen muss.
Die Eintragungen werden dann gespeichert, oder es wird nach den
eingegebenen Kriterien gesucht.

Ich habe mich mal an Ini-Dateien zum Speichern versucht, das funktioniert auch mit dem Schreiben,
aber da habe ich noch drei Fragen zu:
-Kann man mit Delphi überprüfen, ob eine Ini-Datei vorhanden ist?
(Ich hab mir das so vorgestellt, dass das Programm die Dateien nummeriert. 1.ini, 2.ini etc.)
-Sind die Ini-Dateien überhaupt eine günstige Lösung oder sollte ich das besser
mit einer Datenbank machen[Wenn ja: Kann mir dann bitte einer ein für Anfänger geeignetes
Tutorial zum Schreiben und suchen einer Datenbank unter Delphi empfehlen? :) ]

Bei den Antworten: ich bin wirklich noch ein absoluter Noob in Sachen Delphi und Datenbanken,
also bitte nicht so mit Fachbegriffen rumwerfen :oops:

Achso, was ich noch vergessen hab: Ich benutze Delphi7
Jakob Schöttl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: Di 24.10.06 14:25 
Also:
-function FileExists(Filename: string): Boolean gibt true zurück, wenn die datei existiert. also gib einfach zb if FileExists('c:\windows\deineInidatei.ini') then ShowMessage('existiert') ein
-kommt drauf an: wenn du mehrere datensätze hast, ist ne datenbanke natürlich besser aber ein tutorial kann ich dir nicht empfehlen
Blue Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Di 24.10.06 14:47 
Erstmal danke für die Antwort;

Ich hab halt 2 CD-Archive à 100 CDs/Stück und das soll eine Übersicht dafür werden.
Also denk ich schon das das mehrere Datensätze sind
_frank_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 343
Erhaltene Danke: 1

Win XP
Delphi 3 Prof / Turbo Delphi Explorer
BeitragVerfasst: Di 24.10.06 15:02 
c:\windows solltest du jedoch nicht als Pfad nehmen. das Programmverzeichnis ist da eher geeignet.
bedenke, dass du z.B. in c:\windows (auch wenns nur ein Beispiel war...) und auch dem programmverzeichnis evtl. nicht schreiben kannst.
das Programmverzeichnis bekommst du so:
ausblenden Delphi-Quelltext
1:
ExtractFilePath(ParamStr(0));					

um sicheren Schreibzugriff zu haben nehm das %APPDATA%\programmname\ das liegt im %USERPROFILE% und ist für solche zwecke ausgelegt (ggf. prüfen, ob eine der variablen leer ist, da diese evtl. in früheren windows-versionen nicht vorhanden).
mal ein Beispiel, wie du die Variablen auslesen kannst:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
//ggf. konstanten definieren
const
  CSIDL_DESKTOP = $0; // Desktop
  CSIDL_INTERNET = $1; // Internet
  CSIDL_PROGRAMS = $2; // Startmenü: Programme
  CSIDL_CONTROLS = $3; // Systemsteuerung
  CSIDL_PRINTERS = $4; // Drucker
  CSIDL_PERSONAL = $5; // Eigene Dateien
  CSIDL_FAVORITES = $6; // IE: Favoriten
  CSIDL_STARTUP = $7; // Autostart
  CSIDL_RECENT = $8; // Zuletzt benutzte Dokumente
  CSIDL_SENDTO = $9; // Senden an / SendTo
  CSIDL_BITBUCKET = $A; // Papierkorb
  CSIDL_STARTMENU = $B; // Startmenü
  CSIDL_MYMUSIC = $D; // Eigene Musik
  CSIDL_MYVIDEO = $E; // Eigene Videos
  CSIDL_DESKTOPDIRECTORY = $10; // Desktopverzeichnis
  CSIDL_DRIVES = $11; // Mein Computer
  CSIDL_NETWORK = $12; // Netzwerk
  CSIDL_NETHOOD = $13; // Netzwerkumgebung
  CSIDL_FONTS = $14; // Windows\Fonts
  CSIDL_TEMPLATES = $15; // Vorlagen
  CSIDL_COMMON_STARTMENU = $16; // "All Users" - Startmenü
  CSIDL_COMMON_PROGRAMS = $17; // "All Users" - Programme
  CSIDL_COMMON_STARTUP = $18; // "All Users" - Autostart
  CSIDL_COMMON_DESKTOPDIRECTORY = $19; // "All Users" - Desktop
  CSIDL_APPDATA = $1A; // Anwendungsdaten
  CSIDL_PRINTHOOD = $1B; // Druckumgebung
  CSIDL_LOCAL_APPDATA = $1C; // Lokale Einstellungen\Anwendungsdaten
  CSIDL_COMMON_FAVORITES = $1F; // "All Users" - Favoriten
  CSIDL_INTERNET_CACHE = $20; // IE: Temporäre Internetdateien
  CSIDL_COOKIES = $21; // IE: Cookies
  CSIDL_HISTORY = $22; // IE: Verlauf
  CSIDL_COMMON_APPDATA = $23; // "All Users" - Anwendungsdaten
  CSIDL_WINDOWS = $24; // Windows
  CSIDL_SYSTEM = $25; // Windows\System32
  CSIDL_PROGRAM_FILES = $26; // C:\Programme
  CSIDL_MYPICTURES = $27; // Eigene Bilder
  CSIDL_PROFILE = $28; // Anwenderprofil (Benutzername)
  CSIDL_SYSTEMX86 = $29; // Windows\System32
  CSIDL_PROGRAM_FILES_COMMON = $2B; //Gemeinsame Dateien
  CSIDL_COMMON_TEMPLATES = $2D; // "All Users" - Vorlagen
  CSIDL_COMMON_DOCUMENTS = $2E; // "All Users" - Dokumente
  CSIDL_COMMON_ADMINTOOLS = $2F; // "All Users" - Verwaltung
  CSIDL_ADMINTOOLS = $30; // Startmenü\Programme\Verwaltung

//die funktion zum holen des pfades
function GetSpecialFolder(hWindow: HWND; Folder: Integer): String;
var
  pMalloc: IMalloc;
  pidl: PItemIDList; 
  Path: PChar;
begin 
  // get IMalloc interface pointer
  if (SHGetMalloc(pMalloc) <> S_OK) then
  begin
    MessageBox(hWindow, 'Couldn''t get pointer to IMalloc interface.', 
               'SHGetMalloc(pMalloc)', 16);
    Exit;
  end;
  // retrieve path
  SHGetSpecialFolderLocation(hWindow, Folder, pidl);
  GetMem(Path, MAX_PATH);
  SHGetPathFromIDList(pidl, Path);
  Result := Path;
  FreeMem(Path);

  // free memory allocated by SHGetSpecialFolderLocation
  pMalloc.Free(pidl);
end;

//nun kann man den pfad einfach auslesen per
Edit1.Text:=GetSpecialFolder(Handle,CSIDL_APPDATA);
//bzw. für das Userprofile
Edit1.Text:=GetSpecialFolder(Handle,CSIDL_PROFILE);


Gruß Frank
Blue Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Di 24.10.06 15:11 
Thx4answer;

user profile icon_frank_ hat folgendes geschrieben:
c:\windows solltest du jedoch nicht als Pfad nehmen. das Programmverzeichnis ist da eher geeignet.


Die Daten Speicher ich in dem Ordner "Data\\", der dann in demselben Verzeichnis wie das Programm meinst.

Aber ich weis grad nicht, wie mich das weiter bringt muss ich gestehen :oops: , weil eigentlich
wollte ich ja nur meine ini-files durchsuchen und auslesen


Edit:
Achsooo, jetz hab ich das mit dem ExtractFilePath verstanden =), ich dachte dem würde als
Pfadangabe sowas wie 'Data\1.ini' reichen
Martin1966
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: Di 24.10.06 16:03 
user profile iconBlue hat folgendes geschrieben:
Die Daten Speicher ich in dem Ordner "Data\\", der dann in demselben Verzeichnis wie das Programm meinst.

Das Programmverzeichnis solltest du aber nicht dafür verwenden da man als "normal" Benutzer dort keine Schreibrechte hat. Nimm für die Daten das Anwendungsdaten-Verzeichnis. Wie das geht hat Frank bereits geschrieben.

Lg Martin

_________________
Ein Nutzer der Ecke ;-)
accessViolation
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 68

Win
Delphi 5 Enterpr.
BeitragVerfasst: Mo 01.10.07 08:35 
Hallo!

@_frank_: Ich habe Delphi 5 und möchte Dein Beispiel verwenden, wo du die Variablen ausliest.
Geht das mit D5, und welche Units muss ich einbinden?

Wäre dankbar für eine Rückmeldung.

Viele Grüße,
Dietmar
Blackheart666
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: Mo 01.10.07 08:44 
ActiveX, ShellApi, ShlObj

_________________
Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)