Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Программирование запросов БД




Ввод изображения для текущей записи таблицы

Ввод и редактирование записей таблиц БД

Открытие и закрытие таблиц БД

Автоматическая привязка записей подчиненных таблиц к записям главных таблиц

Программирование функций по редактированию БД

Перейдите на модуль данных dm и создайте события BeforePost (перед сохранением новых иди отредактированных записей) для таблиц TaInst, TaChar, TaPover. Текстпрограммногокодасобытийданниже.

procedure Tdm.TaInstBeforePost(DataSet: TDataSet);
begin
TaInstListId.Value:= TaListId.Value;
end;

procedure Tdm.TaCharBeforePost(DataSet: TDataSet);
begin
TaCharInstId.Value:= TaInstId.Value;
end;

procedure Tdm.TaPoverBeforePost(DataSet: TDataSet);
begin
TaPoverInstId.Value:= TaInstId.Value;
end;

Эти коды позволяют при создании записей подчиненных таблиц автоматически добавлять значения полей главных таблиц, по которым установлены отношения между этими таблицами.

При запуске приложения таблицы БД нужно открыть, а при выходе из него, наоборот, закрыть.

Запрограммируем автоматическое открытие таблиц в момент, когда после запуска приложения форма первый раз появится на экране. Добавьте описание переменной FirstShow логического типа, как это видно из нижеприведенного кода.

implementation

uses DatMod;

{$R *.dfm}

var FirstShow: boolean = true;

procedure TForm1.FormShow(Sender: TObject);
begin
if FirstShow then
begin
FirstShow:= false;
dm.TaList.Open;
dm.TaInst.Open;
dm.TaChar.Open;
dm.TaPover.Open;
end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
dm.TaPover.Close;
dm.TaChar.Close;
dm.TaInst.Close;
dm.TaList.Close;
end;

При запуске приложения эта переменная получит значение true (истина), как указано в описании этой переменной в операторе var секции implementation.

Создайте для формы событие OnShow (на появление) и добавьте в него соответствующий код. Код работает следующим образом. В момент когда в запущенном приложении форма появляется на экране срабатывает ее событие OnShow. Поскольку FirstShow в этот момент истинно, то будет выполнен код, заключенный между операторными скобками begin... end. В нем значение этой переменной изменится на противоположное с тем, чтобы при всяком новом появлении формы на экране операторы, заключенные в этих скобках больше не выполнялись. Далее сработают четыре оператора, которые откроют в порядке подчинения соответствующие таблицы БД, расположенные на модуле dm.

Закрытие этих таблиц в противоположном порядке произойдет при закрытии формы и следовательно приложения, когда сработает ее событие OnClose.

Новые записи в таблицы можно вводить прямо в ячейки соответствующих сеток. Чтобы запись сохранилась достаточно двинуть клавиатурный курсор вниз или вверх к другой записи.

Для ввода изображения инструмента или фотографии поверщика используйте универсальную процедуру, текст которой приведен ниже

procedure PictureToGraphicField(F: TField);
var
FileName: TFileName;
Bmp: TBitmap;
jpg: TJPEGImage;
D: TDataSet;
begin
With dm, Form1 do
begin
D:= F.DataSet; // множество данных, которое содержит поле F
if D.Active then // если таблица открыта, то
if D.RecordCount > 0 then // если в таблице есть записи, то
if OpenPictureDialog1.Execute then // если файл картинки выбран, то
begin
if not (D.State in [dsEdit]) then D.Edit; // перевод таблицы в режим редактирования
FileName:= OpenPictureDialog1.FileName; // имя файла с картинкой
try
Bmp:= TBitmap.Create; // создаем Bitmap в памяти
jpg:= TJPEGImage.Create; // создаем JPEG
jpg.CompressionQuality:= 100; // качество сжатия изображения
jpg.Compress; // сжатие
jpg.LoadFromFile(FileName); // загрузка
bmp.Assign(jpg); // передача из JPEG в BMP
F.Assign(bmp); // передача картинки из Bitmap в поле "Каринка"
D.Post; // сохранение записи
except // в случае исключительной ситуции делать:
ShowMessage('Не удалось загрузить картинку.'); // сообщение об ошибке
FreeAndNil(jpg); // освобождение памяти, занятой JPEG
FreeAndNil(bmp); // освобождение памяти, занятой Bitmap
end;
end;
end;
end;

Процедура PictureToGraphicField (буквально "картинку в графическое поле") получает на вход единственный параметр F типа TField, который является графическим полем текущей записи, в которое следует ввести изображение. Будем использовать изображения только формата JPEG. Чтобы приложение "понимало" этот формат, добавьте в список USES имя модуля JPEG.

В процедуре объявлено 4 переменных FileName, Bmp, jpg, D. Первая из них потребуется для определения имени файла, содержащего изображение, вторая - для битмапа изображения (карты пискселов, из которого состоит изображение), третья - для рисунка в сжатом формате jpg, четвертая - для определения множества данных (в нашем случае это соответствующая таблица, которая содержит поле с графического типа).

Код добавления изображения расположен в операторных скобках begin... end. Действия, которые производятся в процедуре, пояснены соответствующими комментариями к операторам.

Для кнопки ввода изображения инструмента создайте событие OnClick:

procedure TForm1.sbInstAddClick(Sender: TObject);
begin
PictureToGraphicField(dm.TaInst.FieldByName('Картинка'));
end;

Код содержит оператор обращения к процедуре PictureToGraphicField для ввода изображения из выбранного файла в поле Картинка таблицы TaInst, которая находится на модуле данных dm.

Для кнопки ввода фотографии поверщика создайте событие OnClick:

procedure TForm1.sbPoverAddClick(Sender: TObject);
begin
PictureToGraphicField(dm.TaPover.FieldByName('Фото'));
end;

Примерный вид формы с введенными в таблицы записями показан на рис. 2.9.

Рис. 2.9. Вид формы в работающем приложении

Создайте записи, которые показаны на рис. 2.9, либо по своему усмотрению. При необходимости можете использовать образцы изображений, которые содержатся в папке pictures данного руководства.

Запрос (query) – это инструкция для выбора из БД или модификации БД. Запрос может быть выполнен посредством обработки некоторого программного кода, либо составлен на специальном языке SQL (Structured Query Language), который "понятен" соответствующей СУБД и поэтому может быть ею выполнен.

Существует запросы на выборку данных, на их обновление, добавление, удаление, создание новых таблиц и многое другое. Наиболее распространенным является запрос на выборку данных из БД. Рассмотрим именно этот вид запросов.




Поделиться с друзьями:


Дата добавления: 2015-05-09; Просмотров: 1059; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.