|
@@ -178,8 +178,8 @@ type
|
|
|
fQueryPart: string;
|
|
|
fTab: TTabSheet;
|
|
|
fmeResult: TMemo;
|
|
|
- fSqlQuery: TSQLQuery;
|
|
|
- fSqlScript: TSQLScript;
|
|
|
+ fSQLQuery: TSQLQuery;
|
|
|
+ fSQLScript: TSQLScript;
|
|
|
faText: string;
|
|
|
fModifyCount: Integer;
|
|
|
fCnt: Integer;
|
|
@@ -209,6 +209,7 @@ type
|
|
|
procedure Init(dbIndex: Integer);
|
|
|
function GetQueryType(AQuery: string): TQueryTypes;
|
|
|
function GetQuery: string;
|
|
|
+ // Takes existing query or script and uses it to create result tab
|
|
|
function CreateResultTab(QueryType: TQueryTypes; var aSqlQuery: TSQLQuery; var aSQLScript: TSqlScript;
|
|
|
var meResult: TMemo; AdditionalTitle: string = ''): TTabSheet;
|
|
|
// Runs SQL script; returns result
|
|
@@ -739,9 +740,11 @@ var
|
|
|
QT: TQueryThread;
|
|
|
begin
|
|
|
RemoveControls;
|
|
|
- ATab:= CreateResultTab(qtExecute, SqlQuery, SqlScript, meResult);
|
|
|
+ SQLQuery:= TSQLQuery.Create(nil);
|
|
|
+ SQLScript:= TSQLScript.Create(nil);
|
|
|
QT:= TQueryThread.Create(qaCommit);
|
|
|
try
|
|
|
+ ATab:= CreateResultTab(qtExecute, SqlQuery, SqlScript, meResult);
|
|
|
QT.Trans:= fSqlTrans;
|
|
|
ATab.ImageIndex:= 6;
|
|
|
|
|
@@ -768,11 +771,11 @@ begin
|
|
|
OnCommit(self);
|
|
|
OnCommit:= nil;
|
|
|
end;
|
|
|
-
|
|
|
finally
|
|
|
QT.Free;
|
|
|
+ SQLScript.Free;
|
|
|
+ SQLQuery.Free;
|
|
|
end;
|
|
|
-
|
|
|
end;
|
|
|
|
|
|
|
|
@@ -864,9 +867,11 @@ var
|
|
|
QT: TQueryThread;
|
|
|
begin
|
|
|
RemoveControls;
|
|
|
- ATab:= CreateResultTab(qtExecute, SqlQuery, SqlScript, meResult);
|
|
|
+ SQLQuery:= TSQLQuery.Create(nil);
|
|
|
+ SQLScript:= TSQLScript.Create(nil);
|
|
|
QT:= TQueryThread.Create(qaRollBack);
|
|
|
try
|
|
|
+ ATab:= CreateResultTab(qtExecute, SqlQuery, SqlScript, meResult);
|
|
|
QT.Trans:= fSqlTrans;
|
|
|
ATab.ImageIndex:= 6;
|
|
|
QT.Resume;
|
|
@@ -890,9 +895,10 @@ begin
|
|
|
OnCommit:= nil;
|
|
|
meResult.Font.Color:= $AA6666;
|
|
|
end;
|
|
|
-
|
|
|
finally
|
|
|
QT.Free;
|
|
|
+ SqlQuery.Free;
|
|
|
+ SQLScript.Free
|
|
|
end;
|
|
|
end;
|
|
|
|
|
@@ -1061,7 +1067,8 @@ begin
|
|
|
if QueryType = qtSelectable then // Select, need record set result
|
|
|
begin
|
|
|
// Query
|
|
|
- aSqlQuery:= TSQLQuery.Create(nil);
|
|
|
+ if not(assigned(aSQLQuery)) then
|
|
|
+ raise Exception.Create('Query object does not yet exist. Pass an existing query object to this function.');
|
|
|
aSqlQuery.DataBase:= ibConnection;
|
|
|
aSqlQuery.Transaction:= fSqlTrans;
|
|
|
aSqlQuery.AfterScroll:= @QueryAfterScroll;
|
|
@@ -1128,16 +1135,16 @@ begin
|
|
|
case QueryType of
|
|
|
qtExecute:
|
|
|
begin
|
|
|
- aSqlQuery:= TSQLQuery.Create(nil);
|
|
|
+ if not(assigned(aSQLQuery)) then
|
|
|
+ raise Exception.Create('Query object does not yet exist. Pass an existing query object to this function.');
|
|
|
aSqlQuery.DataBase:= ibConnection;
|
|
|
aSqlQuery.Transaction:= fSqlTrans;
|
|
|
AddResultControl(ATab, aSqlQuery);
|
|
|
end;
|
|
|
qtScript: // Script
|
|
|
begin
|
|
|
- //todo: strip out this create stuff; pass existing object to function.
|
|
|
- // makes it easier to understand who is responsible for clearing up
|
|
|
- aSQLScript:= TSQLScript.Create(nil);
|
|
|
+ if not(assigned(aSQLScript)) then
|
|
|
+ raise Exception.Create('Script object does not yet exist. Pass an existing script object to this function.');
|
|
|
aSQLScript.DataBase:= ibConnection;
|
|
|
aSQLScript.Transaction:= fSqlTrans;
|
|
|
aSQLScript.CommentsInSQL:= true; //pass on comments. They cannot hurt
|
|
@@ -1192,7 +1199,7 @@ begin
|
|
|
begin
|
|
|
fTab:= nil;
|
|
|
try
|
|
|
- fTab:= CreateResultTab(qtSelectable, fSqlQuery, fSqlScript, fmeResult);
|
|
|
+ fTab:= CreateResultTab(qtSelectable, fSQLQuery, fSQLScript, fmeResult);
|
|
|
fTab.ImageIndex:= 6;
|
|
|
fTab.Hint:= fQueryPart;
|
|
|
fTab.ShowHint:= True;
|
|
@@ -1200,7 +1207,7 @@ begin
|
|
|
|
|
|
// Create thread to open dataset
|
|
|
fQT:= TQueryThread.Create(qaOpen);
|
|
|
- fQT.Query:= fSqlQuery;
|
|
|
+ fQT.Query:= fSQLQuery;
|
|
|
// fQT.OnTerminate:= @ThreadTerminated;
|
|
|
faText:= fTab.Caption;
|
|
|
fTab.Caption:= 'Running..';
|
|
@@ -1227,7 +1234,7 @@ begin
|
|
|
fTab.TabVisible:= False;
|
|
|
SetLength(fResultControls, High(fResultControls));
|
|
|
SetLength(fParentResultControls, High(fParentResultControls));
|
|
|
- fTab:= CreateResultTab(qtExecute, fSqlQuery, fSqlScript, fmeResult);
|
|
|
+ fTab:= CreateResultTab(qtExecute, fSQLQuery, fSQLScript, fmeResult);
|
|
|
PageControl1.ActivePage:= fTab;
|
|
|
|
|
|
fmeResult.Text:= e.message;
|
|
@@ -1242,7 +1249,7 @@ begin
|
|
|
if fQueryType = qtExecute then
|
|
|
begin
|
|
|
fTab:= nil;
|
|
|
- fTab:= CreateResultTab(qtExecute, fSqlQuery, fSqlScript, fmeResult);
|
|
|
+ fTab:= CreateResultTab(qtExecute, fSQLQuery, fSQLScript, fmeResult);
|
|
|
|
|
|
fTab.ImageIndex:= 1;
|
|
|
SqlType:= GetSQLType(fQueryPart, Command);
|
|
@@ -1277,8 +1284,8 @@ begin
|
|
|
end
|
|
|
else
|
|
|
begin // DML
|
|
|
- fSqlQuery.Close;
|
|
|
- fSqlQuery.SQL.Text:= fQueryPart;
|
|
|
+ fSQLQuery.Close;
|
|
|
+ fSQLQuery.SQL.Text:= fQueryPart;
|
|
|
fTab.ImageIndex:= 6;
|
|
|
fTab.Hint:= fQueryPart;
|
|
|
fTab.ShowHint:= True;
|
|
@@ -1287,7 +1294,7 @@ begin
|
|
|
// Execute the statement in thread
|
|
|
fQT:= TQueryThread.Create(qaExec);
|
|
|
try
|
|
|
- fQT.Query:= fSqlQuery;
|
|
|
+ fQT.Query:= fSQLQuery;
|
|
|
fQT.Resume;
|
|
|
faText:= fTab.Caption;
|
|
|
fTab.Caption:= 'Running..';
|
|
@@ -1309,7 +1316,7 @@ begin
|
|
|
end;
|
|
|
fTab.Caption:= faText;
|
|
|
fTab.ImageIndex:= 1;
|
|
|
- Affected:= fsqlQuery.RowsAffected;
|
|
|
+ Affected:= fSQLQuery.RowsAffected;
|
|
|
end;
|
|
|
Inc(fModifyCount);
|
|
|
|
|
@@ -1334,7 +1341,7 @@ begin
|
|
|
begin
|
|
|
if Assigned(fTab) then
|
|
|
fTab.TabVisible:= False;
|
|
|
- fTab:= CreateResultTab(qtExecute, fSqlQuery, fSqlScript, fmeResult);
|
|
|
+ fTab:= CreateResultTab(qtExecute, fSQLQuery, fSQLScript, fmeResult);
|
|
|
PageControl1.ActivePage:= fTab;
|
|
|
fmeResult.Text:= e.message;
|
|
|
fmeResult.Lines.Add(fQueryPart);
|
|
@@ -1358,7 +1365,7 @@ begin
|
|
|
begin
|
|
|
if Assigned(fTab) then
|
|
|
fTab.TabVisible:= False;
|
|
|
- fTab:= CreateResultTab(qtExecute, fSqlQuery, fSqlScript, fmeResult);
|
|
|
+ fTab:= CreateResultTab(qtExecute, fSQLQuery, fSQLScript, fmeResult);
|
|
|
PageControl1.ActivePage:= fTab;
|
|
|
fmeResult.Text:= e.message;
|
|
|
fmeResult.Lines.Add(fQueryPart);
|
|
@@ -1388,7 +1395,7 @@ begin
|
|
|
begin
|
|
|
if Assigned(fTab) then
|
|
|
fTab.TabVisible:= False;
|
|
|
- fTab:= CreateResultTab(qtExecute, fSqlQuery, fSqlScript, fmeResult);
|
|
|
+ fTab:= CreateResultTab(qtExecute, fSQLQuery, fSQLScript, fmeResult);
|
|
|
fTab.ImageIndex:= 2;
|
|
|
PageControl1.ActivePage:= fTab;
|
|
|
|
|
@@ -1414,7 +1421,8 @@ var
|
|
|
begin
|
|
|
StartTime:= Now;
|
|
|
ATab:= nil;
|
|
|
- SQLScript:= nil;
|
|
|
+ SQLQuery:= TSQLQuery.Create(nil);
|
|
|
+ SQLScript:= TSQLScript.Create(nil);
|
|
|
try
|
|
|
// CreateResultTab creates the SQLScript object for us.
|
|
|
ATab:= CreateResultTab(qtScript, SqlQuery, SQLScript, meResult);
|
|
@@ -1434,6 +1442,7 @@ begin
|
|
|
meResult.Lines.Add('--------');
|
|
|
meResult.Lines.Add(Script);
|
|
|
finally
|
|
|
+ SQLQuery.Free;
|
|
|
SQLScript.Free;
|
|
|
end;
|
|
|
except
|
|
@@ -1705,6 +1714,8 @@ begin
|
|
|
// Initialize new instance of IBConnection and SQLTransaction
|
|
|
ibConnection:= TIBConnection.Create(nil);
|
|
|
fSqlTrans:= TSQLTransaction.Create(nil);
|
|
|
+ FSQLQuery:= TSQLQuery.Create(nil);
|
|
|
+ FSQLScript:= TSQLScript.Create(nil);
|
|
|
SynCompletion1.ItemList.CommaText:= 'create,table,Select,From,INTEGER,FLOAT';
|
|
|
SortSynCompletion;
|
|
|
end;
|
|
@@ -1712,6 +1723,8 @@ end;
|
|
|
procedure TfmQueryWindow.FormDestroy(Sender: TObject);
|
|
|
begin
|
|
|
// Clean up resources to avoid memory leaks
|
|
|
+ FSQLQuery.Free;
|
|
|
+ FSQLScript.Free;
|
|
|
fSqlTrans.Free;
|
|
|
IBConnection.Free;
|
|
|
FList.Free;
|
|
@@ -2152,7 +2165,7 @@ begin
|
|
|
fTab.TabVisible:= False;
|
|
|
SetLength(fResultControls, High(fResultControls));
|
|
|
SetLength(fParentResultControls, High(fParentResultControls));
|
|
|
- fTab:= CreateResultTab(qtExecute, fSqlQuery, fSqlScript, fmeResult);
|
|
|
+ fTab:= CreateResultTab(qtExecute, fSQLQuery, fSQLScript, fmeResult);
|
|
|
PageControl1.ActivePage:= fTab;
|
|
|
|
|
|
fmeResult.Text:= fQT.ErrorMsg;
|