![]() |
Sichern von Daten
Hallo Leute,
Ich habe in meinem Programm ein Menü, welches sich 'Datenbank sichern' nennt. Nun möchte ich die Datenbank sichern. Der Path der Original-DB steht in der Registry. Nun möchte ich es so machen, dass wenn ich auf Datenbank sichern klicke, dass dann eine art Explorer erscheint, wo ich die Datenbank hinspeichern möchte. Wie kann man das realisieren? |
Hier mit kann´st du dir einen Ordner auswählen:
Code:
Und dann nur noch CopyFile.
[b]uses[/b] shlobj;
[b]function[/b] TfrmMain.OpenFolder(root: Integer; Caption: [b]string[/b]): [b]string[/b]; [i]//Verzeichnis-Öffnen-Dialog-Funktion[/i] [b]var[/b] bi: TBrowseInfo; lpBuffer: PChar; pidlPrograms, pidlBrowse: PItemIDList; [b]begin[/b] [b]if[/b] ([b]not[/b] SUCCEEDED(SHGetSpecialFolderLocation(GetActiveWindow, root, pidlPrograms))) [b]then[/b] exit; lpBuffer := StrAlloc(MAX_PATH); bi.hwndOwner := GetActiveWindow; bi.pidlRoot := pidlPrograms; bi.pszDisplayName := lpBuffer; bi.lpszTitle := PChar(Caption); bi.ulFlags := BIF_RETURNONLYFSDIRS; bi.lpfn := [b]nil[/b]; bi.lParam := 0; pidlBrowse := SHBrowseForFolder(bi); [b]if[/b] (pidlBrowse <> [b]nil[/b]) [b]then[/b] [b]if[/b] SHGetPathFromIDList(pidlBrowse, lpBuffer) [b]then[/b] Result := lpBuffer; StrDispose(lpBuffer); [b]end[/b]; [b]procedure[/b] TfrmMain.cmdOpenClick(Sender: TObject); [b]begin[/b] txtPath.Caption := OpenFolder(CSIDL_DRIVES, 'Verzeichnis wählen'); [i]//Übergabe des gewählten Verzeichnisses[/i] [b]end[/b]; |
Moin m-werk,
und wenn Dir das zu aufwändig ist, schau Dir mal die Funktionen SelectDirectory aus der Unit Filectrl an. |
Produziert die nicht diesen Win3.1-Oldstyle Dialog?
|
Moin Luckie,
das hängt davon ab, welche der beiden Möglichkeiten man verwendet. Die mit Caption als erstem Parameter tut das nicht. |
:hi:
Danke, und wieder etwas schlauer geworden und das an meinem Geburtstag :mrgreen:. |
Danke Luckie für den Code, aber mit dem hab ich leider nichts anfangen können aber er hat mein gedächnis einwenig auf die sprünge geholfen. Ich hab jetzt fast alles geschaft bis auf eine Sache noch.
Ich habe in der Registry den Ordner stehen, wo die Datei ist, welche ich sichern möchte. Diese Datei nennt sich 'Kundenverwaltung.mdb' Ich kann zwar den Ordner auslesen und im Label anzeigen, was ich aber nicht kann aber möchte, ist dass die Datei, die in diesem Ordner liegt, in einem anderen Label erscheint. Wie kann ich das noch machen? |
Suchst du eventuell ExtractFilename?
|
Ja, könnte sein. Wie kann ich das mit extractfilename machen?
|
F1
Code:
lable1.Caption := ParamStr(0); // Programmpfad mit Anwendungsname
label2.Caption := ExtractFilename(ParamStr(0)); // nur Anwendungsname |
hi, ich habs noch nicht ganz
Ich zeige den Pfad im label mit folgendem Code an:
Code:
Ich lese ja aus der Registry den Pfad aus.
Label2.Caption := a;
Und wenn ich jetzt den Code:
Code:
dazugebe, dann sehe ich im Label 3 nur die Datei, bei dem
Label3.Caption:=ExtractFilename(ParamStr(0))
Ordner, wo sich gerade mein Programm befindet. Weiters soll die Datei mit der Ext. *.mdb angezeigt werden. |
Witzbold, das mit ParamStr(0) war nur zu demonstrations Zwecken gedacht. Hattest du nicht gesagt, du hättest Pfad und Datei in der Registry?
|
Ich hab nur den Pfad in der Registry. Die Datei nicht.
Den Path lese ich ja schon im Label2 aus. Jetzt fehlt nur noch die datei in Label 3 dazu. |
Ich denke, er möchte im Label3 Kundenverwaltung.mbd drin haben. Er holt sich den Pfad aus der Reg, kann aber die Datei aus dem Ordner ncith rausfischen.
Probiers mal damit: if (FileExists(ChangeFileExt(ParamStr(0), '.mbd'))) then Label3.Caption := 'Die Datei Kundenverwaltung.mbd, ist in dem Ordner sowieso...'; Grüsse, Daniel :hi: |
Ja wenn du den Pfad hast, dann hast du doch auch die Datei. Oder heißt die immer anders? Dann mußt du in dem Order, dessen Pfad du hast, mit FindFirst und FindNext suchen. Wenn dort nur eine Datei steht, dann reicht eventuell schon FindFirst.
|
Es könnten mehrere Dateien in diesem Ordner sein, aber die Datei, die im Label 3 erscheinen soll, soll immer folgende sein 'Kundendaten.mdb'
Wie geht das mit dem FindFirst |
Dann such immer mit FindFirst nach *.mdb oder wenn du dir absolut sicher sein kannst , dann mach doch:
Code:
Label3.Caption := 'Kundendaten.mdb';
|
Hi, ich hab das jetzt so gemacht. Nun, wenn ich jetzt genau diese Datei sichern möchte kommt die Meldung:
Datei 'Kundendaten.mdb' konnte nicht geöffnet werden. So sieht mein Button beim Sichern aus
Code:
Und so sieht der Code aus, wo ich den Ordner und das Laufwerk auswähle, aufdem ich die Datei sichern möchte:
procedure TForm1.Button2Click(Sender: TObject);
var NewFileName: string; Msg: string; NewFile: TFileStream; OldFile: TFileStream; begin NewFileName := ExtractFilePath(Label1.Caption + '\') + ExtractFileName(Label3.Caption); Msg := Format('Copy %s to %s?', [Label2.Caption + Label3.Caption, NewFileName]); if MessageDlg(Msg, mtConfirmation, mbOKCancel, 0) = mrOK then begin OldFile := TFileStream.Create(Label3.Caption, fmOpenRead or fmShareDenyWrite); try NewFile := TFileStream.Create(NewFileName, fmCreate or fmShareDenyRead); try NewFile.CopyFrom(OldFile, OldFile.Size); finally FreeAndNil(NewFile); end; finally FreeAndNil(OldFile); end; end; end;
Code:
Was mach ich da noch falsch?
procedure TForm1.Button1Click(Sender: TObject);
var Dir: string; begin Dir := 'C:\Windows'; if SelectDirectory(Dir, [sdAllowCreate, sdPerformCreate, sdPrompt],SELDIRHELP) then Label1.Caption := Dir; end; |
ICH HABS JETZT. Es funktioniert.
Ich hab was vergessen. Es muß so aussehen:
Code:
Ich hab vergessen (Label2.Caption +
...
begin OldFile := TFileStream.Create(Label2.Caption + Label3.Caption, fmOpenRead or fmShareDenyWrite); try .... einzufügen. DANKE FÜR EURE HILFE |
Na siehst du, es hilft schon, wenn man nur mal darüber spricht. :mrgreen:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:45 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-2025 by Thomas Breitkreuz