[Lazarus] SQLTransaction: Operation cannot be performed on an active transaction

Antonio Fortuny a.fortuny at sitasoftware.lu
Tue Jun 4 17:14:46 CEST 2013


Le 04/06/2013 16:54, Eric Kom a écrit :
> On 04/06/2013 10:19, Antonio Fortuny wrote:
>>
> Thanks, I did changed to Commit and then caNone before it solved the 
> error, another error message pop up saying Access Violation. Anyway, 
> the problem was solved.
>
> The above code its giving me a problem; the  SQLQuery  do not changed 
> according to the condition for exemple if the first condition matched, 
> the second condition is still going to use the matching from the first 
> and vice versa.
>
>          else if  (cbbList.Items[cbbList.ItemIndex] = lisList1) then 
> begin
>               DataModuleConn.SQLTransaction1.Active:=True;
Use DataModuleConn.SQLTransaction1.StartTransaction instead, it is more 
readable ans standard
Also, if you commit or rollback the transaction most of the DataSet 
based components close their datasets as well. This means that the 
original transaction must be InTransaction for the grid to display the 
collected data. The transaction can be shared by all DataSet descendants 
though.
> DataModuleConn.SQLQuery1.SQL.Text:='SELECT year, country, gender FROM 
> reiser WHERE country = ''Dutch Republic''';
> DBGrid1.DataSource.DataSet:=DataModuleConn.SQLQuery1;
>               DBGrid1.DataSource:=DataModuleConn.Datasource;
>               DBGrid1.DataSource.DataSet.Active:=True;
>               //DataModuleConn.SQLTransaction1.Commit;
>               DataModuleConn.SQLTransaction1.CommitRetaining;
>          end
>          else if  (cbbList.Items[cbbList.ItemIndex] = lisList1) then 
> begin
>               DataModuleConn.SQLTransaction1.Active:=True;
>               DataModuleConn.SQLQuery1.SQL.Text:='SELECT year, 
> country, gender FROM reiser WHERE country = ''Holland''';
> DBGrid1.DataSource.DataSet:=DataModuleConn.SQLQuery1;
>               DBGrid1.DataSource:=DataModuleConn.Datasource;
>               DBGrid1.DataSource.DataSet.Active:=True;
>               //DataModuleConn.SQLTransaction1.Commit;
>               DataModuleConn.SQLTransaction1.CommitRetaining;
>          end;
>
>   I have tried DataModuleConn.SQLTransaction1.Rollback also, still the 
> same.
>>
>> Antonio.
>>
>>
>> -- 
>> _______________________________________________
>> Lazarus mailing list
>> Lazarus at lists.lazarus.freepascal.org
>> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
>>
>
>






More information about the Lazarus mailing list