| 1 |  | unit OniDataClass; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 2 |  | interface | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 3 |  | uses Data, DataStructures, Classes, SysUtils, StrUtils, | 
 
 
 
 
 
 
 
 
 
 
 | 4 | < | Dialogs, ABSDecUtil, ABSMain, DB; | 
 
 
 
 
 
 
 
 
 | 4 | > | Dialogs, ABSDecUtil, ABSMain, DB, Windows; | 
 
 
 
 
 
 
 
 
 
 
 | 5 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 6 |  | type | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 7 |  | TOniData = class | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 102 |  | private | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 103 |  | FDatabase: TABSDatabase; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 104 |  | FQuery:    TABSQuery; | 
 
 
 
 
 
 
 
 | 105 | + | Fdat_files:    TFiles; | 
 
 
 
 
 
 
 
 | 106 | + | Fdat_extensionsmap: TExtensionsMap; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 107 |  | protected | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 108 |  | public | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 109 |  | constructor Create(OLDBFilename: String; var Result: Boolean); override; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 110 |  | procedure Close; override; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 111 |  |  | 
 
 
 
 
 
 
 
 | 112 | + | procedure UpdateListCache; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 113 |  | //      function GetDatLinks(srcid:LongWord):TDatLinks; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 114 |  | function GetFileInfo(fileid: LongWord): TFileInfo; override; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 115 |  | function GetFilesList(ext: String; pattern: String; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 851 |  | until FQuery.EOF; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 852 |  | FQuery.Close; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 853 |  |  | 
 
 
 
 
 
 
 
 | 854 | + | UpdateListCache; | 
 
 
 
 
 
 
 
 | 855 | + |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 856 |  | Result   := True; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 857 |  | FBackend := ODB_ADB; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 858 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 869 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 870 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 871 |  |  | 
 
 
 
 
 
 
 
 | 872 | + | procedure TOniDataADB.UpdateListCache; | 
 
 
 
 
 
 
 
 | 873 | + | var | 
 
 
 
 
 
 
 
 | 874 | + | i:     LongWord; | 
 
 
 
 
 
 
 
 | 875 | + | temps: String; | 
 
 
 
 
 
 
 
 | 876 | + | begin | 
 
 
 
 
 
 
 
 | 877 | + | FQuery.SQL.Text := 'SELECT id,name,extension,[size],contenttype FROM datfiles ORDER BY id ASC;'; | 
 
 
 
 
 
 
 
 | 878 | + | FQuery.Open; | 
 
 
 
 
 
 
 
 | 879 | + | if FQuery.RecordCount > 0 then | 
 
 
 
 
 
 
 
 | 880 | + | begin | 
 
 
 
 
 
 
 
 | 881 | + | FQuery.First; | 
 
 
 
 
 
 
 
 | 882 | + | SetLength(Fdat_files, FQuery.RecordCount); | 
 
 
 
 
 
 
 
 | 883 | + | i := 0; | 
 
 
 
 
 
 
 
 | 884 | + | repeat | 
 
 
 
 
 
 
 
 | 885 | + | Fdat_files[i].ID := FQuery.FieldByName('id').AsInteger; | 
 
 
 
 
 
 
 
 | 886 | + | Fdat_files[i].Name := FQuery.FieldByName('name').AsString; | 
 
 
 
 
 
 
 
 | 887 | + | Fdat_files[i].Extension := FQuery.FieldByName('extension').AsString; | 
 
 
 
 
 
 
 
 | 888 | + | Fdat_files[i].FileName := FormatNumber(Fdat_files[i].ID, 5, '0') + '-' + | 
 
 
 
 
 
 
 
 | 889 | + | Fdat_files[i].Name + '.' + Fdat_files[0].Extension; | 
 
 
 
 
 
 
 
 | 890 | + | Fdat_files[i].FileNameHex := IntToHex(Fdat_files[i].ID, 4) + '-' + | 
 
 
 
 
 
 
 
 | 891 | + | Fdat_files[i].Name + '.' + Fdat_files[0].Extension; | 
 
 
 
 
 
 
 
 | 892 | + | Fdat_files[i].Size := FQuery.FieldByName('size').AsInteger; | 
 
 
 
 
 
 
 
 | 893 | + | Fdat_files[i].FileType := HexToLong(FQuery.FieldByName('contenttype').AsString); | 
 
 
 
 
 
 
 
 | 894 | + | Fdat_files[i].DatAddr := 0; | 
 
 
 
 
 
 
 
 | 895 | + | Fdat_files[i].opened := False; | 
 
 
 
 
 
 
 
 | 896 | + | Inc(i); | 
 
 
 
 
 
 
 
 | 897 | + | FQuery.Next; | 
 
 
 
 
 
 
 
 | 898 | + | until FQuery.EOF; | 
 
 
 
 
 
 
 
 | 899 | + | end; | 
 
 
 
 
 
 
 
 | 900 | + | FQuery.Close; | 
 
 
 
 
 
 
 
 | 901 | + |  | 
 
 
 
 
 
 
 
 | 902 | + | SetLength(Fdat_extensionsmap, 0); | 
 
 
 
 
 
 
 
 | 903 | + | FQuery.SQL.Text := | 
 
 
 
 
 
 
 
 | 904 | + | 'SELECT extension,count(extension) AS x FROM datfiles GROUP BY extension ORDER BY extension ASC;'; | 
 
 
 
 
 
 
 
 | 905 | + | FQuery.Open; | 
 
 
 
 
 
 
 
 | 906 | + | if FQuery.RecordCount > 0 then | 
 
 
 
 
 
 
 
 | 907 | + | begin | 
 
 
 
 
 
 
 
 | 908 | + | SetLength(Fdat_extensionsmap, FQuery.RecordCount); | 
 
 
 
 
 
 
 
 | 909 | + | i := 0; | 
 
 
 
 
 
 
 
 | 910 | + | repeat | 
 
 
 
 
 
 
 
 | 911 | + | temps := FQuery.FieldByName('extension').AsString[1]; | 
 
 
 
 
 
 
 
 | 912 | + | Fdat_extensionsmap[i].Extension[3] := temps[1]; | 
 
 
 
 
 
 
 
 | 913 | + | Fdat_extensionsmap[i].Extension[2] := temps[2]; | 
 
 
 
 
 
 
 
 | 914 | + | Fdat_extensionsmap[i].Extension[1] := temps[3]; | 
 
 
 
 
 
 
 
 | 915 | + | Fdat_extensionsmap[i].Extension[0] := temps[4]; | 
 
 
 
 
 
 
 
 | 916 | + | Fdat_extensionsmap[i].ExtCount := FQuery.FieldByName('x').AsInteger; | 
 
 
 
 
 
 
 
 | 917 | + | Inc(i); | 
 
 
 
 
 
 
 
 | 918 | + | FQuery.Next; | 
 
 
 
 
 
 
 
 | 919 | + | until FQuery.EOF; | 
 
 
 
 
 
 
 
 | 920 | + | end; | 
 
 
 
 
 
 
 
 | 921 | + | FQuery.Close; | 
 
 
 
 
 
 
 
 | 922 | + | end; | 
 
 
 
 
 
 
 
 | 923 | + |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 924 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 925 |  | function TOniDataADB.GetFileInfo(fileid: LongWord): TFileInfo; | 
 
 
 
 
 
 
 
 | 926 | + | var | 
 
 
 
 
 
 
 
 | 927 | + | i: Integer; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 928 |  | begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 929 |  | if fileid < Self.GetFilesCount then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 930 |  | begin | 
 
 
 
 
 
 
 
 
 
 
 | 931 | < | FQuery.SQL.Text := 'SELECT * FROM datfiles WHERE id=' + IntToStr( | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 932 | < | fileid) + ' ORDER BY id ASC;'; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 933 | < | FQuery.Open; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 934 | < | if FQuery.RecordCount = 1 then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 935 | < | begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 936 | < | FQuery.First; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 937 | < | Result.ID      := FQuery.FieldByName('id').AsInteger; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 879 | < | Result.Name    := FQuery.FieldByName('name').AsString; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 880 | < | Result.Extension := FQuery.FieldByName('extension').AsString; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 881 | < | Result.FileName := FormatNumber(Result.ID, 5, '0') + '-' + Result.Name + '.' + | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 882 | < | Result.Extension; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 883 | < | Result.Size    := FQuery.FieldByName('size').AsInteger; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 884 | < | Result.FileType := HexToLong(FQuery.FieldByName('contenttype').AsString); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 885 | < | Result.DatAddr := 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 886 | < | Result.opened  := False; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 887 | < | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 888 | < | FQuery.Close; | 
 
 
 
 
 
 
 
 
 | 931 | > | for i := 0 to High(Fdat_files) do | 
 
 
 
 
 | 932 | > | if Fdat_files[i].ID = fileid then | 
 
 
 
 
 | 933 | > | Break; | 
 
 
 
 
 | 934 | > | if i < Length(Fdat_files) then | 
 
 
 
 
 | 935 | > | Result := Fdat_files[i] | 
 
 
 
 
 | 936 | > | else | 
 
 
 
 
 | 937 | > | Result.ID := -1; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 938 |  | end | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 939 |  | else | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 940 |  | begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 948 |  | function TOniDataADB.GetFilesList(ext: String; pattern: String; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 949 |  | NoEmptyFiles: Boolean; sort: TSortType): TStringArray; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 950 |  | var | 
 
 
 
 
 
 
 
 
 
 
 | 951 | < | i:     LongWord; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 952 | < | where: String; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 953 | < | where_ext: String; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 954 | < | order: String; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 955 | < | begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 956 | < | where := ''; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 957 | < | if Length(ext) > 0 then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 958 | < | begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 959 | < | if Length(where) > 0 then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 911 | < | where := where + ' AND '; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 912 | < | if Pos(',', ext) > 0 then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 913 | < | begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 914 | < | i := 1; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 915 | < | where_ext := ''; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 916 | < | while i < Length(ext) do | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 917 | < | begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 918 | < | if Length(where_ext) > 0 then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 919 | < | where_ext := where_ext + ' OR '; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 920 | < | where_ext := where_ext + '(extension="' + MidStr(ext, i, 4) + '")'; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 921 | < | i := i + 5; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 922 | < | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 923 | < | where := where + '(' + where_ext + ')'; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 924 | < | end | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 925 | < | else | 
 
 
 
 
 
 
 
 
 | 951 | > | i: LongWord; | 
 
 
 
 
 | 952 | > | list: TStringList; | 
 
 
 
 
 | 953 | > | id, name, extension: String; | 
 
 
 
 
 | 954 | > | fields: TStrings; | 
 
 
 
 
 | 955 | > |  | 
 
 
 
 
 | 956 | > | procedure getfields; | 
 
 
 
 
 | 957 | > | begin | 
 
 
 
 
 | 958 | > | fields.CommaText := StringReplace(AnsiQuotedStr(list.Strings[i], '"'), ';', '","', [rfReplaceAll]); | 
 
 
 
 
 | 959 | > | if sort in [stIDAsc, stIDDesc] then | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 960 |  | begin | 
 
 
 
 
 
 
 
 
 
 
 | 961 | < | where := where + '(extension="' + ext + '")'; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 961 | > | id := fields.Strings[0]; | 
 
 
 
 
 | 962 | > | name := fields.Strings[1]; | 
 
 
 
 
 | 963 | > | extension := fields.Strings[2]; | 
 
 
 
 
 | 964 | > | end; | 
 
 
 
 
 | 965 | > | if sort in [stNameAsc, stNameDesc] then | 
 
 
 
 
 | 966 | > | begin | 
 
 
 
 
 | 967 | > | id := fields.Strings[1]; | 
 
 
 
 
 | 968 | > | name := fields.Strings[0]; | 
 
 
 
 
 | 969 | > | extension := fields.Strings[2]; | 
 
 
 
 
 | 970 | > | end; | 
 
 
 
 
 | 971 | > | if sort in [stExtAsc, stExtDesc] then | 
 
 
 
 
 | 972 | > | begin | 
 
 
 
 
 | 973 | > | id := fields.Strings[1]; | 
 
 
 
 
 | 974 | > | name := fields.Strings[2]; | 
 
 
 
 
 | 975 | > | extension := fields.Strings[0]; | 
 
 
 
 
 
 
 
 
 
 
 | 976 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 977 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 | 978 | < | if Length(pattern) > 0 then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 979 | < | begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 980 | < | if Length(where) > 0 then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 981 | < | where := where + ' AND '; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 982 | < | where := where + '(name LIKE "%' + pattern + '%")'; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 935 | < | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 936 | < | if NoEmptyFiles then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 937 | < | begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 938 | < | if Length(where) > 0 then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 939 | < | where := where + ' AND '; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 940 | < | where := where + '(contenttype<>2)'; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 941 | < | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 942 | < | if Length(where) > 0 then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 943 | < | where := ' WHERE ' + where; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 944 | < | case sort of | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 945 | < | stIDAsc:    order := ' ORDER BY id ASC'; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 946 | < | stIDDesc:   order := ' ORDER BY id DESC'; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 947 | < | stNameAsc:  order := ' ORDER BY name ASC, id ASC'; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 948 | < | stNameDesc: order := ' ORDER BY name DESC, id ASC'; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 949 | < | stExtAsc:   order := ' ORDER BY extension ASC, id ASC'; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 950 | < | stExtDesc:  order := ' ORDER BY extension DESC, id ASC'; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 951 | < | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 952 | < | FQuery.SQL.Text := 'SELECT id,name,extension FROM datfiles' + where + order + ';'; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 953 | < | FQuery.Open; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 954 | < | if FQuery.RecordCount > 0 then | 
 
 
 
 
 
 
 
 
 | 978 | > |  | 
 
 
 
 
 | 979 | > | begin | 
 
 
 
 
 | 980 | > | list := TStringList.Create; | 
 
 
 
 
 | 981 | > | list.Sorted := True; | 
 
 
 
 
 | 982 | > | for i := 0 to High(Fdat_files) do | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 983 |  | begin | 
 
 
 
 
 
 
 
 
 
 
 | 984 | < | FQuery.First; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 985 | < | SetLength(Result, FQuery.RecordCount); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 986 | < | i := 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 987 | < | repeat | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 988 | < | Result[i] := FormatNumber(FQuery.FieldByName('id').AsInteger, 5, '0') + '-' + | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 989 | < | FQuery.FieldByName('name').AsString + '.' + FQuery.FieldByName('extension').AsString; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 990 | < | Inc(i); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 991 | < | FQuery.Next; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 992 | < | until FQuery.EOF; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 984 | > | if ((Length(ext) = 0) or (Pos(Fdat_files[i].Extension, ext) > 0)) and | 
 
 
 
 
 | 985 | > | ((Length(pattern) = 0) or | 
 
 
 
 
 | 986 | > | (Pos(UpperCase(pattern), UpperCase(Fdat_files[i].Name)) > 0)) then | 
 
 
 
 
 | 987 | > | begin | 
 
 
 
 
 | 988 | > | if (NoEmptyFiles = False) or ((Fdat_files[i].FileType and $02) = 0) then | 
 
 
 
 
 | 989 | > | begin | 
 
 
 
 
 | 990 | > | if AppSettings.FilenumbersAsHex then | 
 
 
 
 
 | 991 | > | id := IntToHex(Fdat_files[i].ID, 4) | 
 
 
 
 
 | 992 | > | else | 
 
 
 
 
 | 993 | > | id := FormatNumber(Fdat_files[i].ID, 5, '0'); | 
 
 
 
 
 | 994 | > | name := Fdat_files[i].Name; | 
 
 
 
 
 | 995 | > | extension := Fdat_files[i].Extension; | 
 
 
 
 
 | 996 | > |  | 
 
 
 
 
 | 997 | > | case sort of | 
 
 
 
 
 | 998 | > | stIDAsc, stIDDesc:     list.Add(id + ';' + name + ';' + extension); | 
 
 
 
 
 | 999 | > | stNameAsc, stNameDesc: list.Add(name + ';' + id + ';' + extension); | 
 
 
 
 
 | 1000 | > | stExtAsc, stExtDesc:   list.Add(extension + ';' + id + ';' + name); | 
 
 
 
 
 | 1001 | > | end; | 
 
 
 
 
 | 1002 | > | end; | 
 
 
 
 
 | 1003 | > | end; | 
 
 
 
 
 
 
 
 
 
 
 | 1004 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 | 1005 | < | FQuery.Close; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1005 | > | SetLength(Result, list.Count); | 
 
 
 
 
 | 1006 | > | fields := TStringList.Create; | 
 
 
 
 
 | 1007 | > | if sort in [stIDAsc, stNameAsc, stExtAsc] then | 
 
 
 
 
 | 1008 | > | for i := 0 to list.Count - 1 do | 
 
 
 
 
 | 1009 | > | begin | 
 
 
 
 
 | 1010 | > | getfields; | 
 
 
 
 
 | 1011 | > | Result[i] := id + '-' + name + '.' + extension; | 
 
 
 
 
 | 1012 | > | end | 
 
 
 
 
 | 1013 | > | else | 
 
 
 
 
 | 1014 | > | for i := list.Count - 1 downto 0 do | 
 
 
 
 
 | 1015 | > | begin | 
 
 
 
 
 | 1016 | > | getfields; | 
 
 
 
 
 | 1017 | > | Result[list.Count - i - 1] := id + '-' + name + '.' + extension; | 
 
 
 
 
 | 1018 | > | end; | 
 
 
 
 
 | 1019 | > | list.Free; | 
 
 
 
 
 | 1020 | > | fields.Free; | 
 
 
 
 
 
 
 
 
 
 
 | 1021 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1022 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1023 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1025 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1026 |  | function TOniDataADB.GetFilesCount: LongWord; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1027 |  | begin | 
 
 
 
 
 
 
 
 
 
 
 | 1028 | < | FQuery.SQL.Text := 'SELECT Count(*) AS cnumber FROM datfiles;'; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 975 | < | FQuery.Open; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 976 | < | if FQuery.RecordCount > 0 then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 977 | < | begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 978 | < | FQuery.First; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 979 | < | Result := FQuery.FieldByName('cnumber').AsInteger; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 980 | < | end | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 981 | < | else | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 982 | < | Result := 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 983 | < | FQuery.Close; | 
 
 
 
 
 
 
 
 
 | 1028 | > | Result := Length(Fdat_files); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1029 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1030 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1031 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1035 |  | var | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1036 |  | i: LongWord; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1037 |  | begin | 
 
 
 
 
 
 
 
 
 
 
 | 1038 | < | SetLength(Result, 0); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1039 | < | FQuery.SQL.Text := | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 995 | < | 'SELECT extension,count(extension) AS x FROM datfiles GROUP BY extension ORDER BY extension ASC;'; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 996 | < | FQuery.Open; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 997 | < | if FQuery.RecordCount > 0 then | 
 
 
 
 
 
 
 
 
 | 1038 | > | SetLength(Result, Length(Fdat_extensionsmap)); | 
 
 
 
 
 | 1039 | > | for i := 0 to High(Result) do | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1040 |  | begin | 
 
 
 
 
 
 
 
 
 
 
 | 1041 | < | SetLength(Result, FQuery.RecordCount); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1042 | < | i := 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1043 | < | repeat | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1044 | < | Result[i] := FQuery.FieldByName('extension').AsString + ' (' + | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1045 | < | IntToStr(FQuery.FieldByName('x').AsInteger) + ')'; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1004 | < | Inc(i); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1005 | < | FQuery.Next; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1006 | < | until FQuery.EOF; | 
 
 
 
 
 
 
 
 
 | 1041 | > | with Fdat_extensionsmap[i] do | 
 
 
 
 
 | 1042 | > | begin | 
 
 
 
 
 | 1043 | > | Result[i] := Extension[3] + Extension[2] + Extension[1] + Extension[0] + | 
 
 
 
 
 | 1044 | > | ' (' + IntToStr(ExtCount) + ')'; | 
 
 
 
 
 | 1045 | > | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1046 |  | end; | 
 
 
 
 
 
 
 
 
 | 1008 | – | FQuery.Close; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1047 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1048 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1049 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1176 |  | mem.Write(Data[0], Length(Data)); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1177 |  | mem.Seek(0, soFromBeginning); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1178 |  | FQuery.SQL.Text := 'UPDATE datfiles SET data=MimeToBin("' + | 
 
 
 
 
 
 
 
 
 
 
 | 1179 | < | MimeCoder.StrTo(mem.Memory, mem.Size) + '") WHERE id=' + IntToStr(fileid) + ';'; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1179 | > | MimeCoder.StrTo(mem.Memory, mem.Size) + '"), size=' + IntToStr(mem.Size) + | 
 
 
 
 
 | 1180 | > | ' WHERE id=' + IntToStr(fileid) + ';'; | 
 
 
 
 
 
 
 
 
 
 
 | 1181 |  | FQuery.ExecSQL; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1182 |  | mem.Free; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1183 |  | mimecoder.Free; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1184 |  | end; | 
 
 
 
 
 
 
 
 | 1185 | + | UpdateListCache; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1186 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1187 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 1188 |  |  |