:: Меню ::

Головна
Передмова
СЕРЕДОВИЩЕ РОЗРОБКИ C++ BUILDER
Початок роботи
Перший проект
ПРАКТИКУМ ПРОГРАМУВАННЯ
Графіка
Мультимедіа
Бази даних
Компонент програміста
Консольне застосування
Довідкова система
Створення настановного диска
Приклади програм
C++ Builder — короткий довідник
Книга для гостей
Контакти
Добавити у вибране

:: Друзі ::

 
Проститутки Стерлитамака – в вашем полном распоряжении! И не нужно искать. Наш сайт – сервис, который поможет вам найти девушку на ночь. Не просто девушку, а одну из лучших индивидуалок в Стерлитамаке.

:: Лічильники ::

=

 

 

 

 

 

Вибір інформації з бази даних



При роботі з базою даних користувача, як правило, цікавить не весь її вміст, а деяка конкретна інформація. Знайти потрібні відомості можна послідовним переглядом записів. Проте такий спосіб пошуку незручний і малоефективний.

Більшість систем управління базами даних дозволяють виконувати вибірку потрібної інформації шляхом виконання запитів. Користувач формулює запит, указуючи критерій, якому повинна задовольняти інформація, що цікавить його, а система виводить записи, що задовольняють запиту.

Для вибірки з бази даних записів, що задовольняють деякому критерію, призначений компонент Query (мал. 5.17).



Мал. 5.17. Компонент Query


Компонент Query як і компонент Table є записами бази даних, але на відміну від останнього він представляє не всю базу даних (всі записи), а тільки її частина — записи, що задовольняють критерію запиту.

У таблиці. 5.13 перераховані деякі властивості компоненту Query.

Таблиця 5.13. Властивості компоненту Query


Властивість

Визначає

Name

Ім'я компоненту. Використовується компонентом Datasource для зв'язку результату виконання запиту (набору записів) з компонентом, що забезпечує проглядання записів, наприклад Dbgrid

SQL

Записаний на мові SQL запит до бази даних (до таблиці)

Active

При привласненні властивості значення true активізується процес виконання запиту

Recordcount

Кількість записів, що задовольняють критерію запиту


Для того, щоб під час розробки програми задати, яка інформація має бути виділена з бази даних, у властивість SQL треба записати запит — команду на мові SQL (Structured Query Language, мова структурованих запитів).

У загальному вигляді SQL-запрос на вибірку даних з бази даних (таблиці) виглядає так:

SELECT  Спісокполей
 FROM Таблиця
 WHERE
(Критерій)
 ORDER BY  Спісокполей

де:

  •  SELECT — команда "вибрати з таблиці записи і вивести вміст полів, імена яких вказані в списку";
  •  FROM — параметр команди, який визначає ім'я таблиці, з якої потрібно зробити вибірку;
  •  WHERE — параметр, який задає критерій вибору. У простому випадку критерій — це інструкція перевірки вмісту поля;
  •  ORDER BY — параметр, який задає умову, відповідно до якої будуть впорядковані записи, що задовольняють критерію запиту.


Наприклад, запит

SELECT Date_f, Task_f 
FROM ':organizer:org.db' 
WHERE ( Date_f = '09.02.2003')
 ORDER BY Date_f

забезпечує вибірку записів з бази даних organizer (з таблиці org.db), у яких в полі Date_f знаходиться текст 09.02.2003, тобто формує список заходів, призначених на 9 лютого 2003 року.

Інший приклад. Запит

SELECT Date_f, Task_f
 FROM ':organizer:org.db1 
