Author Topic: operation cannot be performed on inactive dataset  (Read 4178 times)

azizi_lazard1988

  • New Member
  • *
  • Posts: 24
operation cannot be performed on inactive dataset
« on: December 14, 2016, 01:04:26 am »
hello friends.
i have a source application it work fine connected in server ( the application it's in  windows xp 32 bits)

when i install it in windows 7 32 bits and i connect it to my local database the programmes with reports doesn't work and i got  this error  message when i excute the project

note i verify connection to my databse it's fine ,so where is the problem ?

JanRoza

  • Hero Member
  • *****
  • Posts: 755
    • http://www.silentwings.nl
Re: operation cannot be performed on inactive dataset
« Reply #1 on: December 14, 2016, 07:22:21 am »
I think you should show us your source code, otherwise no one will be able to tell you what is wrong.
Plus give your version of Lazarus and FPC.
We don't use crystal balls anymore these days so some insight in code is really necessary.  ::)
OS: Windows 11 / Linux Mint 22.3
       Lazarus 4.6 RC FPC 3.2.2
       CodeTyphon 8.90 FPC 3.3.1

kapibara

  • Hero Member
  • *****
  • Posts: 665
Re: operation cannot be performed on inactive dataset
« Reply #2 on: December 14, 2016, 07:42:43 am »
Also, what database are you using.
Lazarus trunk / fpc 3.3.1 / Kubuntu 24.04 - 64 bit

azizi_lazard1988

  • New Member
  • *
  • Posts: 24
Re: operation cannot be performed on inactive dataset
« Reply #3 on: December 14, 2016, 08:10:56 am »
i use the lazarus 1.2.0 fpc 2-6-2
i tell you the same program work fine in other pc just i import it in my pc it dosen't work ?
this the code
Code: Pascal  [Select][+][-]
  1. unit paiement;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  9.   StdCtrls, EditBtn, DBGrids, mainDataModule, LR_Class, LR_DBSet;
  10.  
  11. type
  12.  
  13.   { TPaiementForm }
  14.  
  15.   TPaiementForm = class(TForm)
  16.     AjouterButton: TButton;
  17.     AnnulerButton: TButton;
  18.     AppercuButton: TButton;
  19.     ComboBox1: TComboBox;
  20.     DateEdit1: TDateEdit;
  21.     DBGrid1: TDBGrid;
  22.     Edit1: TEdit;
  23.     Edit2: TEdit;
  24.     Edit3: TEdit;
  25.     Edit4: TEdit;
  26.     Edit5: TEdit;
  27.     Edit6: TEdit;
  28.     frDBDataSet1: TfrDBDataSet;
  29.     frReport1: TfrReport;
  30.     Label1: TLabel;
  31.     Label2: TLabel;
  32.     Label3: TLabel;
  33.     Label4: TLabel;
  34.     Label5: TLabel;
  35.     Label6: TLabel;
  36.     Label7: TLabel;
  37.     Label8: TLabel;
  38.     ModifierButton: TButton;
  39.     SupprimerButton: TButton;
  40.     ValiderButton: TButton;
  41.     procedure AjouterButtonClick(Sender: TObject);
  42.     procedure AnnulerButtonClick(Sender: TObject);
  43.     procedure AppercuButtonClick(Sender: TObject);
  44.     procedure DBGrid1CellClick(Column: TColumn);
  45.     procedure Edit1Change(Sender: TObject);
  46.     procedure ModifierButtonClick(Sender: TObject);
  47.     procedure SupprimerButtonClick(Sender: TObject);
  48.     procedure ValiderButtonClick(Sender: TObject);
  49.   private
  50.     { private declarations }
  51.   public
  52.     { public declarations }
  53.   end;
  54.  
  55. implementation
  56.  
  57. { TPaiementForm }
  58. uses main;
  59.  
  60. var Sql: String;
  61.   ClickedButton: Char;
  62.  
  63. function convert(N:Integer):String;
  64. Const
  65. Unite:Array[1..12] of String=('واحد','إثنان','ثلاثة','أربعة','خمسة','ستة',
  66. 'سبعة','ثمانية','تسعة','عشرة','احدى عشر','اثنتا عشر');
  67. Dizaine:Array[1..9]of String=('عشر','عشرون','ثلاثون','أربعون',
  68. 'خمسون','ستون','سبعون','ثمانون','تسعون');
  69. Ordre1:Array[0..3]of String=('مائة','ألف','مليون','مليار');
  70. Ordre2:Array[0..3]of String=('مئتان','ألفان','مليونان','ملياران');
  71. Ordre3:Array[1..3]of String=('آلاف','ملايين','ملايير');
  72. Var
  73. T:Array[1..4] of Integer;
  74. Temp : String;
  75. C,D,U : Byte;
  76. I : Word;fait:boolean;
  77.  
  78. Begin
  79. If N=0 then
  80. Begin
  81. Result:=' صفر';
  82. Exit;
  83. End;
  84. Result:='';
  85. For i:=4 downto 1 do
  86. Begin
  87. T[i]:=N mod 1000;
  88. N:=N div 1000;
  89. End;
  90.  
  91. for i:=4 downto 2 do
  92. begin
  93.         if i <> 4 then
  94.         begin
  95.                 if T[i]=1 then Result:=Ordre1[4-i]+' '+Result
  96.                 Else If T[i]=2 then Result:=Ordre2[4-i]+' '+Result
  97.                      Else
  98.                 Begin
  99. If (T[i] mod 100 <11)and (T[i] mod 100 >2) then Result:=Ordre3[4-i]+' '+Result
  100. Else If T[i] mod 100 =2 then Result:=Ordre2[4-i]+' '+Result
  101. Else If (T[i] mod 100 <>0) then Result:=Ordre1[4-i]+' '+Result
  102.         else if (T[i] mod 100 =0) and(T[i]<>0) then Result:=Ordre1[4-i]+' '+Result;
  103.                 end;
  104.         end;
  105.         If T[i]>0 then
  106.         Begin
  107.         fait:=false; Temp:='';
  108.         U:=T[i] mod 10; //T[4]:=T[4] div 10;
  109.         D:=(T[i]div 10) mod 10; //T[4]:=T[4] div 10;
  110. If i=4 then If (D=0)and (U>1)then  Temp:=' '+Unite[U]
  111. else  If (D=0)and (U>2)then  Temp:=' '+Unite[U];
  112.         If (D=1) and (U<3) then
  113.                 Begin
  114.                 Dec(D);
  115.                 Inc(U,10);
  116.                 Temp:=' '+Unite[U];
  117.                 End
  118.         Else
  119.         If (D=1) and (U>2)then
  120.                 Begin
  121.                 Temp:=' '+Unite[U]+' '+Dizaine[D];
  122.                 fait:=true;
  123.                 End;
  124.         If not fait then
  125.                 begin
  126.                 If i<>4 then
  127.                 begin
  128.                 If (U>0)and(T[i]mod 100>2) then Temp:=' '+Unite[U];
  129.                 end
  130.                 else If (U>0) then Temp:=' '+Unite[U];
  131.                 If (D>1) and (U>0) then Temp:=Temp+' و';
  132.                 If (D>=1) then Temp:=Temp+' '+Dizaine[D];
  133.                 end;
  134.         If Temp <>'' then Result:=' '+Temp+' '+Result;
  135.         C:=(T[i] div 100) mod 10; //T[4]:=T[4] div 10;
  136.         If C>0 then
  137.                 Begin
  138.                         Temp:='';
  139.                         If C=2 then Temp:=Temp+' '+Ordre2[0]
  140.                         Else
  141.                         Begin
  142.                         If C>2 then Temp:=' '+Unite[C]+Temp;
  143.                         Temp:=Temp+' '+Ordre1[0];
  144.                         End;
  145.                         If (Result<>'') and (T[i] mod 100 <> 0) then Result:=' و'+Result;
  146.                         Result:=Temp+' '+Result;
  147.                 End;
  148.                 Case i of
  149.                 4:If (T[3]>0)or(T[2]>0)or(T[1]>0) then Result:='و'+Result;
  150.                 3:If (T[2]>0)or(T[1]>0) then Result:='و'+Result;
  151.                 2:If (T[1]>0) then Result:='و'+Result;
  152.                 End;
  153.         End;
  154.         End;
  155. If T[1]>0 then
  156. Begin
  157. Result:=Ordre1[3]+' '+Result;
  158. end;
  159. end;
  160.  
  161. procedure TPaiementForm.DBGrid1CellClick(Column: TColumn);
  162. begin
  163.    Edit1.OnChange:=nil;
  164.    Edit1.Text:=DataModule1.PaiementQuery.FieldByName('nu_paiement').Text;
  165.    Edit1.OnChange:=@Edit1Change;
  166.    Edit2.Text:=DataModule1.PaiementQuery.FieldByName('client').Text;
  167.    Edit3.Text:=DataModule1.PaiementQuery.FieldByName('montant').Text;
  168.    Edit4.Text:=DataModule1.PaiementQuery.FieldByName('ref_commande').Text;
  169.    Edit5.Text:=DataModule1.PaiementQuery.FieldByName('mode_paiement').Text;
  170.    Edit6.Text:=DataModule1.PaiementQuery.FieldByName('note').AsString;
  171.    DateEdit1.Text:=DataModule1.PaiementQuery.FieldByName('date_paiement').Text;
  172.    ComboBox1.ItemIndex:=DataModule1.PaiementQuery.FieldByName('type').AsInteger;
  173. end;
  174.  
  175. procedure TPaiementForm.Edit1Change(Sender: TObject);
  176. begin
  177.   DateEdit1.Clear;
  178.   Edit2.Clear;
  179.   Edit3.Clear;
  180.   Edit4.Clear;
  181.   Edit5.Clear;
  182.   Edit6.Clear;
  183.   ComboBox1.ClearSelection;
  184.   DataModule1.PaiementQuery.Active:=False;
  185.   DataModule1.PaiementQuery.Active:=True;
  186.   if DataModule1.PaiementQuery.Locate('nu_paiement',Edit1.Text,[]) then
  187.   begin
  188.   DateEdit1.Text:=DataModule1.PaiementQuery.FieldByName('date_paiement').Text;
  189.   Edit2.Text:=DataModule1.PaiementQuery.FieldByName('client').Text;
  190.   Edit3.Text:=DataModule1.PaiementQuery.FieldByName('montant').Text;
  191.   ComboBox1.ItemIndex:=DataModule1.PaiementQuery.FieldByName('type').AsInteger;
  192.   Edit4.Text:=DataModule1.PaiementQuery.FieldByName('ref_commande').Text;
  193.   Edit5.Text:=DataModule1.PaiementQuery.FieldByName('mode_paiement').Text;
  194.   Edit6.Text:=DataModule1.PaiementQuery.FieldByName('note').AsString;
  195.   end;
  196. end;
  197.  
  198. procedure TPaiementForm.AjouterButtonClick(Sender: TObject);
  199. begin
  200.   Self.Edit1.OnChange:=nil;
  201.   Self.DbGrid1.OnCellClick:=nil;
  202.   ClickedButton:='N';
  203.   Edit1.ReadOnly:=True;
  204.   Edit2.ReadOnly:=False;
  205.   DateEdit1.Enabled:=True;
  206.   Edit3.ReadOnly:=False;
  207.   Edit4.ReadOnly:=False;
  208.   Edit5.ReadOnly:=False;
  209.   Edit6.ReadOnly:=False;
  210.   ComboBox1.Enabled:=True;
  211.   AjouterButton.Enabled:=false;
  212.   ModifierButton.Enabled:=false;
  213.   SupprimerButton.Enabled:=false;
  214.   AnnulerButton.Enabled:=true;
  215.   ValiderButton.Enabled:=true;
  216. end;
  217.  
  218. procedure TPaiementForm.ModifierButtonClick(Sender: TObject);
  219. begin
  220.   Self.Edit1.OnChange:=nil;
  221.   Self.DbGrid1.OnCellClick:=nil;
  222.   ClickedButton:='M';
  223.   Edit1.ReadOnly:=True;
  224.   Edit2.ReadOnly:=False;
  225.   DateEdit1.Enabled:=True;
  226.   Edit3.ReadOnly:=False;
  227.   Edit4.ReadOnly:=False;
  228.   Edit5.ReadOnly:=False;
  229.   Edit6.ReadOnly:=False;
  230.   ComboBox1.Enabled:=True;
  231.   AjouterButton.Enabled:=false;
  232.   ModifierButton.Enabled:=false;
  233.   SupprimerButton.Enabled:=false;
  234.   AnnulerButton.Enabled:=true;
  235.   ValiderButton.Enabled:=true;
  236. end;
  237.  
  238. procedure TPaiementForm.SupprimerButtonClick(Sender: TObject);
  239. begin
  240.   DataModule1.NombreLettreQuery.Active:=False;
  241.   DataModule1.NombreLettreQuery.SQL.Text:='SELECT "Max_Facture"()::integer as max_facture;';
  242.   DataModule1.NombreLettreQuery.Active:=True;
  243.   if StrToInt(Edit1.Text)+1=DataModule1.NombreLettreQuery.FieldByName('max_facture').AsInteger then
  244.   begin
  245.     Self.Edit1.OnChange:=nil;
  246.     Self.DbGrid1.OnCellClick:=nil;
  247.     Edit1.ReadOnly:=True;
  248.     ClickedButton:='S';
  249.     AjouterButton.Enabled:=false;
  250.     ModifierButton.Enabled:=false;
  251.     SupprimerButton.Enabled:=false;
  252.     AnnulerButton.Enabled:=true;
  253.     ValiderButton.Enabled:=true;
  254.   end
  255.   else ShowMessage('impossible de supprimer : ceci n''est pas le dernier numéro de facture');
  256. end;
  257.  
  258. procedure TPaiementForm.ValiderButtonClick(Sender: TObject);
  259. begin
  260.   Self.Edit1.OnChange:=@Self.Edit1Change;
  261.   Self.DbGrid1.OnCellClick:=@Self.DbGrid1CellClick;
  262.   if DateEdit1.Text=DateToStr(DateEdit1.Date) then
  263.   begin
  264.   Case ClickedButton of
  265.        'N' : Sql:='INSERT INTO "Paiement" (nu_paiement,client,montant,date_paiement,type,ref_commande,mode_paiement,note) VALUES ("Max_Facture"(),'''+Edit2.text+''','''+Edit3.Text+''','''+DateToStr(DateEdit1.Date)+''','+IntToStr(ComboBox1.ItemIndex)+','''+Edit4.Text+''','''+Edit5.Text+''','''+Edit6.Text+''');';
  266.        'M' : Sql:='UPDATE "Paiement"  SET date_paiement='''+DateToStr(DateEdit1.Date)+''',client='''+Edit2.Text+''',montant='+Edit3.Text+',type='+ IntToStr(ComboBox1.ItemIndex)+',ref_commande='''+Edit4.Text+''',mode_paiement='''+Edit5.Text+''',note='''+Edit6.Text+''' WHERE nu_paiement='''+Edit1.Text+''';';
  267.        'S' : Sql:='DELETE FROM "Paiement" WHERE nu_paiement='''+Edit1.Text+''';';
  268.   end;
  269.   ClickedButton:='V';
  270.   Try
  271.   DataModule1.PQConnection1.ExecuteDirect('Begin Work;');
  272.   DataModule1.PQConnection1.ExecuteDirect(Sql);
  273.   DataModule1.PQConnection1.ExecuteDirect('Commit Work;');
  274.   Except on E : Exception do
  275.   begin
  276.   DataModule1.PQConnection1.ExecuteDirect('Rollback Work;');
  277.   ShowMessage(E.Message);
  278.   end;
  279.   end;
  280.   end
  281.   else
  282.   ShowMessage('la date n''est pas valide');
  283.   Edit1.ReadOnly:=False;
  284.   Edit2.ReadOnly:=True;
  285.   DateEdit1.Enabled:=False;
  286.   Edit3.ReadOnly:=True;
  287.   Edit4.ReadOnly:=True;
  288.   Edit5.ReadOnly:=True;
  289.   Edit6.ReadOnly:=True;
  290.   ComboBox1.Enabled:=False;
  291.   AjouterButton.Enabled:=True;
  292.   ModifierButton.Enabled:=True;
  293.   SupprimerButton.Enabled:=True;
  294.   ValiderButton.Enabled:=False;
  295.   AnnulerButton.Enabled:=False;
  296.   DataModule1.PaiementQuery.Active:=False;
  297.   DataModule1.PaiementQuery.Active:=True;
  298. end;
  299.  
  300.  
  301. procedure TPaiementForm.AnnulerButtonClick(Sender: TObject);
  302. begin
  303.   Self.Edit1.OnChange:=@Self.Edit1Change;
  304.   Self.DbGrid1.OnCellClick:=@Self.DbGrid1CellClick;
  305.   Edit1.ReadOnly:=False;
  306.   Edit2.ReadOnly:=True;
  307.   DateEdit1.Enabled:=False;
  308.   Edit3.ReadOnly:=True;
  309.   Edit4.ReadOnly:=True;
  310.   Edit5.ReadOnly:=True;
  311.   Edit6.ReadOnly:=True;
  312.   ComboBox1.Enabled:=False;
  313.   AjouterButton.Enabled:=True;
  314.   ModifierButton.Enabled:=True;
  315.   SupprimerButton.Enabled:=True;
  316.   ValiderButton.Enabled:=False;
  317.   AnnulerButton.Enabled:=False;
  318.   DataModule1.PaiementQuery.Active:=False;
  319.   DataModule1.PaiementQuery.Active:=True;
  320. end;
  321.  
  322. procedure TPaiementForm.AppercuButtonClick(Sender: TObject);
  323. var reference : String;
  324. begin
  325.   if DataModule1.PaiementQuery.Locate('nu_paiement',Edit1.Text,[]) then
  326.   begin
  327.   DataModule1.ClientQuery.Locate('code_client',DataModule1.PaiementQuery.FieldByName('client').Text,[]);
  328.   if DataModule1.PaiementQuery.FieldByName('ref_commande').Text <> '' then
  329.   reference:=DataModule1.PaiementQuery.FieldByName('ref_commande').Text
  330.   else reference:='B.C du: '+DataModule1.PaiementQuery.FieldByName('date_paiement').Text ;
  331.   DataModule1.NombreLettreQuery.Active:=False;
  332.   DataModule1.NombreLettreQuery.SQL.Text:='SELECT '''+ Convert(Trunc(DataModule1.PaiementQuery.FieldByName('montant').AsFloat)) +'دينار و '+Convert(StrToInt(FloatToStr(Round(Frac(DataModule1.PaiementQuery.FieldByName('montant').AsFloat)*100))))+'سنتيم'+' بدون رسوم'+''+'''::text as lettre,'''+reference+'''::text as reference;';
  333.   DataModule1.NombreLettreQuery.Active:=True;
  334.   if DataModule1.PaiementQuery.FieldByName('type').AsInteger=0 then
  335.   frReport1.LoadFromFile('data/fichePaiementAvance.lrf')
  336.   else frReport1.LoadFromFile('data/fichePaiementGarantie.lrf');
  337.   frReport1.ShowReport;
  338.   end;
  339. end;
  340.  
  341. initialization
  342.   {$I paiement.lrs}
  343.  
  344. end.
  345.  

and this is the configuration of database

 

TinyPortal © 2005-2018