Articol delphi și interbase

Delphi și Interbase. Partea I, este, de asemenea, introductivă.

Lipsa lirică sau "ce va fi"

Buna ziua tuturor! Aceasta este, aparent, o serie de articole privind principiile construirii de baze de date despre IB și clonele acestuia. Ciclul deoarece se execută în câteva foi pe această temă este imposibilă, în principiu, și aș dori să ia în considerare o mulțime de lucruri care nu au nici un certificat sau în literatura de specialitate, cu care au ajuns la o înțelegere a acestor lucruri treptat, începând cu cele mai simple elementele de bază. Ei bine, finalul este de a scrie un program de rețea cu drepturi depline. Imediat am spus, că „în cursul piesei“ va trebui să ia în considerare o mulțime de aspecte necesare pentru muncă semnificativă, și IB (și de multe ori - și Delphi) nu au de fapt legate. Fiți răbdători, dacă nu știți (atunci va veni în continuare la îndemână :)) sau săriți dacă ați înțeles.

Și încă una, ultima, dar importantă, rezervare. Multe lucruri care vor fi discutate aici, incl. exemple, pot fi implementate în mai multe moduri. Mă voi concentra doar pe metodele software. De exemplu, în secțiunea următoare, este vorba despre crearea primei baze de date. Acest lucru se face în mai puțin de un minut în același IbExpert, dar vom face totul cu mâinile noastre cu ajutorul unui program scris în mod special. Pentru unii acest lucru poate părea ca „comunismul chinez“, dar experiența a arătat că o persoană care știe clar cum, cu ce parametri creat în baza de cod, mult mai rapid va înțelege cum de a crea baza de date în orice coajă. Dar declarația converse, ca regulă, nu este adevărată. Dacă ați aruncat toate butoanele în coajă și apoi ați întâmpinat brusc nevoia de a crea o bază de date în timpul rulării, este posibil să aveți dificultăți. Un astfel de principiu va fi mărturisit pe tot parcursul ciclului de articole.

Pregătiți pentru prima dată

De fapt, instalarea de probleme nu ar trebui să fie prezentată: pur și simplu rulați instalarea descărcată și tot ce este necesar va fi instalat. Acum, undeva pe disc aveți un director cu DBMS și trebuie să creați o bază de date, să vă conectați la ea și, din curiozitate, să vedeți și ce este. (Crezi că nu e nimic? Ești greșit!)
Rulați Delphi, creați un nou proiect și salvați-l pe disc. Începând cu versiunea 5.0, Delphi include setul deja menționat de componente IBX sau Interbase Express, care permit lucrul cu Interbase și clonele sale prin conexiuni api native, mai degrabă decât prin conexiuni ODBC. Le vom folosi și, în acest moment, vom fi interesați de această componentă
TIbDatabase. Pe această legătură veți putea să vă familiarizați pe scurt cu ceea ce știe. Nu vă faceți griji, dacă dintr-o dată nu înțelegeți nimic, toate în timp util :)
În formular, plasați Bara de instrumente, ActionList și ImageList. (dacă doriți să puteți face un singur buton pe formular, dar vă sfătuiesc să faceți o interfață inițială semnificativă, astfel încât în ​​viitor să poată crește fără durere). Conectați aceste componente împreună prin setarea proprietății Imagini a ActionList și ToolaBar și inserați imaginea în ImageList, care, în opinia dvs., corespunde procesului de creare a bazei de date.

Aș recomanda, de asemenea, redenumirea componentelor. Ca o chestie de gust. De exemplu, am toate numele începând cu una sau mai multe litere care reflectă tipul componentei, iar restul indică scopul acestei componente. De exemplu, în orice proiect știu că forma principală este întotdeauna numită fMain, principalul ToolBar este tbMain și așa mai departe. Și dacă am să, de exemplu, găsiți butonul responsabil pentru minimizarea ferestrele copil nu se poate cauta sa spun ca acesta va fi numit btnWindowMinimizeAll, elementul de meniu corespunzător - miWindowMinimizeAll, meniul din titlu în care se află - miWindow, un manipulator de toate acestea vor fi este înregistrat în aWindowMinimizeAllExecute (TAction). Desigur, este nevoie de timp, dar crește lizibilitatea de cod ori mai multe, și cel mai important, facilitează în mare măsură de orientare în orice proiect, chiar dacă ați scris-o acum câțiva ani.

Acum creați în ActionList un element nou, specificați imaginea dorită și alocați acestei acțiuni nou create butonului. În acest moment, ar trebui să vedeți ceva de genul:

Articol delphi și interbase


Acum, dând dublu clic pe acțiunea în ActionList, veți avea ocazia să vă înregistrați un fel de handler. Acest manipulator foarte, în funcție de idee, și va fi angajat în crearea unei baze de date. Dacă ți-ai dat probleme de defilare prin descrierea componentei
TIbDatabase, apoi a avut o metodă corespunzătoare (CreateDatabase) pentru a crea baza de date. Acum ne vom da seama cum funcționează această metodă.

Crearea unei baze de date

