PDA

Visualizza la versione completa : delphi - Interbase - Indici Tabelle


123delphi321
12-02-2004, 14:40
salve,

ho creato il mio database Interbase, e in esso 1 tabella e 2 indici:

CREATE TABLE "TABELLA_NOMI"
(
"CODICE" CHAR(8),
"NOME" CHAR(40),
"INDI" CHAR(40)
);

/* Index definitions for all user tables */

CREATE UNIQUE INDEX "INDICE_CODICE" ON "TABELLA_NOMI"("CODICE");
CREATE UNIQUE INDEX "INDICE_NOME" ON "TABELLA_NOMI"("NOME", "CODICE");

ho inserito anke dei dati nella tabella x fare delle prove, ma tali dati non vengono visualizzati nell'ordine dei file indice.

cosa devo settare x visualizzare la tabella secondo l'ordine del primo indice? ....e per visualizzarla nell'ordine del secondo indice?

in delphi, invece, devo definire qualcosa nella proprieta indexdefs dell'oggetto IBtable?

grazie

alka
12-02-2004, 15:13
Devi sempre tenere a mente che non stiamo parlando di un database di tipo "desktop", ma di un database client/server.

La creazione di indici lato server permette di velocizzare il reperimento di dati dalla tabella in modo ordinato; l'ordinamento si effettua usando una query SQL con la clausola ORDER BY.

Quando si ottengono record da una tabella ordinandoli tramite ORDER BY, InterBase verifica se è presente un indice sulla tabella relativo ai campi coinvolti nell'ordinamento; se tale indice è presente nella struttura, allora viene sfruttato per ottenere i dati ordinati più rapidamente.

Va detto che il componente IBTable è funzionale per chi proviene dal BDE poichè ha un comportamento simile a quello della tradizionale TTable; tuttavia, lavorando con un database server SQL, è meglio avvalersi di componenti più specifici in grado di consentire l'inserimento di statement SQL per la selezione, l'aggiornamento e l'eliminazione dei dati, come il TIBDataSet.

Prova a dare un'occhiata a questo componente, consultando la Guida in linea. Il componente ti permette di scrivere, all'interno delle proprietà fornite, gli statement SQL necessari alla selezione di record (con relativo ordinamento, se richiesto), all'aggiornamento e all'eliminazione di dati, figurando a tutti gli effetti e comportandosi come una normale tabella.

Se vuoi compiere operazioni più complesse lato client come filtraggio e ordinamenti di record presenti in memoria (e non sul server), puoi documentarti sul componente TClientDataSet; questo componente nasconde una grande potenza: ti permette di scaricare dati da un DataSet qualunque (tabella, query...) in memoria, definire indici (sempre in memoria) selezionabili per ordinare i dati in diversi modi ed eventualmente filtrarli.
Quando modifichi i dati contenuti nel ClientDataSet attraverso Data Control ad esso associati e desideri salvare le modifiche apportate (anche in blocco), il componente ClientDataSet è in grado di generare autonomamente gli script SQL necessari (sui quali è comunque possibile intervenire) per aggiornare la base dati sul database server.

Purtroppo, la documentazione a mio avviso più interessante sul ClientDataSet è in inglese, e sapendo che non ti piace molto... :)

Puoi comunque dare un'occhiata agli articoli di Cary Jensen (http://community.borland.com/soapbox/professionaldeveloper/) sul sito della Community di Borland relativi al ClientDataSet.

