Newsgroup: it.comp.lang.delphi
Titolo: IBExpress e SQL

Salve, sono agli inizi con i database e ho scelto Firebird per
interfacciarlo con Delphi. Usando IBTable riesco agevolmente a fare quello
che vorrei, ma per molte cose IBTable non è adatto, come saprete meglio di
me. Quindi ho la necessità di usare IBQuery, trovandomi subito a sbattere il
naso col problema della modifica/eliminazione dati che non funge se non si
setta lo status a dsEdit.
Il problema è che non riesco a capire come cavolo settarlo su dsEdit, ho il
libro di Marco Cantu ma non son riuscito a capire questa parte (anche perchè
in realtà mi sembra un libro piuttosto avanzato, adatto ha già un po' di
esperienza).
L'altra cosa che mi servirebbe sapere è come poter aggiornare da un unico
form dati che stanno in più tabelle di un database.
Grazie sin d'ora a chi mi darà una mano :)
Francesco

form dati che stanno in più tabelle di un database.
Non ho capito...
-- 
Andrea Laforgia
www.geocities.com/andrealaforgia
"640kb of memory should be enough for anyone." -- Bill Gates.

premesso che la responsabilità dell'aggiornamento del db compete non tanto
al form quanto ai componenti di accesso ai dati che utilizza, presumo tu
intenda il caso in cui hai UN SOLO OGGETTO  che mostra e/o aggiorna dati di
+ tabelle sul db.
In questo caso, potresti gestire a mano l'update del db usando l'evento
OnUpdateRecord.
Bye
A.

Grande! Mi è bastato usare la componente IBDataSet per raggiungere lo scopo,
collegandola
ad un datasource e da li ai data controls inseriti nel form. Non sono invece
riuscito a capire come
usare TDataSetProvider e TClientDataSet, anche perchè non son riuscito a
interfacciarlo coi data
controls ... forse si usano per accedere ai dati in rete LAN ?
Fatto sta che per inserire/editare/aggiungere dati in locale sembra bastare
TIBDataSet, e per ora questo
mi basta. L'altro problema, che ho spiegato molto male nel precedente
messaggio è il seguente:
in un form ho delle componenti DBEdit, e di queste alcune puntano a una
tabella e altri a un'altra.
In pratica li visualizzerei con un Master/Detail. Ora, per fare in modo che
scorrendo col DBNavigator
i record, vengano aggiornati anche i dati posti nelle altre tabelle, basta
che faccia la query in modo
che ci siano gli opportuni Join oppure devo fare diversamente?
Spero di essermi spiegato meglio ora.
Thx
"Andrea Laforgia" <x@x.x> ha scritto nel messaggio
news:mbk79v4frnr7395ik...@4ax.com...


che ci siano gli opportuni Join oppure devo fare diversamente?
Generalmente, questa operazione è da specificare esplicitamente e
dipende dal DB (con Paradox, per es., è possibile impostare un livello
di integrità referenziale "a cascata").  Con IB, puoi sfruttare un
trigger "after post", ecc... ecc...


Cavoli ... non riesco mica a capire come collegare il CDS a un DataSource
... se setto
la proprietà DataSet del DataSource su ClientDataSet1 (che ovviamente è il
nome che ho dato
al CDS...) i dati non vengono visualizzati correttamente. Questo perchè il
CDS non è attivo (almeno
penso). Solo che se provo ad attivarlo mi da questo messaggio d'errore:
"ClientDataSet1: Circular Provider references not allowed"
Comunque, visto che già usando IBDataSet si ottiene la possibilità di
inserire/modificare/cancellare i dati,
quindi vorrei capire i vantaggi di usare i CDS, che sicuramente ci saranno
ma che sinora non ho afferrato...
Per quel che riguarda l'aggiornamento dei dati in altre tabelle ... credo di
essermi spiegato di nuovo male :)))
Io intendo questo: per esempio, mettiamo in un form un DBEdit che prende il
campo nome dalla tabella utenti.
Mettiamo nello stesso form un DBEdit che prende il campo barcode dalla
tabella codici. I due dati fanno riferimento
a due tabelle distinte, ma sono collegati attraverso un apposito campo
univoco ... ora io voglio che vengano visualizzati
entrambi sullo stesso form, e vengano modificati in base a come vengono
modificati nel form. Per questo
non è possibile (almeno se ho ben capito) usare un generico trigger, o
sbaglio?!!
(non dirmi che sbaglio :D)
Francesco
"Andrea Laforgia" <x@x.x> ha scritto nel messaggio
news:ube89vcsfcsgkon1q...@4ax.com...


modificati nel form.
Sicuramente continuo a non capire, per modificare il dato puntato da
un DBEdit, basta agire sulla proprità Field:
DBEdit1.Field.Value := 42;


Seguendo il tuo consiglio il ClientDataSet funge, nel senso che me lo lascia
attivare, ma poi
non fa il suo dovere perchè non assegna correttamente il valore del campo
che in GeneratorField
nel IBDataSet è stato definito. E chiaramente questo fa si che non vada a
buon fine la transizione.
Se invece uso il solo IBDataSet collegando direttamente questo a un
DataSource, allora va.
Grazie per la spiegazione sull'utilità del CDS, credo decisamente che per il
livello ancora molto base
a cui mi trovo possa essere utile la maggior velocità del CDS, visto che
sicuramente non ci gestirò grossi
database. E' anche vero che sono talmente agli inizi che sono ancora lontano
dalla fase di ottimizzazione
del codice, per ora è già una certa soddisfazione quando riesco a farlo
fungere :))
Venendo al discorso delle tabelle ... ci siamo avvicinati ma non sono ancora
riuscito a spiegarmi perfettamente.
Direi che si tratta proprio di una relazione master/detail ... cioè a una
scheda utente corrisponderà uno o più
barcode; quanto alla modifica, io vorrei sapere se usando il DBNavigator per
muovermi all'interno dei dati,
incluso il pulsante per del DBNavigator per crearne uno nuovo, viene
aggiornato anche il dato nella tabella
del dettaglio (per così dire ... in pratica quella dove c'è il barcode).
Spero di essermi spiegato.
Grazie davvero ... ci vuole pazienza coi novizi :))
"Andrea Laforgia" <x@x.x> ha scritto nel messaggio
news:map89v8nu3i7s2vno...@4ax.com...


del dettaglio (per così dire ... in pratica quella dove c'è il barcode).
No.
Devi compiere l'operazione manualmente.   In ogni caso, io evito di
usare componenti come il DBNavigator, uso dei bottoni espliciti per le
operazioni Nuovo/Modifica/Cancella, ecc... ecc...



    Via De Gasperi, 14 - 42019
    Scandiano (Reggio Emilia)

database.
Visto che non l'hai mai usato prima, prendi come riferimento questa pagina
http://homepages.borland.com/dmiser/midas.htm
-- 
Morde. 
morde[at]programmer[.]net

una caratteristica specifica del dbExpress.
Sul ClientDataSet (prop. PacketRecords).



http://homepages.borland.com/dmiser/midas.htm
Il riferimento migliore che conosca è la serie di articoli di Cary
Jensen sul CDS, che trovi pubblicato della soapbox.


Jensen sul CDS, che trovi pubblicato della soapbox.
Infatti lo avevi postato su mia richiaesta tempo fa:
http://bdn.borland.com/soapbox/professionaldeveloper/
