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)
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).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;
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
Per avere negli appunti tutte le query che vengono eseguite.codice:if G_MODO_DEBUG then clipboard.astext:=querydaeseguire;
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;

Rispondi quotando