database - Delphi: TDBGrid not update -


i had form has datasource,adoquery,adoconnection,dbgrid plus couple edit , memo. user enter username,street address, etc.. , hit 'save' button. on time application write details in comma separated txt file, connected access linked table. when user hit 'save' button write memo instantly not live update dbgrid database, when reopen app.

i search lot has different suggestions: dbgrid refresh, adorequery, post, append, showmodal, open , close database etc.

my question why dbgrid liveupdate doesn't work?

sourcecode following:


unit test;

interface  uses   windows, messages, sysutils, variants, classes, graphics, controls, forms,   dialogs, stdctrls, strutils, grids, buttons, pngimage, extctrls,   comctrls, dbgrids, db, dbtables, colorgrd, diroutln, adodb,   fmtbcd, sqlexpr, dbctrls, dbclient, jpeg;      type       tform1 = class(tform)         memo1: tmemo;         exit: tbutton;         resetbtn: tbutton;         label3: tlabel;         groupbox1: tgroupbox;         label7: tlabel;         label8: tlabel;         groupbox2: tgroupbox;         label1: tlabel;         edit1: tedit;         edit2: tedit;         edit3: tedit;         generate: tbutton;         groupbox3: tgroupbox;         label5: tlabel;         label6: tlabel;         checkbox1: tcheckbox;         image1: timage;         image2: timage;         button6: tbutton;         datetimepicker1: tdatetimepicker;         groupbox4: tgroupbox;         label10: tlabel;         label9: tlabel;         dellastentry: tbutton;         adoconnection1: tadoconnection;         adoquery1: tadoquery;         datasource1: tdatasource;         dbgrid1: tdbgrid;         label13: tlabel;         label14: tlabel;         label16: tlabel;         label17: tlabel;         label18: tlabel;         label2: tlabel;         label4: tlabel;         label11: tlabel;         label15: tlabel;         adoquery1username: twidestringfield;         adoquery1requestednumber: twidestringfield;         adoquery1allocatednumber: twidestringfield;         adoquery1dateofrequest: twidestringfield;         procedure exitclick(sender: tobject);         procedure resetbtnclick(sender: tobject);         procedure formcreate(sender: tobject);         procedure dellastentryclick(sender: tobject);         procedure generateclick(sender: tobject);         procedure checkbox1click(sender: tobject);         procedure formshow(sender: tobject);         procedure button6click(sender: tobject);         procedure formkeydown(sender: tobject; var key: word; shift: tshiftstate);          private         { private declarations }       public         { public declarations }       end;      var       form1: tform1;      implementation       {$r *.dfm}      function getcurrentusername: string;      const       cnmaxusernamelen = 50;     var       susername: string;       dwusernamelen: dword;      begin       dwusernamelen := cnmaxusernamelen - 1;       setlength(susername, cnmaxusernamelen);       getusername(pchar(susername), dwusernamelen);       setlength(susername, dwusernamelen);       result := susername;      end;       procedure tform1.exitclick(sender: tobject);     begin      memo1.lines.savetofile('c:\numbergen\numberdb.txt');      form1.close;      end;      procedure tform1.resetbtnclick(sender: tobject);     begin      edit1.clear;      edit2.clear;     end;       procedure tform1.formcreate(sender: tobject);     begin        memo1.lines.loadfromfile('c:\numbergen\numberdb.txt');         memo1.wordwrap := true;     end;      procedure tform1.formkeydown(sender: tobject; var key: word;       shift: tshiftstate);     begin       form1.showmodal;        form1.free;     end;      procedure tform1.formshow(sender: tobject);        var lstrings: tstringlist;     begin      datasource1.dataset.append;      label6.caption :=getcurrentusername;        lstrings := tstringlist.create;       lstrings.delimiter := ',';       lstrings.delimitedtext := memo1.lines[memo1.lines.count-1];       label8.caption:= lstrings.strings[0];       label13.caption:= lstrings.strings[1];       label14.caption:= lstrings.strings[2];       label15.caption:= lstrings.strings[3];     end;      procedure tform1.dellastentryclick(sender: tobject);     begin      memo1.lines.delete(memo1.lines.count-1);     end;      procedure tform1.button6click(sender: tobject);     var val2, sum: integer;      begin       val2 := strtoint(edit3.text);       sum := val2;       edit3.text := (inttostr(sum+1));      end;      procedure tform1.checkbox1click(sender: tobject);     begin      if checkbox1.checked              edit1.text :=  label6.caption       else edit1.text :='';     end;      procedure tform1.generateclick(sender: tobject);      var  val1, val2, sum: integer;     begin      val1 := strtoint(edit2.text);      val2 := strtoint(edit3.text);      sum := val1 + val2;      edit3.text :=  inttostr(sum);      memo1.lines.savetofile('c:\numbergen\numberdb.txt');        if edit1.text =('')        messagedlg('invalid/blank username! please enter one!',mterror, mbokcancel, 0)       else       memo1.lines.add(edit1.text+',' +edit2.text+','+inttostr(sum-val1)+'-'+edit3.text+ ','+formatdatetime('yyyy/mm/dd', datetimepicker1.date) );     end;     end. 

thank

it's not responsibility of tdbgrid save changes data, need yourself. in other words, reason data isn't getting saved aren't calling "save" method of adoquery1. method called post, somewhere in code, e.g. non-existent "save" button's onclick handler should doing

if adoquery1.state in [dsedit, dsinsert]   adoquery1.post; 

btw, reason data gets saved @ current code dataset operations (not dbgrid ones) cause changes dataset posted. these include causing dataset's logical cursor scroll, e.g. clicking in different row in dbgrid or closing dataset. extremely bad practice rely on - form should provide user explicit way save , cancel changes dataset.

also btw, never write code have in formkeydown - accident waiting happen.


Comments

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -