I personally use this code copying row from table1 to table2 nevertheless its produce "Command Text doesn't return an effect set".

 ADOQuery1.Close;
 ADOQuery1.SQL.Clear;
 ADOQuery1.SQL.Add('insert into Table1');
 ADOQuery1.SQL.Add('select Field1 ,Field2 from Table2');
 ADOQuery1.SQL.Add('where ArtNo= 1');
 ADOQuery1.Open;
 ADOQuery1.Refresh ;

Basically avoid using

 ADOQuery1.Open;

it provides me with "ADOQuery1: Cannot perform this operation on the closed dataset." It copy this things i want only once.
How to get it done copying many occasions.

Thanks.

For scripts that don't open a cursor (like place, update or professional ones) make use of the ExecSQL Approach to TADOQuery.

It returns a Integer representing the amount of affected rows because of your query.

ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('insert into Table1');
ADOQuery1.SQL.Add('select Field1 ,Field2 from Table2');
ADOQuery1.SQL.Add('where ArtNo= 1');
NumRows := ADOQuery1.ExecSQL;
ShowMessageFmt('Affected rows on Table2: %d', [NumRows]);