Newsgroup: it.comp.lang.delphi
Titolo: ClientDataset e indice Firebird

Salve ragazzi, ho una Ibquery con db Firebird legata ad un Cds tramite 
DatasetProvider, ovviamente firebird ha un campo indice legato ad un 
generatore tramite trigger.
il problema ï¿œ che quando faccio applyupdates sul cds mi restituisce 
errore perchï¿œ l'indice non ï¿œ valorizzato.
essendo la prima volta che passo per i cds per gli inserimenti, prima li 
usavo solo per ricerche etc.. come posso risolvere? grazie in anticipo :)

C_thelegend ha scritto:

Crea una vista o una stored procedure che ti restituisca il valore del 
generatore che utilizzi per la gestione del campo intero 
"autoincrementale" e richiamala quando ï¿œ necessario creare un nuovo 
record, prima di inviarlo al database, in modo che tale record sia giï¿œ 
corredato della chiave primaria che lo contraddistingue; in questo modo, 
una volta completato il salvataggio, Delphi sarï¿œ in grado di reperire i 
valori aggiornati dei campi del record tramite la chiave.
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

 
Ciao Marco e grazie, non avevo pensato a usare una stored, cosa normale 
per una master detail.

 
Scusami Marco, avrei un'altra domanda, c'ï¿œ un modo per identificare la 
tabella di un campo di un cds? grazie ancora

 per una master detail.
Non so cosa c'entra il "master/detail", perchï¿œ si tratta di un approccio 
generale. :)
La stored ï¿œ solo uno dei tanti strumenti; la cosa importante ï¿œ che la 
chiave identificativa del record che si va a salvare non venga stabilita 
lato server senza che l'applicazione Delphi ne sia a conoscenza, 
altrimenti non ha alcun strumento per poter ottenere i dati aggiornati 
una volta che il record ï¿œ stato inviato al server.


 tabella di un campo di un cds? grazie ancora
Cioï¿œ? Spiegati meglio perchï¿œ non ï¿œ molto chiaro ciï¿œ che chiedi...


 
allora, cerco di essere piï¿œ chiaro, ho il mio bravo cds che ï¿œ legato ad 
una ibquery tramite il datasetprovider io vorrei identificare la tabella 
di un campo del cds, per esempio
RagioneSociale di quale tabella faccia parte, se fornitori o clienti o 
trasportatori.
ho visto che l'unica cosa per identificare il datasetprovider ï¿œ il nome 
ma io vorrei identificare la tabella del campo senza dover fare cose 
assurde...

Sembra che C_thelegend abbia detto :

Non capisco cosa scrivi...
Tu hai un cds che ha come dataprovider una query.
La tua "tabella" ï¿œ quella query, non vedo altri arzigogoli a riguardo.
Eventualmente, all'interno di quella query, potresti avere una colonna 
il cui contenuto potrebbe indicarti la sorgente da cui ï¿œ stato preso 
quella riga, ad esempio la colonna Tipo 
(C=Clienti,F=Fatture,M=Magazzino) potrebbe indicare che quella riga 
arriva dall'anagrafica clienti fornitori o dalle fatture, magazzino, 
ecc..
Ma tu hai sempre a che fare con una query.
Ad ogni modo, rileggendo il thread prima di postare, mi sono accorto 
che forse ti spieghi talmente male che tu chiedi semplicemente come fa 
il CDS a fare l'applyupdates.. beh in questo caso l'update ï¿œ garantito 
se nella struttura dei fields il CDS riesce a trovare la primary key, 
diversamente hai un errore perchï¿œ non si riesce a determinare in modo 
univoco un record.
-- 
Morde

 
il problema originario l'ho risolto, ho poi chiesto a Marco se c'era un 
modo per sapere a quale tabella appartiene un campo CDS. Cerco di 
spiegarti cosa sto facendo forse si capisce meglio.
Ho creato una superclasse che crea una form anagrafica in modo 
automatico partendo da un CDS, con pannello inserimento con i campi, 
griglia, tasti etc etc...
ora mi sono chiesto e se devo creare una dbcombobox?
la soluzione che ho trovato ï¿œ inserire i valori nella descrizione del 
campo firebird, perï¿œ per fare una query che mi restituisca il valore 
della descrizione necessito della tabella a cui fa riferimento il campo 
stesso. da qui la domanda, come trovo la tabella a cui fa riferimento il 
campo cds?
spero di essere stato chiaro.
Grazie

 ora mi sono chiesto e se devo creare una dbcombobox?
Gli devi passare un dataset a parte con il set di records relativi, 
ovviamente con il CDS principale non puoi e non ï¿œ neanche il posto 
giusto dal quale attingere informazioni per il combo.
Ciao
-- 
Morde

Morde ha scritto:

ho fatto cosï¿œ vedi se ti piace,
nella descrizione del campo ho inserito i valori della combo con un 
separatore (il pipe), scorro la famosa descrizione ed in una tstringlist 
metto il risultato poi assegno il tutto al dbcombobox.items, il mio 
problema era ricavare quello che c'era nella descrizione del campo 
risolto spulciando i metodi del cds, infatti esiste la proprietï¿œ ORigin 
che viene automaticamente assegnata uguale alla query, es: se la origin 
del campo della query ï¿œ "clienti"."RagioneSociale" nel cds il campo avrï¿œ 
lo stesso valore, per passare solo clienti ho creato una funzione che mi 
  restituisce clienti.
Grazie dei suggerimenti :)