QBESqlDb.pas 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. {*******************************************************}
  2. { }
  3. { Open QBuilder Engine for SQLDB Sources }
  4. { Lazarus / Free Pascal }
  5. { }
  6. { Created by Reinier Olislagers }
  7. { Data: October 2014 }
  8. { }
  9. {*******************************************************}
  10. unit QBESqlDb;
  11. interface
  12. uses
  13. SysUtils, Classes, DB, sqldb, QBuilder;
  14. type
  15. { TOQBEngineSqlDB }
  16. TOQBEngineSqlDB = class(TOQBEngine)
  17. procedure FResultQueryAfterOpen(DataSet: TDataSet);
  18. procedure GridMemoFieldGetText(Sender: TField; var aText: string;
  19. {%H-}DisplayText: Boolean);
  20. private
  21. FResultQuery: TSQLQuery;
  22. FSqlDBConnection : TSQLConnection;
  23. public
  24. constructor Create(AOwner: TComponent); override;
  25. destructor Destroy; override;
  26. procedure ClearQuerySQL; override;
  27. procedure CloseResultQuery; override;
  28. procedure OpenResultQuery; override;
  29. procedure ReadFieldList(const ATableName: string); override;
  30. procedure ReadTableList; override;
  31. procedure SaveResultQueryData; override;
  32. procedure SetConnection(Value: TSQLConnection);
  33. procedure SetQuerySQL(const Value: string); override;
  34. function ResultQuery: TDataSet; override;
  35. function SelectDatabase: Boolean; override;
  36. procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  37. published
  38. property Connection: TSQLConnection read FSqlDBConnection write SetConnection;
  39. end;
  40. implementation
  41. { TOQBEngineSqlDB }
  42. procedure TOQBEngineSqlDB.FResultQueryAfterOpen(DataSet: TDataSet);
  43. var
  44. i: Integer;
  45. begin
  46. for i := 0 to DataSet.Fields.Count - 1 do
  47. begin
  48. if DataSet.Fields[i].DataType = ftMemo then
  49. begin
  50. DataSet.Fields[i].OnGetText := @GridMemoFieldGetText;
  51. end;
  52. end;
  53. end;
  54. procedure TOQBEngineSqlDB.GridMemoFieldGetText(Sender: TField;
  55. var aText: string; DisplayText: Boolean);
  56. begin
  57. // Show memo fields
  58. aText := TField(Sender).AsString;
  59. end;
  60. constructor TOQBEngineSqlDB.Create(AOwner: TComponent);
  61. begin
  62. inherited;
  63. FResultQuery := TSQLQuery.Create(Self);
  64. FResultQuery.AfterOpen := @FResultQueryAfterOpen;
  65. end;
  66. destructor TOQBEngineSqlDB.Destroy;
  67. begin
  68. FResultQuery.Free;
  69. inherited;
  70. end;
  71. procedure TOQBEngineSqlDB.SetConnection(Value: TSQLConnection);
  72. begin
  73. FSqlDBConnection := Value;
  74. FResultQuery.Database := Value;
  75. end;
  76. function TOQBEngineSqlDB.SelectDatabase: Boolean;
  77. begin
  78. Result := True;
  79. end;
  80. procedure TOQBEngineSqlDB.ReadTableList;
  81. begin
  82. TableList.Clear;
  83. TSQLConnection(FResultQuery.Database).GetTableNames(TableList, ShowSystemTables);
  84. end;
  85. procedure TOQBEngineSqlDB.ReadFieldList(const ATableName: string);
  86. begin
  87. FieldList.Clear;
  88. TSQLConnection(FResultQuery.Database).GetFieldNames(ATableName, FieldList);
  89. FieldList.Insert(0, '*');
  90. end;
  91. procedure TOQBEngineSqlDB.ClearQuerySQL;
  92. begin
  93. FResultQuery.SQL.Clear;
  94. end;
  95. procedure TOQBEngineSqlDB.SetQuerySQL(const Value: string);
  96. begin
  97. FResultQuery.SQL.Text := Value;
  98. end;
  99. function TOQBEngineSqlDB.ResultQuery: TDataSet;
  100. begin
  101. Result := FResultQuery;
  102. end;
  103. procedure TOQBEngineSqlDB.OpenResultQuery;
  104. begin
  105. try
  106. FResultQuery.Open;
  107. finally
  108. end;
  109. end;
  110. procedure TOQBEngineSqlDB.CloseResultQuery;
  111. begin
  112. FResultQuery.Close;
  113. end;
  114. {$WARNINGS OFF}
  115. procedure TOQBEngineSqlDB.SaveResultQueryData;
  116. begin
  117. //
  118. end;
  119. {$WARNINGS ON}
  120. procedure TOQBEngineSqlDB.Notification(AComponent: TComponent;
  121. Operation: TOperation);
  122. begin
  123. inherited;
  124. if (AComponent = FSqlDBConnection) and (Operation = opRemove) then
  125. begin
  126. FSqlDBCOnnection := nil;
  127. FResultQuery.Database := nil;
  128. end;
  129. end;
  130. end.