ПредишенСледващото

1. Въведение

Delphi компоненти за работа с бази данни са създадени на базата на работата с SQL и клиент / сървър архитектура. Когато работите с тях, можете да използвате функциите за разширена поддръжка за отдалечени сървъри. Delphi предвижда тази подкрепа по два начина. На първо място, директно командването на Delphi позволява на разработчиците да управляват маси, се определят граници, изтриване, вмъкване и редактиране на съществуващи записи. Вторият начин е да използвате заявки език SQL където низа на заявката се предава към сървъра за своята разбор, оптимизация, изпълнение и прехвърли обратно резултатите.

2. TQuery на компонент

Ако във вашето приложение, което искате да използвате SQL, вие сте абсолютно трябва да се запознае с TQuery компонента. Компонентите на TQuery и TTable наследени от TDataset. TDataset осигурява необходимата функционалност за достъп до базата данни. Като такива, компонентите на TQuery и TTable имат много общи черти. За да се подготви данни за показване на визуален компонент се използват едни и същи TDatasource. Също така, за да се определи кой сървър и база данни, която искате да осъществите достъп, трябва да укажете името на псевдоним. Това трябва да се направи настройка свойства aliasName TQuery обект.

И все пак има някои TQuery уникална функционалност. Например, TQuery има собственост с име SQL. SQL имот се използва за съхраняване на SQL-заявка. Това са основните стъпки за изготвяне на искането, където всички служители имат заплата от над $ 50,000.

Създаване на обект TQuery

Задайте DatabaseName собственост на псевдонима. (Този пример използва псевдонима IBLOCAL, свързани с employee.gdb демонстрационната база данни).

Enter: Изберете * от служител, ако ЗАПЛАТА> 50000. Щракнете върху OK.

Изберете обекта инспектор Active имота и да го настроите да се сбъдне.

Поставете форма обект TDatasource.

Инсталирайте Dataset имот в TDatasource в Query1.

Сложете форма TDBGrid на.

Задайте му Източникът на данни е собственост на Datasource1.
SQL имот е от тип TStrings. TStrings обект е даден списък от низове, и е нещо подобно на масива. тип данни TStrings има в арсенала си от низове добавите команда, те се зареждат от текстов файл и обмен на данни с друг обект TStrings. Друг компонент, който използва TStrings - TMemo. ENTRSQL.DPR Демонстрационният проект (на теория, трябва да се намира на една дискета, но към "Съвети за Делфи" не е предоставена - VO), потребителят трябва да влезе в SQL-заявка и натиснете "Do It" бутона ( "направи то "). Резултатите от търсенето се показват в решетка. В "Do It" Обява 1 показва кода напълно бутон манипулатор.
обява 1

процедура TForm1.BitBtn1Click (Sender: TObject);
започвам

Това би трябвало да е достатъчно за потребителя, знаейки, SQL. Въпреки това, повечето потребители не знаят този език. Така че, работата си като програмист е да се предостави на интерфейса и създаване на SQL-заявка. В Делфи, сложи динамични заявки можете да използвате за създаване на SQL-заявка в движение. Динамични заявки позволяват използването на параметри. За да се определи заявката за параметър използва двоеточие (:), последвано от името на параметъра. По-долу са примери за SQL-заявка с помощта на динамичен параметър:

изберете * от СЛУЖИТЕЛ
където DEPT_NO =: Dept_no

Ако трябва да се тества или задайте по подразбиране, изберете имот Params Query1 обекта. Кликнете върху бутона '. ". Трябва да видите диалоговия прозорец за настройки. Изберете Dept_no. След това, в падащия списък изберете число на тип данни. За да зададете стойността по подразбиране, въведете желаната стойност в полето за редактиране "стойност".
За смяна на SQL-заявка по време на изпълнение, параметрите, които искате да асоциирате (свързват). Параметрите могат да се променят, искането е отново екзекутиран, а данните се актуализират. За да редактирате директно стойността на параметъра се използва Params имот или метод ParamByName. Params имот е TParams масив. Следователно, за да получат достъп до параметъра, трябва да укажете на индекса. Например,

