AppIcon.pas 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. unit AppIcon;
  2. interface
  3. uses
  4. System.Classes, BaseDataProvider, InterfaceDataProvider;
  5. type
  6. TAppIconProvider = class(TBaseDataProvider, IAppIconProvider)
  7. protected
  8. function GetTableName: string; override;
  9. function GetCreateTableSQL: string; override;
  10. public
  11. procedure Insert(AAppKey: WideString; var ABuffer); stdcall;
  12. procedure FindIcon(AAppKey: WideString; var ABuffer); stdcall;
  13. end;
  14. implementation
  15. uses
  16. FireDAC.Comp.Client, BaseDataModule, System.SysUtils, System.VarUtils, System.Variants,
  17. Data.DB, LoggerImport;
  18. const
  19. APPICON_TABLE_NAME: string = 'AppIcons';
  20. APPICON_CREATE_TABLE: string = 'CREATE TABLE AppIcons('+
  21. 'AppKey string(50), ' +
  22. 'Icon BLOB, ' +
  23. 'Version Integer, ' +
  24. 'CreateTime Double)';
  25. APPICON_INSERT: string = 'INSERT INTO AppIcons(AppKey, Icon, Version, CreateTime) VALUES(:appkey, :icon, :version, :createTime)';
  26. APPICON_DELETE: string = 'DELETE FROM AppIcons WHERE AppKey = :appkey';
  27. APPICON_FINDICON: string = 'SELECT Icon FROM AppIcons WHERE AppKey = :appkey';
  28. { TAppIconProvider }
  29. procedure TAppIconProvider.FindIcon(AAppKey: WideString; var ABuffer); stdcall;
  30. var
  31. AQuery: TFDQuery;
  32. ACode: string;
  33. begin
  34. if not Inited and not ReInit then
  35. Exit;
  36. if (AAppKey = '') then
  37. Exit;
  38. ACode := Format('TAppIconProvider.FindIcon(%s)', [AAppKey]);
  39. try
  40. AQuery := BaseDataModel.GetQuery;
  41. if AQuery = nil then
  42. Exit;
  43. AQuery.Connection.Connected := True;
  44. AQuery.Open(APPICON_FINDICON, [AAppKey]);
  45. AQuery.First;
  46. if not AQuery.Eof then
  47. TBytes(ABuffer) := AQuery.FieldByName('Icon').AsBytes;
  48. except
  49. on E: Exception do
  50. begin
  51. Error(E.Message, ACode);
  52. BaseDataModel.GiveBackQuery(AQuery);
  53. end;
  54. end;
  55. BaseDataModel.GiveBackQuery(AQuery);
  56. end;
  57. function TAppIconProvider.GetCreateTableSQL: string;
  58. begin
  59. Result := APPICON_CREATE_TABLE;
  60. end;
  61. function TAppIconProvider.GetTableName: string;
  62. begin
  63. Result := APPICON_TABLE_NAME;
  64. end;
  65. procedure TAppIconProvider.Insert(AAppKey: WideString; var ABuffer);
  66. var
  67. AConnection: TFDCustomConnection;
  68. ALen: Cardinal;
  69. begin
  70. if not Inited and not ReInit then
  71. Exit;
  72. ALen := Length(TBytes(ABuffer));
  73. if (AAppKey = '') or (ALen = 0) then
  74. Exit;
  75. AConnection := BaseDataModel.GetConnection;
  76. if AConnection = nil then
  77. Exit;
  78. try
  79. AConnection.Connected := True;
  80. AConnection.ExecSQL(APPICON_DELETE, [AAppKey]);
  81. AConnection.ExecSQL(APPICON_INSERT, [AAppKey, TBytes(ABuffer), 0, Now]);
  82. finally
  83. BaseDataModel.GiveBackConnection(AConnection);
  84. end;
  85. end;
  86. end.