SQL-заявки в Делфи, delphisite

Изберете * от служител, ако ЗАПЛАТА> 50 000


. Щракнете върху 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 # 40; Подател: TObject # 41; ;

messageDlg # 40; "Не е въведено SQL-заявка". mtError, # 91; mbOK # 93. 0 # 41; ;

имот Params
Това би трябвало да е достатъчно за потребителя, знаейки, 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 показва пълния код за пример.
обява 2

процедура TForm1. BitBtn1Click # 40; Подател: TObject # 41; ;

ако не Query1. подготвен след това

Query1. ParamByName # 40; "DEPT_NO" # 41. AsString: = edit1. текст

Query1. ParamByName # 40; "DEPT_NO" # 41. AsInteger: = 0;

На д. EDatabaseError задачи messageDlg # 40; д. съобщение,

процедура TForm1. DataSource2DataChange # 40; Подател: TObject; Поле: TField # 41; ;

ако не Query1. приготвен

Query1. ParamByName # 40; "Dept_no" # 41. asInteger: = Table1Dept_No. asInteger;

На д. EDatabaseError правя

messageDlg # 40; д. съобщение. mtError, # 91; mbOK # 93. 0 # 41; ;

Техника използване 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 '[' служителя])
Резултатът от горната команда ще "Изберете * от СЛУЖИТЕЛ". Функция буквално прави смяната на форматиране ценности масив. Когато използвате няколко опции за форматиране, промяна от ляво на дясно. Например,

формат # 40; "Изберете * от% и където% S =.". # 91; tblName, fldName, fldValue # 93; # 41;

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

процедура TForm1. BitBtn1Click # 40; Подател: TObject # 41; ;

sqlString: = 'Изберете EMP_NO% и от служител, ако ЗАПЛАТА% и ";

ако showSalaryChkBox. Проверих след това

fmtStr2: = salaryEdit. текст

Query1. SQL. Добави # 40; формат # 40; sqlString, # 91; fmtStr1, fmtStr2 # 93; # 41; # 41; ;

messageDlg # 40; д. съобщение. mtError, # 91; mbOK # 93. 0 # 41; ;

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

процедура TForm1. BitBtnClick # 40; подател: TObject # 41;

Query1. SQL. Добави # 40; "Актуализиране на заплата от СЛУЖИТЕЛ" +

"Когато ЗАПЛАТА<:salary values (SALARY*(1+:raise)' ) ;

Query1. paramByName # 40; "Заплата" # 41. asString: = edit1. текст;

Query1. paramByName # 40; "Raise" # 41. asString: = edit2. текст;

на д: EDatabaseError правя

messageDlg # 40; д. съобщение. mtError, # 91; mbOK # 93. 0 # 41; ;

Всички по-горе примери се предположи, използвани в заявката си за кандидатстване. Те може да даде солидна основа, за да започнете да използвате приложения 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 е пример, който използва таблица, озаглавена СМЕТКИ. Показва как се опитва да преведе сумата от една сметка в друга.
обява 7

процедура TForm1. BitBtn1Click # 40; Подател: TObject # 41; ;

ситуация, при която се приспада сумата надхвърля BALANCE. Ако е така, UPDATE

query1. SQL. Ясно;

query1. SQL. Добави # 40; формат # 40; "Актуализиране на профилите" +

"Разположен салдо = салдо -% т)" +