I know that you have background of BDE. What you are thinking is operations on table. Now you are using TSQLQuery using select statement. TTable or TSQLQuery are descendants of TDataSet. So, when we say dataset, it means a structure that lie behind a table structure.
When you open TSQLQuery using 'select * from table...', then you have a local copy of the records, and what you see in the DBGrid or DBEdit fields, or values from Query.FieldByName('fieldname').AsString are all from this copy, not physical database in the server.
TDataSet.insert, TDataSet.edit, TDataSet.Post, etc. are operations on this local copy, not server file. To apply the changes on this local copy to server file, you have to call TDataSet.ApplyUpdates.
SQL statement 'insert into table..' is different from TDataSet.Insert. This statement operates directly on server database, and has nothing to do with current open dataset.
So in your program, with your open Query, i.e. Dataset, :
1) Query.insert should be done on active dataset.
2) If you want Query.Edit and ApplyUpdates, you have to find the record using Locate, not SQL statement ('select * ...).
Now, to move on to SQL programming,
Use separate TSQLQuery --- I mean drop another TSQLQuery component, and use it for SQL statements of 'insert into table1 values ...' or 'update table1 set ....' etc.