Bonjour,
Quelle méthode serait la plus appropriée pour stocker le nom et l'extension d'un fichier importés dans un champ ftBlob?
Le seul hic, c'est quand on veut les extraire, encore faut-il se rappeler de l'extension du fichier importé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 { GetSize } function GetSize(const Bytes: Int64): String; const B = 1; KB = 1024 * B; MB = 1024 * KB; begin if Bytes > MB then Result := FormatFloat('#.## MB', Bytes / MB) else if Bytes > KB then Result := FormatFloat('#.## KB', Bytes / KB) else Result := FormatFloat('#.## Bytes', Bytes); end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 { Private : WMDropFiles } procedure TFFieldBlob.WMDropFiles(var WMDrop: TWMDropFiles); const MaxFileSize = 2097152; // Max 2 Mo var FileName: PChar; BlobStream: TStream; FileStream: TFileStream; begin try GetMem(FileName, MaxFileSize); DragQueryFile(WMDrop.drop, 0, FileName, MaxFileSize); try BlobStream := DataSet.CreateBlobStream(DBTable.SelectedField, bmWrite); FileStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone); if FileStream.Size < MaxFileSize then begin BlobStream.CopyFrom(FileStream, FileStream.Size); StatusBar.Panels[0].Text := ExtractFileName(FileName); StatusBar.Panels[2].Text := GetSize(BlobStream.Size); end else MyMessage(ERR_FileMaxSize, False); // Message : Fichier trop volumineux ! Max 2 Mo FreeAndNil(FileStream); FreeAndNil(BlobStream); except StatusBar.Panels[0].Text := EmptyStr; StatusBar.Panels[2].Text := EmptyStr; MyMessage(ERR_LoadFile, False); // Message : Impossible de charger le fichier spécifié ! end; FreeMem(FileName); finally DragFinish(WMDrop.drop); end; WMDrop.Result := 0; end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 { ActBlobToFile Click } procedure TFFieldBlob.ActBlobToFileClick(Sender: TObject); var BlobStream: TStream; FileStream: TFileStream; begin BlobStream := DataSet.CreateBlobStream(DBTable.SelectedField, bmRead); if (BlobStream.Size > 0) and (scSaveDialog.Execute) then begin try FileStream := TFileStream.Create(scSaveDialog.FileName, fmCreate); FileStream.CopyFrom(BlobStream, BlobStream.Size); FreeAndNil(FileStream); except MyMessage(ERR_ExportFile, False); // Message : Impossible d'extraire le fichier ! end; end; FreeAndNil(BlobStream); end;
Partager