Query1.params [0] .asInteger: = 900;

asInteger собственост гласи тип Integer (името говори за себе си). Това не означава непременно, но тази област е от тип Integer. Например, ако тип поле VARCHAR а (10), Delphi извършва преобразуване на данните. По този начин, по примера можеше по-горе ще бъде написана, както следва:

Query1.params [0] .asString: = "900";

Query1.params [0] .asString: = edit1.text;

Ако искате вместо за индекс за използване на името на параметъра, а след това използвайте метод ParamByName. Този метод връща TParam обект с посоченото име. Например:

Query1.ParamByName ( "DEPT_NO") .asInteger: = 900;


Обявата 2 показва пълния код за пример.

процедура TForm1.BitBtn1Click (Sender: TObject);
започвам


Обърнете внимание на този процес, първата заявка за нещо podgotovlivayuschuyu. Когато се обаждате на метода на подготвим, Delphi изпраща SQL заявка към отдалечен сървър. Сървърът прави разбор оптимизация и заявка. Предимството на искането за обучение е в своята предварителна разбор и оптимизация. Една алтернатива е тук, за да служи на подготовката на заявки към сървъра всеки път, когато се изпълнява. След като искането е изготвен, необходимите новите параметри са заместени, и заявката се изпълнява.

В предишния пример, потребителят може да въведете номера на картата и след това пуснете дисплея на заявка за списък на служителите на този отдел. Какво ще кажете за използването на таблицата на отдел, който позволява на потребителя лесно да се придвижвате между потребителите и ведомства?

Забележка: Следващият пример използва TTable име Таблица 1. Таблица 1 за името на базата данни IBLOCAL, името на маса - отдел. DataSource2 TDatasource свързана с Таблица 1. Таблицата показва и активните и записване в TDBGrid.

Метод TQuery връзка с TTable - чрез TDatasource. Има два основни начина да направите това. На първо място, поставяте кода в събитието манипулатор TDatasource OnDataChange. Например, в Обявата 3 показва тази техника.

процедура TForm1.DataSource2DataChange (Sender: TObject; поле: TField);
започвам