Formular pentru introducerea parametrilor minime

Evident, parametrii necesari pentru crearea bazei de date trebuie să intrăm cumva. și anume de la crearea unui dialog aici, nu vă veți întoarce. Așadar, adăugăm un nou formular (dlgDbCreate) la proiect și îl împingem pe câmpurile de intrare necesare. Rezultatul este aproximativ următorul:

Articol delphi și interbase


Deoarece crearea unei baze de date nu este o sarcină zilnică, este logic să ștergeți acest formular din lista creată automat și să scrieți o procedură care, atunci când este chemată, va crea dinamic acest formular, pentru a primi utilizatorul valorile potrivite și pentru a ne întoarce la noi ca parametri. Mergeți la Project / Options, mutați dlgDbCreate pe lista formelor disponibile și scrieți un cod simplu:

tip
TdlgDbCreate = clasa # 40; TForm # 41;
btnOk. TBitBtn;
btnCancel. TBitBtn;
lDbName. TLabel;
lDialect. TLabel;
lLogin. TLabel;
lPassword. TLabel;
eDbName. tEditează;
cbDialect. TComboBox;
eLogin. tEditează;
ePassword. tEditează;
Bevel1. TBevel;
privat

public

funcția de clasă fDlgDbCreate. TDlgDbCreate;
se încheie;

var
dlgDbCreate. TdlgDbCreate;

funcția GetDbParams # 40; var DBName. șir de caractere; var Dialect. întreg;
var UserName. Parola. șir # 41;. boolean;

funcția GetDbParams # 40; var DBName. șir de caractere; var Dialect. întreg;
var UserName. Parola. șir # 41;. boolean;
începe
cu TDlgDbCreate. fDlgDbCreate nu începe
Rezultat. = # 40; ShowModal = mrOk # 41; ;
dacă rezultatul începe apoi
DBNAME. = eDbName. Text;
Dialect. = StrToInt # 40; cbDialect. text # 41; ;
USERNAME. = eLogin. Text;
Parola. = ePassword. Text;
se încheie;
se încheie;
se încheie;

funcția de clasă TdlgDbCreate. fDlgDbCreate. TDlgDbCreate;
începe
dacă dlgDbCreate = nul atunci
dlgDbCreate. = Sine. crea # 40; zero # 41; ;
Rezultat. = dlgDbCreate;
se încheie;

FreeAndNil # 40; dlgDbCreate # 41; ;
end.

Offtopic: Folosind metode de clasă pentru a lucra cu obiecte care nu sunt create automat

Transmiterea parametrilor către server

În momentul de față, avem o distracție: alimentați toți parametrii primiți către componentă
TIbDatabase și apelează metoda lui CreateDatabase. Totul este destul de banal, mai jos dau doar codul, să acorde o atenție doar la un singur punct: structura parametrilor când metoda este chemată să creeze baza de date. Este ușor diferită de cea utilizată la conectare. Handlerul însuși este înregistrat în aDatabaseCreate.OnExecute (TAction), care este atribuit singur butonului nostru de până acum.

procedura TfMain. aDatabaseCreateExecute # 40; Expeditor. TObject # 41; ;
var
DBNAME. șir de caractere;
Dialect. întreg;
USERNAME. șir de caractere;
Parola. șir de caractere;

începe
dacă GetDbParams # 40; DBNAME. Dialect. USERNAME. parolă # 41; atunci
cu dbMain începe
Conectat. = FALSE;
Databasename. = DbName;
SQLDialect. = Dialect;
Params. Clear;
Params. adăuga # 40; 'USER' '+ UserName +' '' # 41; ;
Params. adăuga # 40; 'PASSWORD' '+ Parola +' '' # 41; ;

încerca
createDatabase;
MessageDlg # 40; format # 40; csDatabaseCreatedMsg. # 91; DBNAME # 93; # 41;. mtInformation. # 91; MBOK # 93;. 0 # 41; ;
cu excepția
pe E. Excepția face
MessageDlg # 40; format # 40; csDatabaseCreateError. # 91; E. Mesaj # 93; # 41;. mtError. # 91; MBOK # 93;. 0 # 41; ;
se încheie;
se încheie;
se încheie;


În mod implicit, login / parola este sysdba / masterkey. De asemenea, puteți experimenta cu ei, dar pentru o muncă serioasă, parola de administrator ar trebui schimbată inițial (login, sysdba, nu poate fi schimbată).

Mesajele emise de program sunt plasate în constante separate, declarate ca resurse de șir. Acest lucru se face astfel încât aceste constante să poată fi editate ulterior direct în fișier (salut pentru hackeri :)). Aici, de fapt, și nu prea mult. Acum, făcând clic pe buton, completând câmpurile de formular și făcând clic pe "Finalizați", veți fi proprietarul norocos al noii baze de date. Când numiți baza de date, trebuie să urmați tradițiile, adică. specificați extensia de fișier "* .GDB". Dacă pe discul specificat de dvs. apare un fișier, puteți trece mai departe, și anume - a se vedea ce se află în el.

Conectarea la baza de date

