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;