Ultima modifica: 5 febbraio, 1999
Ken Mayer, TeamB
Lettura Richiesta: Scarica, se non lo hai già fatto, BEGDATA.ZIP, dal mio sito web e comincia a leggerlo. Questo documento affronta l'argomento degli Oggetti Dati in Visual dBASE 7. La parte importante del documento, per ora è la sezione Alias BDE, ma dovresti leggerlo per intero. |
Ciò che necessita al nostro progetto,
è la creazione di alcune tabelle. Un insieme di tabelle è "un database". I
precedenti manuali di dBASE /DOS, hanno confuso non poco, gli sviluppatori
definendo le singole tabelle "Files database" (in seguito nel
documento li indicheremo come .DBF), e tuttora molta gente chiama le tabelle
individuali (files .DBF) "database". Non lasciarti confondere, un
database è realmente un gruppo di tabelle.
In un Server SQL(Interbase, Oracle, ...) questo insieme di tabelle potrebbe
essere memorizzato in un singolo file. Comunque, per quel che ci riguarda,
useremo tabelle locali, e questi sono tutti singoli files, infatti, un .DBF
locale tipicamente usa al meno due files (un .DBF ed un .MDX) e può essercene un
terzo se stai usando campi memo o altri campi Binari (.DBT).
Per il nostro progetto lavoreremo nella directory "TUTORIAL", ma non terremo tutte le tabelle nella directory dove si trova il codice sorgente. Invece, per esse, creeremo una sotto directory di "TUTORIAL".
Il modo più semplice per fare quanto suddetto, è assicurarti tramite il "Centro di Controllo" che ti trovi nella directory TUTORIAL. (nel combobox "Cerca in" dovresti vedere "C:\ TUTORIAL" o altra locazione dove hai deciso di mettere il tutorial). Se così non fosse, tramite il pulsante a destra del combobox spostati nella corretta directory.
Una volta là, nella finestra comandi digita:
MD TABLES
e premi il tasto < Invio>.
Creare un Alias BDE, significa "dire" a dBASE, di considerare le tabelle nella cartella TABLES, come un database.Questo potrebbe sembrare complicato, ma, in effetti non lo è.
Per prima cosa, dovresti uscire da dBASE. (Se crei un alias BDE e dBASE è in esecuzione, l'alias non sarà riconosciuto, fino a quando dBase non "riparte").
Lancia BDE Administrator. (In seguito nel documento lo indicheremo con BDE)
Sul pannello sinistro del BDE, vedrai un controllo "Notebook" con due separatori (tab), in uno si legge "Database" e sull'altro "Configurazione." Assicurati che sia attiva l'opzione "Database", se necessario clicca sul separatore per selezionarla.
Clicca il pulsante destro del mouse e seleziona "Nuovo" dal menu popup.
Apparirà la finestra di dialogo "Nuovo alias di database" (vedi figura) la quale visualizza un combobox "Nome del driver di database" che conterrà la scelta "STANDARD". Clicca su "OK."
Il nome del nuovo alias dovrebbe essere "STANDARD1" (benché potrebbe essere "STANDARD2" o qualche cosa di simile, se precedentemente hai effettuato operazioni con il BDE ). Tale nome sarà evidenziato nel pannello sinistro, cliccaci su e cambialo in "TUTORIAL" (e premi "Invio"). Nel pannello destro del BDE, cambia il "DEFAULT DRIVER" da "Paradox" a "DBASE." Nella opzione "PATH", clicca sul pulsante che visualizza qualcosa di simile ai tre puntini di sospensione (...), e imposta il percorso relativo alle tabelle che dovrai inserire nel tutorial ad es. "TUTORIAL\TABLES"
Prima di finire dovresti verificare se stai lavorando con tabelle di livello 7.
Clicca sul separatore "Configurazione" del BDE, espandi la vista ad albero: Configurazione|Driver|Nativo|DBASE. Il pannello destro deve mostrare fra le altre cose, l'opzione "LEVEL", con un valore uguale a 7. Se così non fosse cambialo al valore 7.
Infine clicca sul separatore "Database", e premi < Ctrl>
+ A
apparirà la finestra di dialogo "conferma" la quale ti da la
possibilità di salvare il tutto, clicca su "OK" , ed esci dal BDE.
Complimenti, hai appena creato un Alias BDE!!!
Letture Suggerite: MISCCODE.ZIP e BEGDATA.ZIP trattano l'argomento degli Aliases BDE e dei Database. In più MISCCODE.ZIP parla dei "Driver di Lingua" e spiega perché dovresti usare Drivers ANSI per le tue tabelle. N.B. C'è un metodo che consente di creare (cancellare) programmaticamente un Alias BDE, è contenuto nella Libreria di Funzioni "dUFLP" nel file "BDEALIAS.CC." Qui non useremo questa possibilità. Ritengo, sia una buona idea (per questo tutorial) familiarizzare con BDE Administrator, ma considera questa possibilità in futuro. |
Per la nostra applicazione abbiamo bisogno di diverse tabelle. Andando avanti, tenterò di spiegare i perché delle diverse informazioni che memorizzeremo in queste tabelle.
NOTA: E' piuttosto importante, affinché l'applicazione sviluppata con il tutorial lavori correttamente, che tu imposti i campi nelle tabelle come descritto in questa fase, senza variare nulla per evitare di incorrere in problemi di diversa natura. |
Una volta che abbiamo impostato il nostro Alias BDE, verifica che Visual dBASE punti sulla directory TUTORIAL (non sulla directory TABLES).
Clicca sul separatore "Tabelle" nel Centro di Controllo, e nel combobox "Cerca in" , seleziona l'alias TUTORIAL (dovrebbe essere in fondo all'elenco visualizzato). Nota che un alias BDE, ha un'icona diversa da quella usata per le cartelle . Tale icona rappresenta un "database", e quando il centro di questa icona è di colore "verde", significa che il database è attivo. Questo ci garantirà che le tabelle che creeremo, saranno salvate nell'ubicazione corretta. (puoi fare la stessa cosa digitando nelle finestra comandi: OPEN DATABASE TUTORIAL )
Le informazioni sui clienti, sono evidentemente molto importanti per qualsiasi organizzazione di vendita. Queste informazioni potrebbero essere molto complesse, ma, nel nostro caso non saranno molto dettagliate.
Come minimo hai bisogno di conoscere i nomi dei clienti, un indirizzo per le fatture ed uno per le spedizioni (nel nostro esempio stabiliamo che siano identici, anche se un'applicazione reale potrebbe avere due o più indirizzi), un campo per le note, ed un codice cliente univoco. La ragione per avere un codice cliente sta nel fatto, che è abbastanza probabile avere due clienti con l'identico nome.
Creare una tabella in Visual dBASE 7 è piuttosto facile. Nel Centro di Controllo clicca sul separatore "Tabelle", e fai un doppio clic sull'icona (puoi creare anche una nuova tabella con il menu "File" (seleziona "Nuovo"), o dalla finestra comandi, digitando CREATE e premi il tasto <Invio>).
Se viene visualizzata una finestra di dialogo che ti chiede di scegliere tra l'opzioni "Wizard" o "Imposta", clicca su quest'ultima. Per questa applicazione non useremo "Wizard" (Mago) per generare le tabelle.
Sei adesso nel modulo "Impostazione tabella". Puoi osservare che i menu e le barre strumenti sono cambiate. Vedrai anche un componente chiamato "Ispezione" che sarà usato per "Ispezionare" ed in molti casi, per cambiare le proprietà, gli eventi e i metodi di vari oggetti
Lettura suggerita: Ci sono molto cose che possono essere fatte qui, e piuttosto che cercare di spiegare o mostrare tutto ciò che puoi fare, dovresti esaminare la "Guida alla programmazione" Capitoli 13 e 14 (quel piccolo libro in dotazione con Visual dBASE). Per favore prendi un po' di tempo e consultalo. |
Lavoreremo con le prime tre colonne per definire i campi della tabella,
torneremo più tardi sull'ultima colonna (indice). Per questa applicazione,
relativamente ai campi numerici useremo solamente i tipi "autoincremento" e
"long", i quali non hanno la parte decimale e di conseguenza non ci
preoccuperemo per questi campi della colonna "decimali".
Il primo campo indicherà il codice cliente, lo chiameremo "Customer ID",
e per quanto detto prima, dovrà essere un codice univoco. Come faremo?
Nelle versioni precedenti di dBASE, hai dovuto scrivere un mucchio di codice, per fare in modo che un campo contenga un valore univoco. Le tabelle di Visual dBASE 7, hanno uno speciale tipo di campo chiamato autoincremento. Questo tipo di campo può gestire valori numerici fino al di sopra di 2 miliardi, ma la cosa più importante, è ogni volta che aggiungi una nuova riga alla tabella questo campo viene aggiornato automaticamente, ed il valore in esso contenuto sarà maggiore di una unità rispetto alla riga precedente. Questo significa che non potrai mai duplicare un valore in questo campo. Gli altri campi che faranno parte di questa tabella sono in maggioranza di tipo "standard" (la maggior parte di loro sono di tipo carattere, l'ultimo è un campo memo).
In "impostazione tabella" nella colonna "Nome" , inserisci "Customer ID" (ovviamente senza le doppie virgolette), premi il tasto <Tab> per spostarti alla colonna "Tipo". Nel combobox che appare seleziona "Autoincremento" o digita la lettera "A" , e vedrai che nella colonna "Dim." la lunghezza sarà impostata automaticamente a 4.
NOTA: "Perché 4 ? Ma hai detto che questo campo può gestire valori numerici superiori a 2 miliardi... quattro cifre non sono sufficienti!" Sì, capisco... ma 4 per il campo autoincremento si riferisce a 4 BYTE e 4 BYTE significano qualcosa in più di quattro "cifre." Il valore attuale qui è un numero intero LUNGO, il quale permette un ampiezza approssimativa di 4 miliardi di caratteri (256^ 4= 4,294,967,296 caratteri), ma metà di essi sono negativi ed il campo autoincremento non gestisce numeri negativi. |
Al momento non immetteremo informazioni nelle colonne "Decimali" e "Indice" (parleremo degli indici più avanti), così usa il tasto <Tab> per saltarli. Così facendo ti sposterai sul secondo campo, nuovamente nella colonna "Nome". Imposta la tabella con le seguenti informazioni:
Campo | Nome Campo | Tipo | Dim |
---|---|---|---|
1 | Customer ID | AUTOINCREMENTO | 4 |
2 | Last Name | CARATTERE | 20 |
3 | First Name | CARATTERE | 20 |
4 | Phone | CARATTERE | 20 |
5 | Street1 | CARATTERE | 40 |
6 | Street2 | CARATTERE | 40 |
7 | City | CARATTERE | 30 |
8 | State ID | CARATTERE | 2 |
9 | Postal | CARATTERE | 10 |
10 | Country ID | CARATTERE | 2 |
11 | Comment | MEMO | 10 |
NOTA: Molti libri o tutorial avrebbero creato gl'indici contestualmente alla creazione della tabella. Essendo questa un'applicazione solo per scopi di studio, parleremo degli indici più avanti. Durante lo sviluppo di una "reale" applicazione probabilmente creerai gl'indici nello stesso momento che crei la tabella. |
Salva la tabella premendo i tasti <Ctrl> e "W". Apparirà la finestra di dialogo "Salva tabella" che ti chiederà di inserire un nome, immetti:
"Customer" e premi <Invio>.
Puoi notare che in fondo alla finestra di dialogo c'è un combobox "Database" che è disabilitato e visualizza "TUTORIAL" (cioè le nostre tabelle sono pertinenti al database "tutorial" e se vorresti cambiare la destinazione devi chiudere il database attivo prima di lanciare il modulo "Impostazione tabella"). C'è anche un combobox "Salva con nome" anch'esso disabilitato, questo perché l'alias è stato definito come tabelle dBASE.
La tabella inventario non sarà molto grande, ma questo dipende dal progetto.
Memorizzeremo alcune informazioni che potrebbero essere memorizzate in un'altra
tabella. La ragione per questo è che alcune informazioni sono ridondanti. Per
esempio, le informazioni sui fornitori non dovrebbero essere memorizzate nella
tabella inventario. Molto probabilmente diversi tipi di merci saranno presi dallo
stesso fornitore. Memorizzare questa informazione per ciascun articolo che
proviene dallo stesso fornitore è una cattiva idea, se i dati del fornitore
cambiano, dovrai cambiarli in ciascun articolo dell'inventario.
NOTA: Il processo di "spezzettare" i dati in tabelle più piccole è chiamato "normalizzazione". La normalizzazione tra le altre cose, può farti risparmiare anche spazio su disco perché riduci notevolmente le ridondanze. Ci sono libri che "scavano" profondamente sul problema della normalizzazione, ed approfondire questo argomento esula dagli scopi di questo tutorial. Comunque, basta dire che se hai molti dati duplicati, dovresti probabilmente normalizzare i dati spezzettandoli in tabelle più piccole. Se da una parte questo significa molto lavoro per definire i dati e le relazioni tra essi dall'altra salverà te ed i tuoi clienti da una TONNELLATA di lavoro successivamente. |
Al fine di relazionare tra loro le tabelle (Inventory e Supplier, per esempio),
useremo un campo "comune" (ad es. "Supplier ID"). Il campo "Supplier
ID" nella tabella Inventory sarà un collegamento per associare "Supplier
ID" nella tabella Supplier.
Creiamo la nuova tabella nello stesso modo utilizzato sopra:
Campo | Nome Campo | Tipo | Dim |
---|---|---|---|
1 | Item ID | AUTOINCREMENTO | 4 |
2 | Supplier ID | LONG | 4 |
3 | Description | CARATTERE | 40 |
4 | Qty | LONG | 4 |
5 | Picture | BINARY | 10 |
Nota che ciascun articolo ha un unico codice identificativo ( "Item ID"), un collegamento alla tabella fornitore (Supplier ID), una descrizione articolo, la quantità, ed un campo binario usato per memorizzare l'immagine dell'articolo.
Salva la tabella e chiamala "Inventory".
Ciascuna fattura può contenere diversi articoli, ed avrai bisogno di un modo per collegare il cliente che ha ordinato la merce. Quando arriveremo più avanti nel progetto, vedremo come realizzare questa relazione. Una caratteristica molto utile di questa relazione, è che se impostata propriamente, aggiungendo una nuova riga, automaticamente si riempirà il campo collegato... parleremo di ciò quando arriveremo alla parte riguardante le schede.
Il campo "Invoice ID" sarà usato per collegare "gli articoli" alla fattura. Il campo "Customer ID" sarà usato per collegare i dati del cliente a ciascuna fattura. Quando progetteremo le schede vedrai in che modo useremo il campo "Pay Type" (faremo una scheda "field morphing") e così via. E' piuttosto elegante, ma un po' complicato discuterlo qui.
Nel nel frattempo, completiamo la tabella:
Campo | Nome Campo | Tipo | Dim |
---|---|---|---|
1 | Invoice ID | AUTOINCREMENTO | 4 |
2 | Customer ID | LONG | 4 |
3 | Order Date | DATA | 8 |
4 | Pay Type | CARATTERE | 2 |
5 | Card Number | CARATTERE | 20 |
6 | Card Exp | CARATTERE | 10 |
7 | Card Name | CARATTERE | 40 |
8 | Check Number | LONG | 4 |
Salva la tabella, e chiamala "INVOICE".
La tabella Line Item sarà usata per memorizzare le informazioni di ciascun articolo ordinato. La cosa interessante è che due dei tre campi saranno riferimenti ad altre tabelle.
Il primo campo, "Invoice ID," è un collegamento alla tabella delle fatture (Invoice.dbf) Il secondo, "Item ID" è un collegamento alla tabella Inventario (Inventory.dbf) -- visualizzeremo il nome (descrizione) dell'articolo. Il campo "Qty" è la quantità di merce ordinata.
Crea la tabella:
Campo | Nome Campo | Tipo | Dim |
---|---|---|---|
1 | Invoice ID | LONG | 4 |
2 | Item ID | LONG | 4 |
3 | Qty | LONG | 4 |
Salvala e chiamala "LineItem".
Creiamo la tabella State
La tabelle "State" è semplicemente usata per operazioni di lookup. Le
tabelle "Customer" (clienti) e "Supplier" (Fornitore)
memorizzeranno un riferimento allo stato (paese) (un campo caratteri di
dimensione 2, tale che "CA" significa "California").
Comunque, per convenienza degli utenti la scheda mostrerà l'intero nome dello
stato anziché la sigla. Questo sarà realizzato impostando una speciale
istruzione "lookup" per queste tabelle nei Moduli Dati...
per fare quanto suddetto abbiamo bisogno di una tabella molto semplice:
Campo | Nome Campo | Tipo | Dim |
---|---|---|---|
1 | State ID | CARATTERE | 2 |
2 | State | CARATTERE | 32 |
Salvala e chiamala "State"
Questa tabella a prima vista è quasi identica alla tabella "State" e serve per gli stessi scopi. Crea una nuova tabella ed immetti le informazioni seguenti:
Campo | Nome Campo | Tipo | Dim |
---|---|---|---|
1 | Country ID | CARATTERE | 2 |
2 | Country | CARATTERE | 20 |
Salvala con il nome di "Country"
Per questa applicazione è necessaria un ultima tabella, quella relativa ai Fornitori. abbiamo bisogno di conoscere il nome della persona nostro contatto nella compagnia, come contattarlo (e-mail, telefono, ecc.):
Campo | Nome Campo | Tipo | Dim |
---|---|---|---|
1 | Supplier ID | AUTOINCREMENTO | 4 |
2 | Contact | CARATTERE | 30 |
3 | Company | CARATTERE | 40 |
4 | Phone | CARATTERE | 20 |
5 | Fax | CARATTERE | 20 |
6 | CARATTERE | 40 | |
7 | Street1 | CARATTERE | 40 |
8 | Street2 | CARATTERE | 40 |
9 | City | CARATTERE | 30 |
10 | State ID | CARATTERE | 2 |
11 | Postal | CARATTERE | 10 |
12 | Country ID | CARATTERE | 2 |
Salva la tabella, e chiamala "Supplier"
Ora abbiamo un gruppo di tabelle vuote... comunque, una volta che cominceremo
ad usarle avremo bisogno di visualizzare i dati in sequenze diverse dall'
"ordine naturale" (cioè nell'ordine in cui i dati sono stati
immessi).
Per questo scopo, avremo bisogno degli indici.
Ci sono diversi modi per aggiungere indici alle tue tabelle in Visual dBASE.
NOTA: Per il tutorial creeremo "marcatori" (tags) indice che non useremo per il progetto sviluppato con il tutorial. Questi comunque possono essere utili. Qualche volta potrebbe essere una buona idea pensare in "prospettiva". Puoi sempre rimuovere un marcatore indice se decidi di non usarlo nella tua applicazione. (questo può essere fatto in diversi modi, incluso l'utilizzo del modulo "Gestione Indici"). |
Puoi creare un indice e utilizzando "Impostazione tabella"
Un indice è un modo affinché le informazioni memorizzate in una tabella
siano visualizzate in un ordine specifico. dBASE ha usato, sin dalla versione
"dBASE IV 1.0", quelli che sono chiamati indice di produzione(.MDX). Il file .MDX principale di una tabella è chiamato
"file di produzione degli indici". Questo file si apre automaticamente quando si apre la tabella, per cui gli indici che contiene sono immediatamente disponibili, sebbene nessun indice imposti l'ordine delle righe fino a quando non lo si seleziona come indice principale.
Via via che si aggiornano le righe di una tabella, anche gli indici collegati del file di produzione degli indici vengono aggiornati. Se si usano file .MDX diversi da quelli di produzione, occorre aprirli espressamente inserendo i comandi nella finestra Comandi.
Il file di produzione degli indici ha lo stesso nome della tabella più l'estensione .MDX.
Questi sono un insieme di espressioni indice memorizzati in un singolo file (.MDX).
Gl'indici individuali sono chiamati "marcatori" (tags) o
"marcatori indice."
NOTA: Puoi creare indici che si basano su singoli campi,
in questo caso si chiamano "indici semplici". Puoi creare
anche indici complessi. Un indice complesso (o composito) usa un insieme di uno o più campi o un'espressione di dBASE. |
Il grande vantaggio di avere i marcatori indice rispetto al vecchio metodo
che memorizzava ciascun indice in un proprio file (.NDX) è che dBASE può
aggiornare automaticamente ciascun marcatore indice quando necessario (ad es.quando si aggiungono,si editano,si cancellano... righe nella tabella) Il metodo
più vecchio ti costringeva ad aggiornare ciascun indice (.NDX) uno alla volta o
aprirli tutti ed lanciare il comando "REINDEX" il quale ricostruiva le
informazioni memorizzate nell'indice.
In Visual dBASE 7, il comando "REINDEX" è solo necessario per
ricostruire indici danneggiati. (esiste un metodo OODML reindex() dell'oggetto
Database per la gestione di questo problema vedi X2OODML.ZIP
nel mio sito web.).
NOTA: Se hai usato la finestra comandi per creare gli
indici (il prompt punto), puoi continuare ad usare questa maniera.
Comunque, questo ti richiede che la tabella sia aperta (USE nometabella
EXCLUSIVE) immetti il comando INDEX ON, e così via. In più se i tuoi
"nomi campo" contengono degli spazi hai bisogno di usare i due
punti per delimitarli come mostrato più avanti. |
Indicizzare la Tabella Customer
(Usando "Impostazione tabella")
Un modo per indicizzare una tabella è utilizzare il modulo "imposta
tabella".
Per portare una tabella in modalità impostazione, la via più semplice è
selezionarla (nel centro di controllo),
premere il tasto destro del mouse, e nel menu popup che apparirà
seleziona "Imposta Tabella"" (oppure clicca sulla tabella e premi
i tasti <Shift>+< F2> ).
Seleziona "Struttura" dal menu in cima allo schermo. Questo ti
permette di cambiare la struttura della tabella, e gestire gli indici (in fondo
al menu). Per prima cosa definiamo la "Chiave Primaria" per questa
tabella, così seleziona l'opzione "Definisci Chiave Primaria."
La finestra di dialogo che appare dovrebbe essere simile:
Clicca su "Customer ID" nel pannello a sinistra denominato "Campi disponibili" e poi premi il pulsante con il simbolo
Vedrai che il campo si sposterà sul pannello di destra "Campi della Chiave". Nell'entryfield "Nome dell'Indice:" immetti "Customer ID" (senza le doppie virgolette).
Clicca su pulsante "OK".
Adesso che abbiamo definito la "Chiave Primaria", che cosa è una
"Chiave Primaria" ? Le informazioni seguenti sono tratte dalla guida
in linea:
Gli indici primari richiedono valori unici. Non
permettono valori chiave duplicati. Per esempio se una tabella
dBASE ha un indice primario su ORDER_NO, non puoi aggiungere due ordini
con lo stesso numero d'ordine, solo uno può esistere nella tabella.
In un indice composito i valori dei singoli campi possono essere
duplicati, ma il valore combinato di tutti campi chiave deve essere
unico. (gli indici secondari permettono invece di avere valori
duplicati.) Quando si crea l'indice primario occorre usare un campo che conterrà un valore unico per ogni riga, come un campo codice cliente. Una tabella può avere un solo valore vuoto nel campo chiave, dato che valori vuoti in successione sono considerati duplicati. Quindi, solitamente i campi chiave necessitano di dati. |
Mentre il campo di tipo autoincremento è per default un valore unico, questo
è un modo per assicurarci che il valore sia unico (usando le funzioni file a
basso-livello è possibile azzerare il valore del campo autoincremento, non
affronteremo in questa sede questa eventualità. Ma il problema è che così
facendo potrebbe essere davvero possibile che un campo autoincremento abbia un
valore duplicato e, esso stesso non effettua il controllo per evitare i valori
duplicati. Creando con esso una chiave
primaria si risolve questo problema e forza il campo autoincremento al controllo dei valori
duplicati).
Ora che abbiamo creato la chiave primaria (una sola per tabella),
abbiamo bisogno di creare gli altri indici che useremo nella nostra tabella. Gli
indici per la tabella Customer saranno fatti con l'altra opzione del menu
"Struttura" e cioè "Gestione Indici.."
Una volta selezionata questa opzione, dovresti vedere una schermata simile
Clicca sul pulsante "Nuovo", e vedrai una finestra di dialogo molto
simile a quella usata per la definizione della chiave primaria. Comunque, non
creiamo una chiave primaria ma un "indice secondario."
Per costruire il primo indice "secondario" , useremo questa finestra di dialogo.Il
criterio di indicizzazione sarà basato sul campo "Last Name" (Cognome).
Per fare questo
assicurati che nell'angolo più basso a sinistra il "radio button" che
dice "Specifica dall'elenco campi" sia selezionato. Clicca sul campo
"Last Name" nell'elenco "campi disponibili", clicca sul
pulsante con il simbolo , ed il campo apparirà nel pannello di destra
"campi della chiave" . Inserisci "Last Name" come nome
indice nell' entryfield "Nome dell'Indice", e clicca su
"OK."
Una volta che hai cliccato sul pulsante "OK", ti troverai nuovamente sulla finestra "Gestione
indici". Clicca sul pulsante "Chiudi", e ritornerai in
"impostazione tabella". Nota che nella colonna relativa agli indici (l'ultima)
la maggior parte dei campi mostrati, non ha impostato
nessun indice, mentre per i campi "Customer ID" e "Last
Name" dovresti vedere "Ascendente"
Clicca sul campo "Country ID" e spostati sulla colonna
"indice". nell'elenco delle opzioni scegli "Ascendente" (la
sequenza normale per un indice) o digita la lettera "A" e spostati con
il tasto <Tab> , avrai specificato "un indice" il
quale avrà il nome di "Country ID", e l'ordine ascendente. Questo è molto
più facile rispetto l'uso della finestra di dialogo vista sopra.
Fa' lo stesso per i campi "Postal" e "State ID". Questo ti
darà quattro "marcatori indice" (o semplicemente indici) secondari, ed una chiave primaria.
Possiamo anche creare un marcatore indice "complesso" , sempre in
impostazione tabella utilizziamo nuovamente "Gestione Indici". (Struttura|Gestione
indici) e poi clicca sul pulsante "Nuovo".
Nella finestra "definisci Indice", nel rettangolo "chiave
dell'indice" seleziona il radio button che indica "Specifica tramite
espressione", ed nell'entryfield sotto ("espressione della
chiave") immetti:
left( upper( trim(:last name:) + "," + :first name: ) + space(40), 40)
La ragione per i due punti nell'espressione indice è che gli spazi nei nomi campo sono normalmente "delimitatori", e così dobbiamo specificare che tutto quello compreso tra i due punti è un nome campo. Stiamo combinando cognome e nome, che può essere utile per eventuali ricerche , e tali dati saranno indicizzati sulla "versione maiuscola" di cognome e nome.
L'uso della funzione Upper() fa in modo che l'espressione dell'indice sia "insensibile" dal punto di vista dei caratteri (maiuscoli o minuscoli) affinché impostiamo le nostre operazioni di ricerca propriamente.
NOTA: Quello che
facciamo con la funzione left() combinata con la funzione
space() evita un problema conosciuto come "lunghezza variabile" dei
marcatori indice. Per esempio ciascun elemento che costituisce l'indice
potrebbe essere di lunghezza
diversa. Usarli così come sono possono "confondere" realmente dBASE (ed il BDE) e
causare la presenza di indici inattendibili. Con
l'istruzione precedente ci garantiamo che l'espressione indice sia
di 40 caratteri.
La virgola nell'espressione è per rendere le operazioni di lookups più intuitive, per un utente è più probabile che digiti "Mayer,Ken" al posto di "MayerKen" in un controllo "seeker" (maggiori dettagli più avanti nel tutorial) |
Chiama questa espressione indice "Names" (devi
specificare questo nell'entryfield "Nome dell'Indice", altrimenti
"impostazione tabella" creerà un nome indice di default, che non puoi
cambiare senza cancellare l'indice e ricominciare come abbiamo visto sopra),
clicca sul pulsante "OK" (questo chiuderà la schermata "Definisci Indice"
),
ed infine sul pulsante "Chiudi" (questo chiuderà la finestra "Gestione
Indici"). Nota che questo indice non apparirà colonna indice della
tabella. Nessuna espressione indice apparirà là, inclusa
un'espressione che semplicemente include l'uso della funzione upper()...
Ora che abbiamo finito con questa tabella, salvala ed esci da "impostazione
tabella" (<Ctrl> + W)
Creiamo gli Indici usando "l'Oggetto Indice"
Puoi creare indici per tabelle dBASE usando l'oggetto DBFINDEX ed il metodo dell'oggetto database createIndex(). Queste caratteristiche non sono documentate ne nella guida in linea, ne nel manuale di riferimento al linguaggio. Creeremo solo un marcatore indice utilizzando questa caratteristica, per vedere come lavora.
Letture Suggerite: "MISCCODE.ZIP," "BEGDATA.ZIP," ed in "ICon 98 paper" su "Caratteristiche non documentate". |
Creeremo un indice utilizzando il campo codice fornitore (Supplier ID) nella tabella inventory usando il codice seguente:
I passi fondamentali sono: (digita il seguente codice nella finestra comandi):
d = new database()
d.databaseName := "TUTORIAL"
d.active:= true
i = new DBFIndex()
i.indexName := "Supplier ID"
i.expression := "Supplier ID"
d.createIndex( "Inventory", i )
Non è molto ovvio che l'indice sia stato creato. Non sarà ovvio fino a
quando non apri la tabella in modalità impostazione, a quel punto potrai vedere
"Ascendente" nella colonna indice per il campo "Supplier ID"
Non appare esserci un modo per creare un indice primario su un .DBF senza usare
il modulo "impostazione tabella" (a meno che usi il comando SQL locale
"CREATE INDEX"). Questo significa tornare indietro ed impostare la
chiave primaria sul campo "Item
ID" nella stessa maniera di come abbiamo fatto per il campo Customer ID
nella tabella
Customer.
In più aggiungi un indice "complesso" o una "espressione" indice
(usa "Gestione Indici." e esegui le stesse azioni fatte per l'indice
che abbiamo definito per la tabella customer, chiamato "names") su
"upper(description)" e chiamalo "Description".
Le altre Tabelle nella Applicazione
Per definire gli indici per le altre tabelle utilizza sempre "Impostazione tabella". Se l'indice è "primario" usa il menu Stuttura|Definisci Chiave Primaria.
per l'espressioni indice, usa l'opzione "Gestione Indice" come abbiamo fatto sopra, infine salva ed esci con < Ctrl>+ W. Nota che il nome per ciascun indice è il campo "nome" (nella prima colonna), e tutti indici che creiamo sono in ordine crescente (Ascendente):
Tabella Country:
Country ID | Primario | |
Country | Espressione | upper( Country ) |
Tabella Invoice:
Invoice ID | Primario |
Customer ID | Secondario |
Order Date | Secondario |
Pay Type | Secondario |
Tabella LineItem (nessuna chiave primaria):
Invoice ID | Secondario | |
Item ID | Secondario | |
Qty | Secondario | |
InvoiceItem | Espressione | str( :invoice id:, 7 ) + str( :item id:, 7 ) |
Questo ultimo indice per questa tabella sarà necessario quando lavoreremo sulle schede relative a questa applicazione. Praticamente utilizzeremo questo indice per trovare un articolo nella tabella , ma avrà bisogno di essere uno specifico articolo relativo ad una specifica fattura (questo perché in questa espressione il codice fattura (invoice ID) viene prima del codice dell'articolo (Item ID)).
Tabella State:
State ID | Primario | |
State | Espressione | upper( State ) |
Tabella Supplier:
Supplier ID | Primario | |
Contact | Espressione | upper( Contact ) |
Company | Espressione | upper( Company ) |
State ID | Secondario | |
Postal | Secondario | |
Country ID | Secondario |
A questo punto mancano i dati nelle tabelle.
Potremmo sederci e generare i dati in modo casuale, le alternative sono:
Ma questi dati potrebbero essere non significativi per testare l'applicazione (e inservibili per quelle tabelle collegate tra loro).
La soluzione che propongo e quella di duplicare i dati da un'altra applicazione, per fare ciò hai bisogno di copiare il programma "COPYDATA.PRG" ed i file di classi custom "BFILE.CC" e "DBF7FILE.CC" nella directory TUTORIAL\TABLES (questi file sono forniti con il tutorial).
(N.B. come detto nella sezione start di questo tutorial se non hai
installato il database MUGS, il programma "COPYDATA.PRG", non potrà funzionare e non avrai
i dati per testare l'applicazione).
Questo programma userà una combinazione di oggetti OODML e comandi XDML per
copiare i dati dal database MUGS nelle tabelle che abbiamo appena creato. Puoi esaminare il
codice aprendolo nell'editor di sorgenti.
Per usare il programma assicurati di essere nella directory TUTORIAL\TABLES
Quando hai finito, cambia la directory di lavoro tornando a indietro alla
directory TUTORIAL
Vai nel Centro di Controllo, clicca sul separatore "Progetti",
doppio clic sul file progetto "Visual dbase 7 Tutorial". Clicca il pulsante destro del mouse nel pannello di sinistra, e seleziona
"Aggiungi file al progetto..."
Nella finestra di dialogo che apparirà seleziona nel combobox in fondo
l'opzione "tabelle". Doppio clic
sulla cartella Tables e vedrai le tabelle che hai creato. Selezionale e clicca
su apri
Chiudi il progetto (la piccola 'x' nella barra del titolo) e clicca sul pulsante
"Sì" per salvare le modifiche.
Tutorial menu |
Fine del file: DATABASE.HTM 12 Febbraio 1999 KJM
Avvertimento Legale: Questo documento è parte del Visual dBASE 7 Tutorial creato da Ken Mayer. Questo materiale è © proprietà letteraria riservata 1999, da Ken Mayer. Visual dBASE 7 e Visual dBASE 7.01, il BDE (Borland Database Engine) e BDE Administrator sono tutelati in base ai diritti d'autore e marchio di fabbrica da Inprise, International. Questo documento non può essere esposto altrove senza il permesso esplicito dell'autore, il quale si riserva tutti diritti sul documento.