Per quanto riguarda InterBase, se non vuoi faticare troppo con IB Console, che è un tool interessante ma abbastanza scarno, scarica la versione Personal di IB Expert (http://www.ibexpert.com).

Come vedi, la trattazione dei database è piuttosto ampia ed è impossibile, almeno per me, scrivere tutto in questo spazio, per motivi sia pratici sia di tempo.

Cerca di aiutarti con i riferimenti e le imbeccate che ti ho dato.

Ciao! :ciauz:

123delphi321
12-02-2004, 18:04
con l'esempio che ho fatto, l'inserimento della dbnavigator che agisce sulla IBtabella_nome, non posso scorrere la mia tabella ordinata a secondo dell'indice che voglio e che gia esiste su server????


non capisco cosa scaricarmi da ib expert....."IB Expert Free Personal Edition" mi linca in questa pagina:

http://www.hksoftware.net/download/

devo scaricare tutte queste cose?

ovviamente questo e' un software che mi aiutera nella creazione dei database, delle tabelle, degli indici.....giusto?


grazie

alka
12-02-2004, 18:13
Originariamente inviato da 123delphi321
con l'esempio che ho fatto, l'inserimento della dbnavigator che agisce sulla IBtabella_nome, non posso scorrere la mia tabella ordinata a secondo dell'indice che voglio e che gia esiste su server????
La risposta è semplice: no.

Ed è anche logico poichè hai la possibilità di definire più indici, quindi non è possibile sceglierlo in automatico, e soprattutto non si può imporre ogni indice per tutti gli utenti che accedono al database.

Gli indici forniscono il servizio di indicizzazione dei dati come specificato nella struttura, cioè possono essere sfruttati per ordinare più velocemente i dati...ma è necessario chiedere al DB come ordinarli in modo esplicito, eseguendo la query SQL. Se l'ordinamento previsto dalla query trova soddisfazione in uno degli indici creati, allora l'indice viene usato e la query è più veloce.


Originariamente inviato da 123delphi321
non capisco cosa scaricarmi da ib expert....."IB Expert Free Personal Edition" mi linca in questa pagina:

http://www.hksoftware.net/download/

devo scaricare tutte queste cose?

ovviamente questo e' un software che mi aiutera nella creazione dei database, delle tabelle, degli indici.....giusto?
grazie
Esattamente. Il link diretto è:
http://www.hksoftware.net/download/ibep_2004.1.22.1_full.exe.

Ciao! :ciauz:

123delphi321
12-02-2004, 19:49
ma se io volessi semplicemente visualizzare la tabella nell'ordine dell'indice 1...cioe' ordinata in modo crescente x codice....come devo procedere?

devo certamente inserire:

IBdatabase
IBtransaction
IBtable

e poi?

io attualmente ho un Datasource a cui e' collegato il dbnavigator, am suppongo che devo inserire un altro oggetto che mi faccia prendere in esame la mia tabella ordinata a secondo dell'indice....

tu prima hai accennato a IBClientDataset, lo sto gurdando ed ho visto che quest'oggetto puo essere anke selezionato nella dbnavigator. ma non riesco a farlo funzionare....


help xfavore! grazie

ps. mi e' arrivato il libro. tutto ok. sembra semplice (almeno x me che ne so poco...)

alka
13-02-2004, 09:45
Originariamente inviato da 123delphi321
ma se io volessi semplicemente visualizzare la tabella nell'ordine dell'indice 1...cioe' ordinata in modo crescente x codice....come devo procedere?

Devi ottenere l'ordinamento desiderato usando uno statement SQL SELECT che puoi eseguire attraverso il componente TIBQuery. Il componente esegue la query e restituisce una tabella di sola lettura. Se vuoi modificare i dati, puoi aggiungere un componente TIBUpdateSQL (da associare alla query attraverso la proprietà UpdateObject): questo componente si occupa di fornire gli statement SQL necessari per riuscire ad aggiornare, inserire, eliminare e rinfrescare i dati della query, facendola funzionare come una normale tabella.


Originariamente inviato da 123delphi321
devo certamente inserire:

IBdatabase
IBtransaction
IBtable

e poi?

Il componente TIBTable non è adatto a ciò che vuoi ottenere tu. Utilizza i componenti che ti ho indicato sopra.


Originariamente inviato da 123delphi321
io attualmente ho un Datasource a cui e' collegato il dbnavigator, am suppongo che devo inserire un altro oggetto che mi faccia prendere in esame la mia tabella ordinata a secondo dell'indice....

L'ordinamento si ottiene tramite SQL, quindi lascia da parte il componente IBTable e prendi invece una coppia IBQuery + IBUpdateSQL oppure usa direttamente IBDataSet.


Originariamente inviato da 123delphi321
tu prima hai accennato a IBClientDataset, lo sto gurdando ed ho visto che quest'oggetto puo essere anke selezionato nella dbnavigator. ma non riesco a farlo funzionare....
Io veramente ho accennato a IBDataSet, poi a TClientDataSet (che invece si trova nella pagina "Data Access" della Palette dei Componenti).

Il componente TIBClientDataSet sembra essere un'unione dei due, ma non l'ho mai utilizzato.


Originariamente inviato da 123delphi321
ps. mi e' arrivato il libro. tutto ok. sembra semplice (almeno x me che ne so poco...)
Già arrivato? Sono stati rapidi... :)

123delphi321
13-02-2004, 12:04
scusa ma nn riesco a capire il funzionamento di TIBQuery.

quindi....sulla form inserisco

ibdatabase
ibtransaction
ibtable
datasource

a questo punto inserisco ibquery che associo al datasouce (che e' associato alla mia tabella IBtable),

ma dove devo scrivere la queri x ottenere la mia tabella ordinata?

alka
13-02-2004, 12:35
Originariamente inviato da 123delphi321
quindi....sulla form inserisco

ibdatabase
ibtransaction
ibtable
datasource

a questo punto inserisco ibquery che associo al datasouce (che e' associato alla mia tabella IBtable),

No, togli il componente IBTable e sostituiscilo con un IBQuery.


Originariamente inviato da 123delphi321
ma dove devo scrivere la queri x ottenere la mia tabella ordinata?

Il componente IBQuery ha la proprietà SQL.

123delphi321
13-02-2004, 14:16
perfetto inserito ibquery ho scritto il codice sql...

SELECT * from TABELLA_NOMI ORDER BY codice;

tale query l'ho testata in IBconsole e visualizza la tabella giustamente ordinata.

adesso per scorrere con dbnavigator..devo gollegare il componente dbnavigator ad un datasource,....e il datasource lo devo collegare al risultato della query....ovviamente questa e' la mia logica...cerco di capirne il funzionamente

pero e' chiaro che sbaglio.

il dbnavigator perforza deve essere collegato ad un datasousce, ma come faccio a collegare il risultato della query al datasource?

alka
13-02-2004, 14:25
Originariamente inviato da 123delphi321
il dbnavigator perforza deve essere collegato ad un datasousce, ma come faccio a collegare il risultato della query al datasource?
Colleghi semplicemente la proprietà DataSet del DataSource al componente IBQuery.

Loading