Francamente non è che abbia capito benissimo.
Iniziamo a dire che il TDBGRID (collegato a una TABELLA) scrive i suoi dati tranquillamente senza necessità di dover far nulla.

Se la domanda è "come inserisco i dati da codice" la risposta è:
ci sono un 4 o 5 metodi.

Se hai una TABELLA allora niente Insert e blablabla, bensì
(supponiamo si chiami miatabella : Ttable o Tztable o quello che vuoi)
codice:
with miatabella do
begin
    Append; // oppure edit
    fieldbyname('campo1').asstring:='ciao';
    fieldbyname('campo2').asinteger:=35;
    fieldbyname('campo3').asfloat:=100.3;
    Post; // ovviamente una cosa fatta bene prevede try...except
end;
Attenzione ai campi data (datetime), spesso - dipende dalla libreria - ti tocca fare una funzione data2datasql, che converte una TDATE (Delphi) in una stringa in formato adatto per SQL (tipicamente anno-mese-giorno).
In questo caso (ZEOS) non dovrebbe essere necessario

Le istruzioni INSERT (di SQL) non si specificano nelle TABELLE, bensì nelle QUERY (TZQUERY in particolare), se le hai.
Anche qui ci sono 4 o 5 metodi diversi, personalmente creo la query sotto forma di stringa "vera", compilata di tutto.
Ed ho una funzione XSQL che le esegue.
Personalmente sconsiglio l'utilizzo di "sostituzioni volanti" per il semplice fatto che rendi molto più difficile il debug (è questione di abitudini); nel caso ti basta mettere nella XSQL un banale
codice:
if G_MODO_DEBUG then clipboard.astext:=querydaeseguire;
Per avere negli appunti tutte le query che vengono eseguite.

Se vuoi fare qualcosa di un pochino più furbo potresti anche utilizzare una funzione di query "universale" (non specifica di ZEOS)

codice:
procedure UNIXSQL(var i_tabellaQuery:Tobject;i_comandodiretto:string;i_silent:boolean=true);
begin
   if i_tabellaQuery=nil then
   begin
     loggaErrore('ERRORE: itabellauqery NIL!',TRUE);
     exit;
   end;
   if uppercase(i_tabellaquery.classname)='TZQUERY' then
       ZXSQL(TZQuery(i_tabellaQuery),i_comandodiretto,i_silent);
/// questi sono esempi con altre librerie di accesso a DB

   if uppercase(i_tabellaquery.classname)='TMYQUERY' then
       DACXSQL(TmyQuery(i_tabellaQuery),i_comandodiretto,i_silent);

   if uppercase(i_tabellaquery.classname)='TSOLCAZZOQUERY' then
       SOLCAZZOXSQL(TsolcazzoQuery(i_tabellaQuery),i_comandodiretto,i_silent);

end;
codice:
procedure ZXSQL(var i_tabellaQuery:TZQuery;i_comandodiretto:string;i_silent:boolean=true);
var	
   s:string;
   i:integer;
  cursore:tcursor;
begin
	
   cursore:=screen.cursor;
   Screen.Cursor := crHourGlass;

   try
// questo è tristissimo, serve per raddoppiare le \
// in realtà potresti fare anche un while con stringreplace
// ma cambia poco
      s:='';
      for i:=1 to length(i_comandodiretto) do
       begin
         s:=s+i_comandodiretto[i];
         if i_comandodiretto[i]='barra-che-sparisce-scrivendo' then
             s:=s+'barra-che-sparisce-scrivendo';
        end;

   i_comandodiretto:=s;
   {
   if G_MODO_DEBUG then
       clipboard.astext:=s;
       }
    with I_tabellaquery do
    begin
          if active then
            Close;
       SQL.Text:=i_comandodiretto;
       try
           if pos('SELECT',uppercase(trim(i_comandodiretto)))=1 then
                open
           Else
              ExecSQL;

       except
             on E: Exception do
               if not i_silent then
               begin
                   frmgurumeditation.i_messaggio:='ZQUERY errata :'+sql.text+'|'+E.Message;
                   frmgurumeditation.showmodal;

               end;

       end;
   end;
   except
   end;
   Screen.Cursor:=cursore;

end;