Din nou, o chestiune de gust, dar m-am dus de-a lungul modul în care intefeysa Multiscreen (MDI), astfel încât fiecare se deschide o bază de date pentru a crea o fereastra copil nou, în care această bază de date poate fi rulat. Prin urmare, forma principală expune atributul FormStyle = fsMDIForm, vom începe o nouă formă, se scoate din generat automat, acesta indică FormStyle = fsMDIChild, iar noi l loc pe un alt
Tibbata (dbChild) pentru conexiune directă. În formularul principal, porniți o altă taxă (aDatabaseOpen), butonul asociat (btnDatabaseOpen) și adăugați o altă imagine în TImageList (ilMain). Pentru a deschide fișierul, avem nevoie de dialogul TOpenDialog (OpenDlg) cu setările corespunzătoare. Conexiunea în sine este cel mai bine setată într-o formă de copil, o procedură care va fi trecută pe calea spre fișierul bazei de date, care a fost stricată de OpenDlg. În plus, procedura va crea un nou formular și îl va elibera dacă conexiunea nu reușește. Veți primi despre următorul cod:

procedura OpenDatabase # 40; DBNAME. șir # 41; ;
începe
cu TfChild. crea # 40; cerere # 41; începeți
dbChild. Databasename. = DbName;
dbChild. SQLDialect. = 3;
încerca
dbChild. Conectat. = TRUE;
LoadObjects;
Legendă. = DbName;
Arată;
cu excepția
pe E. Excepția începe
MessageDlg # 40; format # 40; csDatabaseOpenError. # 91; E. Mesaj # 93; # 41;. mtError. # 91; MBOK # 93;. 0 # 41; ;
gratuit;
se încheie;
se încheie;
se încheie;
se încheie;


Singura nuanță este instalarea unui dialect egal cu trei. De fapt, la baza poate fi egal cu unul. Aici este în mecanismul de procesare dialecte incoerențe: vă puteți conecta la baza de date cu „overpriced“, în comparație cu dialectul reale (acesta va fi redus în mod automat și se va OnDialectDowngradeWarning eveniment), dar nu și invers. (Vezi proprietatea SqlDialect)

În formularul de bază, apelul către agentul de manipulare este ușor de derutat:

procedura TfMain. aDatabaseOpenExecute # 40; Expeditor. TObject # 41; ;
începe
dacă OpenDlg. Executați apoi
OpenDatabase # 40; OpenDlg. FileName # 41; ;
se încheie;

Obțineți o listă de tabele și câmpuri

În acest caz, două proceduri ale aceleiași componente ne vor ajuta
TIbDatabase. GetTableNames și GetFieldNames. Pentru comoditate, am pus forma copilului TTreeView (tvObject), în care vom afișa toate acestea sub forma unui copac, aproximativ la fel ca același IbExpert. Procedura de descărcare a unor lucruri care nu sunt obișnuite nu se reprezintă, iar codul de mai jos este:

procedura TfChild. LoadObjects;
var
Nod.
TableNode. TTreeNode;
slTables.
slFields. TStrings;
i. j. întreg;
începe
cu tvObjects. Elementele încep
BeginUpdate;
încerca
Clear;
Nod. = Adăugați # 40; zero. 'Oaaeeou' # 41; ;
slTables. = TStringList. Creați;
slFields. = TStringList. Creați;
încerca
dbChild. GetTableNames # 40; slTables. TRUE # 41; ;
pentru i. = 0 la tabele. Numărul 1 începe
TableNode. = AddChild # 40; Nod. slTables # 91; eu # 93; # 41; ;
dbChild. GetFieldNames # 40; slTables # 91; eu # 93;. slFields # 41; ;
pentru j. = 0 la slFields. Numără - 1
AddChild # 40; TableNode. slFields # 91; j # 93; # 41; ;
se încheie;
în cele din urmă
slFields. gratuit;
slTables. gratuit;
se încheie;
în cele din urmă
EndUpdate;
se încheie;
se încheie;
se încheie;


Ie pentru fiecare tabel obținem o listă cu câmpurile sale. Această procedură este apelată din OpenDatabase scrisă imediat după instalarea Conectat la TRUE. Pe ecran, rezultatul va arata cam asa:

Articol delphi și interbase


După cum puteți vedea, în baza de date "goală" sa dovedit a fi doar o grămadă de mese! Acest lucru se explică prin faptul că atunci când am apelat procedura GetTableNames, am trecut al doilea parametru [System: boolean] la TRUE. Și tot ceea ce vedem nu este altceva decât mesele de sistem. Privind în perspectivă, voi spune că sunt responsabili pentru stocarea metadatelor, gestionarea integrității și multe altele.

În următorul articol, vom învăța cum să creăm noi tabele, să le vedem și vom trăi mai mult în arhitectura internă a DBMS-ului Interbase.

Întrebările și deciziile sunt luate atât în ​​săpun, cât și pe forum. Sursa programelor ușor de pieptat pentru Delphi5 poate fi luată aici.

Pentru aceasta - înainte de întâlniri, toate norocul.

Articole similare