Lazarus

Programming => Databases => Topic started by: Hansvb on June 20, 2022, 03:30:05 pm

Title: SqlQuery update status
Post by: Hansvb on June 20, 2022, 03:30:05 pm
Hi,

The user can make changes in a table via a DbGrid. Now I only want to save if there are actually mutations. How can you check for that?
I thought of doing this with SqlQuery.UpdateStataus. But this only seems to be activated if you first go to a following line in the DbGrid. I want to see the UpdateStatus change as soon as I exit the cell. Is that possible?

Code: Pascal  [Select][+][-]
  1. procedure TFrm_Main.DBGridMain1ColExit(Sender: TObject);
  2. begin
  3.   case DataModuleMain.SQLQuery1.UpdateStatus of
  4.    usUnmodified :  Button2.Caption:='usUnmodified';
  5.    usModified :  Button2.Caption:='usModified';
  6.    usInserted :  Button2.Caption:='usInserted';
  7.    usDeleted :  Button2.Caption:='usDeleted';
  8.   end;
  9. end;  
Title: Re: het SqlQuery update status
Post by: Zvoni on June 20, 2022, 03:56:09 pm
Why not use OnSelection-Event?
You need variables for oldValue, oldRow and oldCol where you save Row and Col when selecting a cell
OnSelection ships Col and Row of the newly selected Cell
Compare newValue to oldValue of Cell at "old" Col/Row, if "dirty" then update. Set oldCol/oldRow to current Col/Row, oldValue to current value
Title: Re: SqlQuery update status
Post by: Hansvb on June 20, 2022, 07:47:47 pm
Found something which i can use: Datasource.state. if a cell in DbGrid is changed the datasource state changes.

To see what happens when a cell changes:
Code: Pascal  [Select][+][-]
  1. procedure TDataModuleMain.DataSource1StateChange(Sender: TObject);
  2. begin
  3.   case DataSource1.State of
  4.   dsInactive:
  5.     begin
  6.       ShowMessage('dsInactive');
  7.     end;
  8.   dsBrowse:
  9.     begin
  10.       ShowMessage('dsBrowse');
  11.     end;
  12.   dsEdit:
  13.     begin
  14.       ShowMessage('dsEdit');
  15.     end;
  16.   dsInsert:
  17.     begin
  18.       ShowMessage('dsInsert');
  19.     end;
  20.   dsCalcFields:
  21.     begin
  22.       ShowMessage('dsCalcFields');
  23.     end;
  24.   dsCurValue:
  25.     begin
  26.       ShowMessage('dsCurValue');
  27.     end;
  28.   dsNewValue:
  29.     begin
  30.       ShowMessage('dsNewValue');
  31.     end;
  32.   dsOldValue:
  33.     begin
  34.       ShowMessage('dsOldValue');
  35.     end;
  36.   dsFilter:
  37.     begin
  38.       ShowMessage('dsFilter');
  39.     end;
  40.   end;
  41. end;  

TinyPortal © 2005-2018