Query1.ParamByName ( "Dept_no) .asInteger: = Table1Dept_No.asInteger;

На д. EDatabaseError правя

messageDlg (д съобщение mtError [mbOK], 0 ..);

Техника използване OnDataChange е много гъвкава, но има и по-лесен начин да се свърже с таблицата за заявки. TQuery с тенденция Източник на данни. Определяне TDatasource имот Източник на данни, TQuery обект сравнява имената на параметрите в SQL-заявка с имената на полетата в TDatasource. В случай на често срещани имена такива параметри са попълнени автоматично. Това позволява на разработчиците да се избягват писане код в Обява 3 (*** *** цитирани по-горе).

В действителност, техниката за използване Източник на данни не изисква никакво допълнително кодиране. За да поиска да връзка с таблицата DEPT_NO процедурата, описана в Пример 4.

Обявата 4 - Свързването TQuery в TTable чрез Datasource имот

Изберете от Query1 SQL собственост и тип:

изберете * от СЛУЖИТЕЛ
където DEPT_NO =: dept_no

Изберете Източникът на данни е собственост и възлага на източника на данни, свързани с Таблица 1 (Datasource2 в нашия пример)
Изберете Активно, имот и да го настроите да True

Това е всичко, ако искате да създадете такъв тип отношения. Все пак, има някои ограничения върху параметризираните запитвания. Параметрите са ограничени до стойности. Например, не можете да използвате параметър име на колона, или на маса. За да създадете заявка, се променя динамично, името на таблицата, можете да използвате низ техника наниз. Друга техника е да използвате командата Format.

Формат команда замества опции за форматиране (% S,.,% N, и т.н.), предавани ценности. Например,

Формат ( "Изберете * от% S". [ 'Служителя])

Резултатът от горната команда ще "Изберете * от СЛУЖИТЕЛ". Функция буквално прави смяната на форматиране ценности масив. Когато използвате няколко опции за форматиране, промяна от ляво на дясно. Например,

tblName: = 'служителя;
fldName: = 'EMP_ID;
fldValue: = 3;
Формат ( "Изберете * от% S, където% S =.". [TblName, fldName, fldValue])


команди за форматиране ще доведат до "Изберете * от служител, ако EMP_ID = 3". Тази функционалност осигурява изключителна гъвкавост за динамично заявки. Примерът по-долу в Обявата 5 позволява резултатите да се изведе поле заплати. Потребителят може да определи критерии за област заплата.

Обява 5 - Използване на командата Format, за да създадете SQL-заявка

започвам
<Создание каркаса запроса>
sqlString: = 'Изберете EMP_NO% и от служител, ако ЗАПЛАТА% и ";

В този пример, ние използваме метода Clear и добавяне на имоти SQL. Тъй като "готови" искането за достъп до сървъра, и няма гаранция, че новото искане ще използват едни и същи таблици и колони, Delphi, всеки път, когато промените SQL имота, изпълнява обратно действие на "подготовка" (unprepare). Ако TQuery не бях подготвен (т.е. подготвената Имотът е разположен на False), Delphi автоматично го подготвя за всяко изпълнение. Ето защо, в този случай, дори и да е бил причинен от метода на Подгответе, прилагането на това няма да бъде от полза.

Open срещу ExecSQL

В предишните примери извършва TQuerie Изберете-заявки. Delphi счита резултатите от Select-заявка като набор от данни, като например таблици. Това е само един клас валидни SQL-заявки. Например, Актуализация команда актуализира съдържанието на записите, но не се връща записи, или който и да е стойност. Ако искате да използвате заявка, която не се връща на набор от данни, вместо да използват ExecSQL Open. ExecSQL предава искане за изпълнение на даден сървър. По принцип, ако очаквате, че ще получите от данните от заявката, след което използвайте Open. В противен случай използвайте ExecSQL позволено, въпреки че неговото използване с опция няма да бъде конструктивна. Обява 6 показва кода за обяснение на гореописания пример.

процедура TForm1.BitBtnClick (подател: TObject)
започвам
Query1.Close;
Query1.Clear;
Query1.SQL.Add ( "Актуализиране на заплата от СЛУЖИТЕЛ" +
"Когато ЗАПЛАТА<:salary values (SALARY*(1+:raise)' );
Query1.paramByName ( "заплата") .asString: = edit1.text;
Query1.paramByName ( "повишаване") .asString: = edit2.text;
опитвам
Query1.ExecSQL;
с изключение на
на д: EDatabaseError правя
messageDlg (д съобщение mtError [mbOK], 0 ..);
приключи;
приключи;

Всички по-горе примери се предположи, използвани в заявката си за кандидатстване. Те може да даде солидна основа, за да започнете да използвате приложения TQuery. И все пак това е невъзможно да се предскаже края на използването на SQL в своите приложения. Типични сървъри могат да ви предложат други функции, като например съхранени процедури и операции. Следващите две части дава кратко описание на тези средства.

3. Компонент TStoredProc

Запомнена процедура е даден списък от команди (SQL или определен сървър), съхраняват и изпълняват на сървъра страна. Съхранени процедури не са концептуалните разлики с други видове процедури. TStoredProc наследява от TDataset, така че споделя много общи черти с TTable и TQuery. Особено забележимо прилика с TQuery. Защото за запомнени процедури не изискват връщане към ценностите, се прилагат същите правила за методи ExecProc и Отвори. Всеки сървър изпълнява работата на съхранени процедури с малки разлики. Например, ако на сървъра, който използвате Interbase, съхранени процедури се извършват в подбрана-запитвания. Например, да разгледаме резултатите от съхранена процедура, ORG_CHART, в базата данни на демо базирани СЛУЖИТЕЛ, използвайте следната SQL-заявка:

Изберете * от ORG_CHART

Когато се работи с други сървъри, например, Sybase, можете да използвате TStoredProc компонент. Този компонент има свойствата на база данни за имена и съхранена процедура. Ако процедурата изисква на входа на някои параметри, използвайте Params собственост на техния принос.
4. TDatabase

TDatabase компонент осигурява допълнителна функционалност, която липсва TQuery и TStoredProc. В частност, TDatabase ви позволява да създадете местна BDE псевдоним, така че приложението не изисква псевдоними, които се съдържат в BDE конфигурационния файл. Тези местни псевдоними в приложението може да се възползват от всички TTable, TQuery и TStoredProc. TDatabase също така позволява на разработчика да настроите процеса на свързване, чрез потискане на диалога с потребителско име и парола, както и попълване на необходимите параметри. И накрая, най-важното, а TDatabase може да осигури една единствена връзка с база данни, обобщени всички операции на базата данни чрез единен компонент. Това дава възможност за управление за работа с базата данни, за да бъде в състояние да управление на сделка.

Транзакция може да се разглежда като прехвърлянето на информация в пакета. Класически пример на една сделка за прехвърляне на пари в банковата сметка. Сделката трябва да се състои на операцията на изплащане на новия акаунт и премахването на една и съща сума от разплащателната сметка. Ако една от тези стъпки, по някаква причина, не е изпълнено, сделката се счита също така, за да се неизпълнени. В случай на такава грешка, SQL Server ви позволява да извършвате намаление на цените команда (намаление на цените), без да се правят каквито и да било промени в базата данни. Управление на транзакциите зависи от TDatabase компонент. Тъй като сделката обикновено се състои от множество заявки, трябва да се отбележи началото на транзакцията и край. За да се подчертаят началото на операцията с помощта TDatabase.BeginTransaction. След като ще бъде сключена сделката, всички команди изпълнени преди обаждането или TDatabase.Commit TDatabase.Rollback превръща във временен режим. Когато се обадите на ангажират всички променения данни се изпращат на сървъра. Когато се свържете с намаление на цените на всички промени изтичат. По-долу в Обява 7 е пример, който използва таблица, озаглавена СМЕТКИ. Показва как се опитва да преведе сумата от една сметка в друга.

процедура TForm1.BitBtn1Click (Sender: TObject);
<ПРИМЕЧАНИЕ: Поле BALANCE у ACCOUNTS имеет триггер, проверяющий
ситуация, при която се приспада сумата надхвърля BALANCE. Ако е така, UPDATE
ще бъде отменена>
започвам
опитвам
database1.StartTransaction;
query1.SQL.Clear;
<Вычитаем сумму из выбранного счета>
query1.SQL.Add (Format ( "обновяване профилите" +
"Разположен салдо = салдо -% т)" +
"Когато ACCT_NUM =% S".
[Edit1.text,
Table1Acct_Num.asString]));
query1.ExecSQL;
query1.SQL.Clear;
<Добавляем сумму к выбранному счету>
query1.SQL.Add (Format ( "обновяване профилите" +
"Разположен салдо = Баланс +% S '+
"Когато ACCT_NUM =% S".
[Edit1.text,
Table2Acct_Num.asString]));
query1.ExecSQL;
database1.Commit;
table1.Refresh;
table2.Refresh;
с изключение на
ролки обратно сделката обратно>
One: EDatabaseError задачи
започвам
messageDlg (д съобщение mtError [mbOK], 0 ..);
database1.rollback;
изход;
приключи;
One: Изключение направи
започвам

Свързани статии

Подкрепете проекта - споделете линка, благодаря!