|
On 06/06/2013 15:17, Antonio Fortuny
wrote:
Hi all,
I tried reviewed the code and commented the try...except
statement for more debug:
procedure TfrmMainWindow.bitBtn1Click(Sender: TObject);
begin
//try
DataModuleConn.openConnection;
DataModuleConn.MySQL55Conn.Transaction :=
DataModuleConn.SQLTransaction;
//DataModuleConn.MySQL55Conn.Transaction.Active:=False;
DataModuleConn.SQLTransaction.DataBase:=DataModuleConn.MySQL55Conn;
DataModuleConn.SQLQuery.DataBase:=DataModuleConn.MySQL55Conn;
DataModuleConn.SQLQuery.Transaction:=DataModuleConn.SQLTransaction;
DataModuleConn.SQLQuery.Active:=False;
DataModuleConn.SQLQuery.SQL.Text:='';
DataModuleConn.Datasource.DataSet:=DataModuleConn.SQLQuery;
DataModuleConn.Datasource.DataSet.Active:=False;
//DBGrid1.DataSource.DataSet.Active:=False;
DBGrid1.DataSource:=DataModuleConn.Datasource;
DBNavigator.DataSource:=DataModuleConn.Datasource;
if DataModuleConn.MySQL55Conn.Connected=True then begin
frmMainWindow.memReports.Append(msgOpeningDB);
frmMainWindow.memReports.Append(msgDBReady);
end;
if (cbbList1.Items[cbbList1.ItemIndex] = 'ALL') then begin
DataModuleConn.SQLQuery.SQL.Text:='SELECT gender,
year, country FROM reiser';
end
else if (cbbList1.Items[cbbList1.ItemIndex] = lisCountry1)
then begin
DataModuleConn.SQLQuery.SQL.Text:='SELECT gender,
year, country FROM reiser WHERE country = ''Dutch Republic''';
end
else //(cbbList1.Items[cbbList1.ItemIndex] = lisCountry3)
begin
DataModuleConn.SQLQuery.SQL.Text:='SELECT gender, year,
country FROM reiser WHERE country = ''Holland''';
end;
//DataModuleConn.SQLTransaction.StartTransaction;
DataModuleConn.SQLQuery.Close;
DataModuleConn.Datasource.DataSet.Active:=True;
DataModuleConn.SQLQuery.Open;
//except
// frmMainWindow.memReports.Append(ErrConnectionFailed);
//end;
end;
The first trigged for the procedure bitBtn1Click1 works fine,
the second trigged give up, with the above error:
Operation cannot be performed on an active dataset.
Could you point out which line generates the error ?
Thank you for your response
No specific line has been reported.
According to the error message, for another query to be executed,
the Dataset must be turn to false so that previous query must be
cancelled.
As a matter of fact, there are too much DB related operations.
For instance the first 9 lines after the one // Try should be
moved somewhere in an independent method and called only once in
some intialization routine.
Secondly, the two next lines do exactle the same thing, only one
of them should be removed
DataModuleConn.Datasource.DataSet.Active:=True; <====
keep this one as more datasource independent
DataModuleConn.SQLQuery.Open; <---------- this one
can be removed
This rearrangement should work provided the 9 preceeding lines
have been moved somewhere else and executed at least once
if DataModuleConn.SQLQuery.Active then
DataModuleConn.SQLQuery.Close;
if DataModuleConn.MySQL55Conn.Transaction.InTransaction then
on the DataModuleConn.MySQL55Conn.Transaction.InTransaction, the
InTransaction property/var its not reorganized by lazarus.
DataModuleConn.MySQL55Conn.Transaction.Commit;
if DataModuleConn.MySQL55Conn.Connected=True then begin
frmMainWindow.memReports.Append(msgOpeningDB);
frmMainWindow.memReports.Append(msgDBReady);
end;
if (cbbList1.Items[cbbList1.ItemIndex] = 'ALL') then begin
DataModuleConn.SQLQuery.SQL.Text:='SELECT gender, year,
country FROM reiser';
end
else if (cbbList1.Items[cbbList1.ItemIndex] = lisCountry1)
then begin
DataModuleConn.SQLQuery.SQL.Text:='SELECT gender, year,
country FROM reiser WHERE country = ''Dutch Republic''';
end
else //(cbbList1.Items[cbbList1.ItemIndex] = lisCountry3)
begin
DataModuleConn.SQLQuery.SQL.Text:='SELECT gender, year,
country FROM reiser WHERE country = ''Holland''';
end;
DataModuleConn.SQLTransaction.StartTransaction;
DataModuleConn.SQLQuery.Open;
Antonio.
Press OK to ignore and risk data corruption.
Press Cancel to kill the program.
I tried to close and open the Dataset on my procedure
bitBtn1Click1.
May you please assist me?
--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
--
|
Antonio
Fortuny
Senior Software engineer
220, avenue de la Liberté
L-4602 Niederkorn
Tel.: +352 58 00 93 - 93
www.sitasoftware.lu
|
|
--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
--
Kind Regards
Eric Kom
System Administrator & Programmer - Metropolitan College
_________________________________________
/ You are scrupulously honest, frank, and \
| straightforward. Therefore you have few |
\ friends. /
-----------------------------------------
\
\
.--.
|o_o |
|:_/ |
// \ \
(| Kom | )
/'\_ _/`\
\___)=(___/
2 Hennie Van Till, White River, 1240
Tel: 013 750 2255 | Fax: 013 750 0105 | Cell: 078 879 1334
[email protected] | [email protected]
www.kom.za.net | www.kom.za.org | www.erickom.co.za
Key fingerprint: 513E E91A C243 3020 8735 09BB 2DBC 5AD7 A9DA 1EF5
|
--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus