F.A.Q.
|
Egregi lettori le vostre domande sono meritevoli della nostra attenzione. Altresì mi delizio per i complimenti ricevuti. In fin dei conti, chi scrive articoli, su internet o altre piattaforme orientate ai godimenti di un pubblico eterogeneo, trastulla l’ispirata verve sulle accondiscendenze dei propri lettori. Il successo dei miei articoli è così dimostrato dall’interesse di un vasto pubblico e dal continuo flusso di domande che mi vengono poste in merito ai database. Chiaramente non sempre è possibile rispondere, o rientrare in tempi accettabili: chiedo scusa ai lettori, ma, come ebbi già modo di partecipare in altre occasioni, il tempo, per chi accudisce il nostro mestiere, è un despota inflessibile. Mi compiaccio comunque e sempre della vostra cortese attenzione, che onora il mio lavoro e spinge il nostro staff ad essere sempre a disposizione del pubblico. Come ricambiare le vostre attenzioni? Rispondendo alle domande, che sono un diritto di chi legge ed impongono dovere a rispondere per chi scrive! Al vostro servizio dunque, umile servitore del mio vasto ed appassionato pubblico. Premesso ciò passiamo alle risposte.
|
| Ho
un applicativo di tipo gestionale fatto in delphi 6 ed uso delle tabelle
paradox. Se volessi portare in rete il programma cosa mi consiglieresti
fare???? Sono un po' in confusione su cosa fare nel senso che non so prendere una decisione alla fine l'applicativo dovrà girare su tre pc con windows xp in rete a 100... Alcuni mi hanno detto che devo mappare il percorso del server altri che non c'è ne sta bisogno perchè i file paradox gestiscono la rete ma io ho provato e sinceramente va molto piano non so cosa fare... poi ho letto il tuo manuale sui database mi ha incuriosito molto quello che tu chiami "il mio sistema" si possono avere ulteriori chiarimenti a proposito ? Purtroppo le informazioni da lei indugiate a riguardo del problema sono davvero poche. La lentezza cagionata nel suo programma può giustificarsi in svariati modi. Generalmente, un errore consueto, nei programmi di tipo Client – Servere, soprattutto se non si ha la necessaria esperienza, è dovuto alla connessione di una tabella oppure una query ad un controllo di tipo DBGrid. Infatti le operazioni di scansione all’indietro di suddetta tabella risultano essere esageratamente lente. Nel caso di database locali, le tabelle sono dei file sequenziali il cui ordine è di natura fisica oppure subordinato ad un indice. I server SQL, invece, operano con insiemi di dati logici che non sono assolutamente relazionati ad un ordinamento strutturale di tipo fisico. Un server per database relazionali manipola i dati in base al modello relazionale, che è ricavato da un modello matematico appartenente alla teoria degli insiemi. E’ importante capire che i tuple o record di una tabella vengono identificati in modo univoco non dalla posizione ma da una chiave primaria basata su uno o più campi. Quando il server ottiene un insieme di record, aggiunge, ad ognuno di essi, un riferimento che punta al successivo: ciò rende molto veloce lo spostamento in avanti, ma di una lentezza esasperante quello all’indietro. Questa è la ragione per cui diciamo che un RDBMS utilizza cursori monodirezionali. Il BDE risolve questo problema ospitando in una cache locale i record preventivamente caricati nella tabella. In questo modo i record successivi vengono richiesti al server, mentre il BDE si cura di quelli già esaminati, rendendo in tal modo, i cursori sopra citati, totalmente bidirezionali. Ripeto, le cause possono essere davvero tante, generalmente, quanto sopra descritto, è uno degli errori più frequenti, ma non l’unico! Per quanto riguarda il "Mio
sistema", è il parto di una decina d’anni di studio in merito allo
sviluppo di applicazioni database. Affronta tutta una serie di
problematiche dovute al concetto di memorizzazione, visualizzazione,
manipolazione dei dati. Ho deciso di renderne pubblica una piccola parte,
poiché convinto assertore del concetto "è bene che la gente sia
erudita!". Esporrò, comunque, nel proseguo delle mie lezioni,
altre astrazioni riguardanti il "Mio sistema", affinché, chi
vuole, possa utilizzare con successo queste mie teorie! |
| Mi
interessa sapere la differenza che passa tra una procedura e una funzione
ed eventualmente come faccio a realizzare si la prima che la seconda e
soprattutto come inizializzarle.
La differenza sostanziale tra la
procedura e la funzione e che la seconda ritorna un risultato ( può
tornare un integer, un float, una string, un boolean dipende da quello che
deve fare la nostra funzione), mentre la procedura esegue la parte di
codice in essa scritta senza ritornare nulla. unit Raddoppia; |
| Ho
utilizzato il seguente codice per far in modo che mi restituisse un
determinata quantità di numeri casuali,servendomi naturalmente di una
form, di un pulsante e di un listbox:
procedure TForm1.Button1Click(Sender: TObject); var I: Integer; begin ListBox1.Items.Clear; Randomize; I := 0; while I <= 1000 do begin I := I + Random (100); Listbox1.Items.Add ('Numero Casuale: ' + IntToStr (I)); end; Il motivo della mia
domanda sta nel fatto che ricevo un quantità di numeri superiore a quella
che mi aspettavo e soprattutto un taglio di numeri superiore alla
centinaia. Detto questo, come posso calibrare il codice in esame per
permettere all'applicazione di restituirmi solo una certa quantità di
numeri e solo i numeri che vanno da 50 a 100 per esempio? Certo di una sua
pronta risposta invio cordiali saluti. |
| Sono
interessato allo studio di SQL come del resto Lei menziona nella sua guida
database, ma non so da dove iniziare. Potrebbe darmi un consiglio? In
libreria ho dato un'occhiata ed esistono vari tipi di sql ma non so quale
acquistare. Cosa devo chiedere al rivenditore? quale tipo di sql devo
compare per delphi? P.S. Esiste una guida on-line? Su Internet si trova
praticamente di tutto, mancano solo il fagiolo magico e la bacchetta del
buon Merlino. Figuriamoci i trattati su SQL. Egregi Paolo e Roberto,
consiglio due esposizioni veramente efficaci: “Il manuale SQL” scritto
da Stephen Cannon e Gerard Otten. Cinquecentoottanta pagine da gustare in
solitudine, preferibilmente davanti al computer. Un libro davvero
notevole, che vi introdurrà nel mondo SQL gradatamente, ricorrendo ad
egli esempi molto validi. Da non perdere. Se poi questo testo non
fiaccherà la vostra perspicacia ad erudirvi in questo campo, comperate
senza indugio “Il manuale SQL” scritto da Ryan K. Stephens, Ronald R.
Plew, Bryan Morgan e Jeff Perkins: basato su un’impostazione didattica
ferrea ed una conduzione spartana, ricca di esempi, esercizi e tutto il
resto. Apporterà, al vostro bagaglio tecnico, dei benefici notevoli. Un
ottimo libro! Personalmente li ho studiati entrambi, a fondo, e non solo
per motivi squisitamente culturali. Se sopravvivere te all’ardua prova,
scrivetemi ancora, oltre che complimentarmi per lo spirito di abnegazione,
vi introdurrò a dei trattati che potranno completare la vostra
preparazione in materia. |
|
Nella terza
lezione sui database Lei menziona il componente TScreen che funziona, come
mi insegna, per adattare l'applicativo a qualsivoglia risoluzione video
mantenendo anche adeguate proporzioni, font ecc. Vorrei sapere se il
suddetto componente è nativo in delphi o si tratta di un componete
aggiuntivo? Potrei ricevere informazioni in merito e soprattutto come
configurarlo e da dove eventualmente scaricarlo ? Il componente TScreen nasce con Delphi, è parte del suo patrimonio genetico. Viene creato, come ho spiegato in una lezione pubblicata sul sito, all’avvio di ogni applicazione. Contiene, tra tante altre cose, le informazioni relative alle dimensioni dello schermo tramite le proprietà Whidth e Size. Vediamo un esempio: una form denominata FrmChiama posiziona una form denominata FrmProva. procedure
FrmChiama.FormCreate(Sender: TObject); |
| Nelle
lezioni sui database, ho letto che lei fa riferimento ed uso del
componente 'Query'. Potrei sapere l'utilizzo specifico e i relativi
benefici apportati da questo componente?
Semplicemente dico che,
senza l’utilizzo di SQL non è possibile realizzare applicativi database
di un certo livello. Nel caso specifico, il componente Query è il tramite
verso questo linguaggio. Ho descritto con dovizia di particolari le
funzioni del componente Query ed i benefici che questo linguaggio comporta
nel corso delle lezioni pubblicate sul sito. Pertanto, rispettosamente, vi
rimando alla lezione menzionata. Ad ogni modo, la realizzazione di
applicativi di tipo gestionale, quindi preposti alla manipolazione di
grandi quantità di dati, debbono obbligatoriamente servirsi di questo
linguaggio, poiché specifici problemi possono essere risolti
esclusivamente ricorrendo ad SQL. Il componente Query, nel nostro caso,
assolve, per citarne alcuni, compiti legati alla visualizzazione,
contabilità, aggiornamento e modifica dei dati. Silenziosamente, dietro
le quinte. Lavoratore indefesso, col suo operato, grava su di sé gran
parte del lavoro occulto che consente il buon funzionamento di un
applicativo interfacciato con motori database! |
Vorrei tanto sapere se in delphi 7 esiste una funzione che mi permette di verificare se il codice da me stilato presenta imperfezioni. Non mi risulta che esita
una funzione del genere anche se la domanda lascia spazio a molteplici
interpretazioni, ma diciamo che come sicuramente sarà già capitato a
ognuno di noi se ci sono degli errori di sintassi nel codice il
compilatore non ci permette la compilazione segnalandoci a che riga del
.PAS si trova l'errore, se per esempio nel nostro codice vogliamo
utilizzare una variabile ma non è stata preventivamente dichiarata (ad
es. variabile_A): |
Potresti dirmi come convertire una stringa esadecimale in decimale? Approfittando della
domanda e considerato che altri lettori hanno fatto domande sulla
conversione da HEX a DEC ho pensato di creare una funzione che possa risolvere il problema
e la si può trovare nella pagina dei TIPS (converte
da esadecimale a decimale)
VAI
|
| Sono
curioso di sapere se per installare il BDE Administrator nel
computer destinatario (utente finale dell'applicativo) si deve solo
ricorrere al software "InstallShiel" o ci sono in merito dei
trucchi o delle tecniche che permettono di omettere le potenzialità di
questo programma. Potrei sapere ancora, se esistono altri software simili a InstallShied e che quindi permettono l'installazione e la configurazione dell'Alias nel p.c. destinatario ed eventulamente dove reperirli? Grazie Qualsiasi programma può essere installato manualmente, anche il BDE Administrator. E’ necessaria una buona conoscenza del registro di Windows e dei file di configurazione che accompagnano il prodotto. Però è un problema che non ha motivo d’essere, poiché il programma InstallShield in dotazione con Delphi è veramente un ottimo prodotto. Esistono tanti altri applicativi similari (visitare il sito www.pcwdirect.it), più o meno validi, alcuni costosi altri meno. Altresì è possibile creare un programma d’installazione personalizzato, ma è necessario avere una grande preparazione. Tutto sommato, InstallShield offre il necessario per creare un setup degno di questo nome. E poi, a caval donato..! |
| Nella
domanda che io ho fatto : "Esiste un
sistema per rendere un'applicazione utilizzabile solo per un determinato
periodo di tempo, scaduto il quale l'applicazione non sarà più
utilizzabile, se non con l'uso di un codice seriale che serva da
sblocco?" in
cui Lei mi risponde che "Di sistemi ne esistono diversi, più o meno
efficaci. Potrebbe impostare il suo Applicativo con un contatore che tenga
conto del lancio del programma. Altresì, se l'applicativo s'interfaccia
con motori database, può impostare, ad esempio, per una determinata
tabella, un certo numero di record, raggiunto il quale, il programma
giunga ad un blocco.In
base a quanto da lei gentilmente consigliatomi nelle FAQ desidererei
sapere come implementare un codice che monitorizzi il numero di volte in
cui il software viene lanciato ? oppure, come fare affinché la mia
applicazione contenente tabelle (database) potrà contenere solo un certo
numero di record.
Nella fase di apertura del programma,
quindi nella form principale, è necessario implementare un contatore che
incrementi di uno il proprio valore ad ogni esplosione dell’eseguibile.
Una variabile di tipo Integer si adopera meravigliosamente allo
scopo.Suddetto valore dovrà essere occultato nella system di windows,
oppure se preferisce, in una stringa del registro, o ancora dove lei
ritenga sia al riparo dall’accanimento mal celato dei predatori di
software! Per realizzare questa alchimia può utilizzare il componente
Memo, che, tra le sue opulenze, pone in bella mostra due funzioni assai
toste: SaveToFile e LoadFromFile. Detto ciò dovrà aver
cura di trasferire il valore dal contatore all’interno del componente
memo e viceversa (le funzioni StrToInt e IntToStr, di cui
abbiamo già parlato, si prestano che di più non si può), per ricorrere
quindi alla funzione SaveToFile in precedenza citata. Andrà perciò ad
occultare, la prima volta in cui il programma verrà esploso, il valore
del contatore dove più riterrà opportuno. Esempio: |