WHERE
( Date_f >= '10.02.2003') AND ( Date_f <= 46.02.2003') 
ORDER BY Date_f

формує список справ, призначених на тиждень (з 10 по 16 лютого 2003 року).

Запит може бути сформований і записаний у властивість SQL компоненту Query під час розробки форми або під час роботи програми.

Для запису запиту у властивість SQL під час розробки форми використовується редактор списку рядків (мал. 5.18), вікно якого відкривається в результаті клацання на кнопці з трьома крапками в рядку властивості SQL (у вікні Object Inspector).



Мал. 5.18. Введення SQL-запроса під час розробки форми додатку


Сформувати запит під час роботи програми можна за допомогою методу Addзастосувавши його до властивості SQL компоненту Query.

Нижче приведений фрагмент коди, яка формує запит (тобто записує текст запиту у властивість SQL компоненту Query) на вибір інформації з таблиці org бази даних organizer. Передбачається, що строкова змінна today (тип Ansistring) містить дату у форматі dd/mm/yyyy.

Form1->query1->sql->add("SELECT Date_f, Task_f"); 
Form1->query1->sql->add("FROM ':organizer:org.db'"); 
Form1->query1->sql->add("WHERE (Date_f = '" + today + "')"); 
Form1->query1->sql->add("ORDER BY Date_f");

Якщо запит записаний у властивість SQL компоненту Query під час розробки форми додатку, то під час роботи програми критерій запиту можна змінити простою заміною відповідного рядка тексту запиту.

Наприклад, для запиту:

SELECT Date_f, Task_f 
FROM ':organ!zer:org.db'
 WHERE
( Date_f = '09.02.2003') 
ORDER BY Date_f

інструкція заміни критерію виглядає так:
Queryl->sql->strings[3] = "(Date_f = '" + tomorrow + "')";

Слід звернути увагу на те, що властивість SQL є структурою типу Tstrings у якого рядка нумеруються з нуля.

Для того, щоб користувач міг вибирати інформацію з бази даних, у форму застосування, що розробляється, треба додати кнопки Сьогодні, Завтра, Цей тиждень і Все (мал. 5.19). Призначення цих кнопок очевидне. Також у форму додано два компоненти Label. Поле Label1 використовується для відображення поточної дати. У полі Label2 відображається режим проглядання бази даних.



Мал. 5.19. Остаточний вид форми


Функції обробки події click на кнопках Сьогодні, Завтра і Цей тиждень приведені в лістингу 5.1. Кожна з цих функцій змінює відповідним чином сформований під час розробки форми SQL-запит. Для отримання поточної дати функції звертаються до стандартної функції NOW яка повертає поточну дату і час. Перетворення дати в рядок символів виконує стандартна функція Formatdatetime.

Лістинг 5.1. Обробка події Click на кнопках Сьогодні, Завтра і Цей тиждень

// Клацання на кнопці Сьогодні 
void __fastcall Tforml::buttonlclick(Tobject *Sender) 
{ 
Ansistring today = Formatdatetime("dd/mm/yyyy",now()); 
Forml->label2->caption = "Сьогодні"; 
// змінити критерій запиту 
Queryl->sql->strings[3] = "(Date_f = '" + today + "')"; 
// виконати запит Forml->queryl->open(); 
Forml->datasourcel->dataset = Forml->queryl; 
if ( ! Forml->queryl->recordcount) 
{ 
Showmessage("Ha сьогодні ніяких справ не заплановано!"); 
} } 
// клацання на кнопці Завтра 
void __fastcall Tforml::button2click(Tobject *Sender) 
{ < 
Ansistring tomorrow = Formatdatetime("dd/mm/yyyy", Now() +1); 
Forml->label2->caption = "Завтра"; 
// змінити критерій запиту 
Queryl->sql->strings[3] = "(Date_f = '" + tomorrow + "')"; 
// виконати запит Forml->queryl->open(); 
Forml->datasourcel->dataset = Forml->queryl; 
if ( ! Forml->queryl->recordcount) 
{ 
Showmessage("На завтра ніяких справ не заплановано!"); 
} } 
// клацання на кнопці Цей тиждень 
void __fastcall Tforml::button3click(Tobject *Sender) 
{ 
// від поточного дня до кінця тижня (до воскресіння) 
Tdatetime Present
Endofweek; 
Label2->caption = "На цьому тижні"; 
Present= Now(); // Now — повертає поточну дату 
// для доступу до Startofweek, Endofweek, Yearof і Weekof
// треба підключити Dateutils.hpp (див. директиви tfinclude) 
// ************************** 
Endofweek = Startofaweek(Yearof(Present),weekof(Present)+1); 
Queryl->sql->strings[3] = 
"(Date_f >= '"+ 
Formatdatetime("dd/mm/yyyy",present)+"') 
AND " + "(Date_f<  '"+ Formatdatetime("dd/mm/yyyy",endofweek)+"'}";
 Queryl->0pen(); 
if ( Queryl->recordcount) { 
Datasourcel->dataset = Forml->queryl;
 } else 
Showmessage("На цей тиждень ніяких справ не заплановано.");
 } 

В результаті клацання на кнопці Все в діалоговому вікні програми повинно бути виведено весь вміст бази даних. Базу даних представляє компонент Table1. Тому функція обробки події click на кнопці Все просто "перемикає" джерело даних на таблицю (лістинг 5.2).

Лістинг 5.2. Обробка події на кнопці Все

// Клацання на кнопці Все 
void__fastcall Tforml::button4click(Tobject *Sender) 
{ 
// встановити: джерело даних — таблиця 
// таким чином, отобажаєтся вся БД 
Forml->datasourcel->dataset = Forml->tablel; 
Label2->caption = "Все, що намічене зробити"; } 

Програма "Ежедневник" спроектована таким чином, що при кожному її запуску в діалоговому вікні виводиться поточна дата і список справ, запланованих на цей і найближчі дні. Виведення дати і назви дня тижня в полі Label виконує функція обробки події onactivate (її текст приведений в лістингу 5.3). Ця ж функція формує критерій запиту до бази даних, що забезпечує виведення списку завдань, вирішення яких заплановане на сьогодні (в день запуску програми) і на завтра. Якщо програма запускається в п'ятницю, суботу або воскресіння, то завтрашнім днем вважається понеділок. Такий підхід дозволяє зробити попереджуюче нагадування, адже, можливо, що користувач не включить комп'ютер у вихідні дні.

Лістинг 5.3. Функція обробки події Onactivate

Ansistring stday[7] = ("воськресенье","понедельник"
"вівторок", "середовище" 
"четверг","пятніца","суббота"};
Ansistring stmonth[12] = {"января","февраля","марта" 
"апреля","мая","іюня","іюля"
 "августа","сентября"
"жовтня", "ноября","декабря"}; 
// активізація форми 
void _fastcall Tforml::formactivate(Tobject *Sender) 
{ 
Tdatetime Today,   // сьогодні 
Nextday;  // наступний день Сні обов'язково завтра) 
Word Year, Month, Day; // рік, місяць, день 
Today = Now (); 
Decodedate(Today, Year, Month, Day); 
Labell->caption =  "Сьогодні " + Inttostr(Day)+
  " " + stmonth[Month-l]+ " " + 
  Inttostr(Year)+ " роки " + stday[Dayofweek(Today)-1]; 
Label2->caption = "Сьогодні і найближчі дні"; 
// обчислимо наступний день 
// якщо сьогодні п'ятниця, то, щоб не забути 
// що заплановане на понеділок, вважаємо, що наступний *
// день — понеділок 
switch ( Dayofweek(Today)) { 
case 6 : Nextday = Today + 3; break; // сьогодні п'ятниця 
case 7 : Nextday = Today + 2; break; // сьогодні субота 
default : Nextday = Today + 1; break; 
} 
// запит до бази даних: чи є справи, заплановані 
 // на сьогодні і наступного дня 
Queryl->sql->strings[3] = 
"(Date_f >= '"+ Formatdatetime("dd/mm/yyyy",today)+"') 
AND " + "(Date_f<= '"+
 Formatdatetime("dd/mm/yyyy",nextday)+"')"; 
Queryl->open(); 
Datasourcel->dataset = Forml->queryl; 
if ( ! Queryl->recordcount) 
{
Showmessage("На сьогодні і найближчі дні ніяких справ не заплановано."); 
} 
}

Використання псевдоніма для доступу до бази даних забезпечує незалежність програми від розміщення даних в системі, дозволяє розміщувати програму роботи з даними і базу даних на різних дисках комп'ютера, у тому числі і на мережевому. Разом з тим для локальних баз даних типовим рішенням є розміщення бази даних в окремому підкаталозі того каталога, в якому знаходиться програма роботи з базою даних. Таким чином, програма роботи з базою даних "знає", де знаходяться дані. При такому підході можна відмовитися від створення псевдоніма при допомозі Database Desktop і покласти завдання створення псевдоніма на програму роботи з базою даних. Очевидно, що такий підхід полегшує адміністрування бази даних.

Як ілюстрація сказаного в лістингу 5.4 приведений варіант реалізації функції Onactivate яка створює псевдонім для бази даних organizer. Передбачається, що база даних знаходиться в підкаталозі DATA того каталога, в якому знаходиться виконуваний файл програми. Безпосереднє створення псевдоніма виконує функція Addstandardalias якою як параметр передається псевдонім і відповідний йому каталог. Оскільки під час розробки програми не можна знати, в якому каталозі буде розміщена програма роботи з базою даних і, отже, підкаталог бази даних, ім'я каталога визначається під час роботи програми шляхом звернення до функцій Paramstrto) і Extractfilepatch. Значення першої — повне ім'я виконуваного файлу програми, другої, — шлях до цього файлу. Таким чином, процедурі Addstandardalias передається повне ім'я каталога бази даних.

Лістинг 5.4. Створення псевдоніма під час роботи програми

void__fastcall Tforml::formactivate(Tobject *Sender) 
{
Tdatetime Today,   // сьогодні 
Nextday;  // наступний день (не обов'язково завтра) 
Word Year, Month, Day; // рік, місяць, день 
Today = Now (}; 
Decodedate(Today, Year, Month, Day); 
Labell->caption =  "Сьогодні " + Inttostr(Day)+
  " " + stmonth[Month-l]+ " " + 
   Inttostr(Year)+ " роки " + stday[Dayofweek(Today)-1];
Label2->caption = "Сьогодні і найближчі дні"; 
// обчислимо наступний день
// якщо сьогодні п'ятниця, то, щоб не забути 
// що заплановане на понеділок, вважаємо, що наступний 
// день — понеділок 
switch ( Dayofweek(Today)) { 
case 6 : Nextday = Today + 3; break; // сьогодні п'ятниця 
case 7 : Nextday = Today + 2; break; // сьогодні субота 
default : Nextday = Today + 1; break;
} 
#define Din_alias 
// псевдонім доступу до БД створюється динамічно 
// якщо псевдонім створений за допомогою Database Desktop 
// або BDE Administrator, директиву tfdefine Din_alias 
//треба видалити ("закоментувати") 
#ifdef Din_alias // псевдонім створюється динамічно 
// створимо псевдонім для доступу до БД 
Session->configmode = cmsession; 
Session->addstandardalias("organizer" 
Extractfilepath(Paramstr(0))+"DATA\\", "PARADOX");
 // база даних "Ежедневник" 
// у форматі Paradox
#endif
Forml->tablel->active = true;
 // відкрити таблицю 
// запит до бази даних: чи є справи, заплановані
 // на сьогодні і завтра 
Queryl->sql->strings[3] = 
"(Date_f >= '"+ 
Formatdatetime("dd/mm/yyyy",today)+"')
 AND " + "(Date_f <= '"+ 
Formatdatetime("dd/mm/yyyy",nextday)+'")"; 
Queryl->0pen(); 
Datasourcel->dataset = Forml->queryl; 
if ( ! Queryl->recordcount) 
( 
Showmessage("На сьогодні і найближчі дні 
ніяких справ не заплановано."); 
} } 

 


Бесплатное русское порно онлайн https://nn-dosug.net/ankets/mature зрелые девушки.
x

:: Наша кнопка ::

Отримати код:

Підтримайте наш сайт і розмістіть нашу кнопку на своєму ресурсі.


:: Реклама ::


:: Посилання ::

-


 

 

 


Copyright by Zvircom © 2009