Разработка программных средств базы данных видеодисков
Модели баз данных. Локальная, файл-серверная, клиент-серверная и распределенная архитектуры. Технология BDE для доступа к данным. Драйверы баз данных. Создание таблицы, интерфейс программы, дерево объектов, инсталлятор. Системы визуальной разработки.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 04.06.2013 |
Размер файла | 989,5 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Министерство Образования Российской Федерации
Рязанский Государственный Радиотехнический Университет
Кафедра САПР ВС
Дисциплина: «Инженерная и компьютерная графика»
Пояснительная записка
к курсовой работе
по теме:
«Разработка программных средств БД видеодисков»
Выполнила:
ст. гр. 547
Хрусталёв К.Д.
Проверил:
Бакулев А.В.
Рязань
2007 г.
Оглавление
1. Введение
2. Теоретический раздел
2.1 Модели баз данных
2.2 Архитектура СУБД
2.3 Технология BDE для доступа к данным
2.4 Драйверы баз данных
3. Практический раздел
3.1.1 Проектирование БД
3.1 Создание таблицы
3.2 Интерфейс программы
3.3 Дерево объектов
3.4 Инсталлятор
3.5 Справка
4. Исходный текст программы
4.1 Файл проекта
4.2 Unit1
4.3 Unit2
4.4 Unit3
4.5 Unit4
4.6 Unit6
4.7 hkdunit.pas
Список используемой литературы
1. Введение
База данных -- это совокупность записей различного типа, содержащая перекрестные ссылки.
Записи одного типа внутри базы данных хранятся в таблицах.
Файл -- это совокупность записей одного типа, в котором перекрестные ссылки отсутствуют.
Более того, в определении вообще нет упоминания о компьютерной архитектуре. Дело в том, что, хотя в большинстве случаев база данных действительно представляет собой один или (чаще) несколько файлов, физическая их организация существенно отличается от логической. Таблицы могут храниться как в отдельных файлах, так и все вместе. И наоборот, для хранения одной таблицы иногда используются несколько файлов. Для поддержки перекрестных ссылок и быстрого поиска обычно выделяются дополнительные специальные файлы.
В ряде случаев базы данных реализуются вообще без привлечения файловой системы. Это связано как с ее ограничениями (в ряде операционных систем размер файла не может превышать 2 Гбайта), так и с необходимостью обеспечить максимально быструю работу с жестким диском. Например, некоторые системы работают с носителями, подвергнутыми простейшему форматированию, несовместимому со стандартами DOS или Windows и предназначенному исключительно для упрощения процесса доступа к данным. Есть программы, обрабатывающие данные на специализированных дисковых носителях RAID и множестве других периферийных устройств, назначение которых только одно: повысить скорость доступа к большим объемам сведений.
Поэтому при работе с базами данных обычно применяются понятия более высокого логического уровня: запись и таблица, без углубления в подробности их физической структуры.
Таким образом, сама по себе база данных -- это только набор таблиц с перекрестными ссылками. Чтобы универсальным способом извлекать из нее группы записей, обрабатывать их, изменять и удалять, требуются специальные программы, которые называются системами управления базами данных или сокращенно СУБД.
Функциональные возможности разных СУБД лежи в весьма широком диапазоне. В некоторые комплексы встроены специализированные языки программирования и даже целые системы визуальной разработки, генераторы сложных отчетов, аналитические модули. Они способны поддерживать одновременную работу с данными десятков тысяч пользователей. Другие СУБД обладают только базовым набором возможностей (хранение данных в таблицах и выполнение запросов). При их использовании разработчикам приходится самостоятельно программировать работу по созданию отчетов, удобному просмотру и редактированию содержимого базы данных и так далее. В зависимости от предоставляемых ими средств СУБД обычно сильно различаются по цене.
2. Теоретический раздел
2.1 Модели баз данных
Таблицы, в которых хранятся данные, состоят из наборов записей одинаковой структуры. Можно сказать, что таблица -- это двумерный массив, где строки образованы отдельными записями, а столбцы -- полями этой записи. Более точно таблица представляется как одномерный массив переменной длины из записей конкретной структуры (тип record Паскаля).
Модель базы данных, состоящей из подобных таблиц, называется реляционной. Практически все ведущие производители СУБД поддерживают именно эту модель баз данных, и в книге в дальнейшем будет рассказываться именно о ней. Реляционная модель хороша тем, что проста в работе и реализации и позволяет создавать быстро работающие системы.
Имеется еще несколько моделей баз данных. Некоторые из них значительно эффективнее реляционной, но не получили широкого распространения из-за сложности создания подходящих СУБД.
О В иерархической модели данные организованы в виде деревьев.
О В сетевой модели каждый узел (набор) базы данных взаимодействует с другими узлами посредством сложной системы связей.
О В последнее время признание завоевывает объектная модель данных, когда в базе хранятся не только данные, но и методы их обработки в виде программного кода. Это перспективное направление, пока также не получившее активного распространения из-за сложности создания и применения подобных СУБД.
2.2 Архитектура СУБД
Приложения, использующие базы данных, обычно принято относить к одной из программных архитектур, имеющих свои плюсы и минусы.
Локальная архитектура
И программа, и база данных расположены на одном компьютере. В такой архитектуре работает большинство настольных приложений.
Файл-серверная архитектура
База данных расположена на мощном выделенном компьютере (сервере), а персональные компьютеры подключены к нему по локальной сети. На этих компьютерах установлены клиентские программы, обращающиеся к базе данных по сети. Преимущество такой архитектуры заключается в возможности одновременной работы нескольких пользователей с одной базой данных.
Недостаток такого подхода -- большие объемы информации, передаваемой по сети. Вся обработка выполняется на клиентских местах, где фактически формируется копия базы данных. Это приводит к ограничению максимально возможного числа пользователей и большим задержкам при работе с базой. Эти задержки вызываются тем, что на уровне конкретной таблицы одновременный доступ невозможен. Пока программа на одном из клиентских мест не закончит работу с таблицей (например, не выполнит модификацию записей), другие программы не могут обращаться к этой таблице. Это называется блокировкой на уровне таблицы и исключает возникновение путаницы в ее содержимом.
Клиент-серверная архитектура
В такой архитектуре на сервере не только хранится база данных, но и работает программа СУБД, обрабатывающая запросы пользователей и возвращающая им наборы записей. При этом программы пользователей уже не работают напрямую с базой данных как набором физических файлов, а обращаются к СУБД, которая выполняет операции. Нагрузка с клиентских мест при этом снимается, так как большая часть работы происходит на сервере. СУБД автоматически следит за целостностью и сохранностью базы данных, а также контролирует доступ к информации с помощью службы паролей. Клиент-серверные СУБД допускают блокировку на уровне записи и даже отдельного поля. Это означает, что с таблицей одновременно может работать любое число пользователей, но доступ к функции изменения конкретной записи или одного из ее полей обеспечен только одному из них.
Основной недостаток этой архитектуры -- не очень высокая надежность. Если сервер выходит из строя, вся работа останавливается.
Распределенная архитектура
В сети работает несколько серверов, и таблицы баз данных распределены между ними для достижения повышенной эффективности. На каждом сервере функционирует своя копия СУБД. Кроме того, в подобной архитектуре обычно используются специальные программы, так называемые серверы приложений. Они позволяют оптимизировать обработку запросов большого числа пользователей и равномерно распределить нагрузку между компьютерами в сети. Если, помимо работы с данными, требуется выполнить интенсивные вычисления (например, анализ сложной информации), программы для выполнения этих задач (они обычно называются компонентами) могут автоматически запускаться на более мощных сетевых компьютерах. Это практически полностью снимает нагрузку с клиентских мест. Такая архитектура гакже называется компонентной.
Недостаток распределенной архитектуры заключается в довольно сложном и дорого
стоящем процессе ее создания и сопровождения (администрирования), а также в высоких требованиях к серверным компьютерам.
Интернет-архитектура
Доступ к базе данных и СУБД (расположенным на одном компьютере или в сети) осуществляется из браузера по стандартному протоколу. Это предъявляет минимальные требования к клиентскому оборудованию. Такие программы называют «тонкими клиентами», потому что они способны работать даже на ПК с процессором 80386.
Благородя стандартизации всех протоколов и интерфейсов взаимодействия в Интернете такие системы легко создавать и внедрять. Например, можно не организовывать локальную сеть, а обращаться к серверу через Интернет или использовать протоколы Интернета в локальной сети (в таком случае говорят о технологиях интранет). В этом случае не требуется разрабатывать специальные клиентские программы или придумывать собственные спецификации обмена данными между сервером и клиентскими местами. Достаточно использовать готовые браузеры и программные решения.
В данной книге рассматриваются способы создания программ для всех описанных архитектур.
2.3 Технология BDE для доступа к данным
При создании программ, работающих с базами данных, в системе Delphi традиционно используется механизм Borland Database Engine (BDE). В состав Delphi 7 входит версия BDE 5.2, которую, впрочем, можно бесплатно обновлять разными способами (например, обратившись к Web-узлу http://www.borland.com/).
Этот механизм реализован в виде набора библиотек, которые обеспечивают для программы, написанной на Паскале, простой и удобный доступ к базам данных независимо от их архитектуры. При использовании механизма BDE разработчик может не задумываться о том, как его программа будет работать с базой данных на физическом уровне: локально, в файл-серверной, либо в клиент-серверной архитектуре. Вдобавок при переходе к использованию СУБД разных производителей программисту не потребуется менять исходный код своей программы. Достаточно внести изменения только в настройки BDE.
2.4 Драйверы баз данных
Такое удобство достигается благодаря тому, что механизм BDE представляет собой программную прослойку (middleware) между клиентской программой и базой данных (или СУБД). Запрос из приложения передается внутрь механизма BDE, который использует специализированные системные программы (драйверы) для непосредственной работы с СУБД.
ВНИМАНИЕ В дальнейшем для простоты под СУБД будем понимать как специальную серверную программу управления базой данных, так и драйвер для обращения к наборам файлов в формате файл-серверных СУБД.
Такие драйверы выпускаются для каждой СУБД, и механизм BDE настраивается на их использование с помощью специального редактора, вызываемого из утилиты SQL Explorer (Проводник SQL), которая открывается командой Database > Explore (База данных > Проводник). Драйверы могут работать с базами данных в стандарте таких СУБД, как Paradox, dBase, FoxPro. Эти СУБД ранее были построены как файл-серверные, поэтому драйвер реально представляет собой весьма сложную программу, выполняющую множество функций СУБД.
Существуют и драйверы для работы с клиент-серверными СУБД (MS SQL Server, InterBase, Oracle). Такие драйверы устроены проще. Они только передают запросы и команды из BDE в СУБД и получают обратно результаты их выполнения. Всю работу по обработке данных выполняет СУБД.
В поставку BDE входит два набора драйверов.
О Первый набор предназначен для файл-серверных СУБД dBASE, Paradox, FoxPro, Access и данных в текстовом формате.
О Второй набор ориентирован на клиент-серверные СУБД InterBase, IBMDB2, Informix, ORACLE, Sybase и Microsoft SQL Server. Этот набор называется SQL Links.
Конечно, кроме системы Delphi в мире существует немало пакетов создания программ, которые позволяют обращаться к любым СУБД. Поэтому давно разработан и существует стандартный протокол ODBC (Open Database Connectivity Interface, открытый интерфейс взаимодействия с базами данных), напоминающий независимую работу BDE. Драйверы ODBC выпущены для всех без исключения СУБД, и разработчик может использовать в BDE драйверы ODBC.
Реализация в системе Delphi прослойки BDE позволяет не привязывать программу к конкретной СУБД. Если потребуется расширить число пользователей программы и перейти, например, с файл-серверной СУБД dBase на более мощную СУБД InterBase, достаточно изменить несколько настроек BDE, не исправляя исходные тексты.
3. Практический раздел
3.1 Проектирование БД
Так как справочник рассчитан на одного пользователя, достаточно использовать локальную СУБД. Выберем СУБД Paradox, поддерживаемая механизмом BDE.
Используемая база данных будет состоять из одной таблицы так как в таблице будет всего 4 поля (Имя фильма, жанр, информация и имя файла изображения/видео), и перекрестные ссылки не имеет смысла делать.
Для поля имя выделим 50 символов, этого достаточно для большинства названий фильмов.
Для поля жанр выделим 20 символов
Для поля имя файла выделим тоже 20 символов.
3.1.1 Создание таблицы
Таблица создаётся с помощью программы Database Desktop. Тип таблицы выбираем Paradox 7.
Таблица будет иметь 5 полей:
1) ID - ключевое поле, номер записи.
2) Name - название фильма, текстовое поле длиной 50 символов.
3) Ganre - жанр фильма, текстовое поле длиной 20 символов
4) Info - информация о фильме, поле типа Formatted Memo.
5) Img - текстовое поле длиной 20 символа для хранения имени файла видео или/и изображения.
Рис.1 Создание таблицы Films
Полю Name назначаем вторичный индекс NameID. Вторичный индекс нужен что бы была возможность произвести поиск и сортировку в поле Name.
Рис2. Назначение вторичного индекса
Сохраняем базу данных как Films.DB. В результате создаются 5 файлов. Из которых файл с расширением .MB - это поле типа Formatted Memo, .XGO, .YGO - в них индексируется поле Name, .DB - непосредственно сам файл таблицы.
3.2 Интерфейс программы
Рис.2.1 Главное окно
Размещено на http://www.allbest.ru/
Рис3.
Фильтр - фильтрация фильмов по жанру. При нажатии “фильтр” появляется окно с выбором жанра фильма. Жанр можно выбрать из списка, либо ввести вручную. Фильтр чувствителен к регистру. Фильтрация организуется запросом.
Рис4. Окно фильтра
Сохранить описание - сохраняет описание фильма в текстовый файл. Название текстового файла будет совпадать с названием фильма, при желании можно изменить на дугое название. Организуется стандартным в Дельфи диалогом “Save dialog”
Рис5. Окно сохранения описания фильма
Редактирование записей - окно редактирования (удаления, добавления, изменения и т.д.) записей в таблице.
Рис6. Добавить запись
Проиграть видео - становится доступной если для данного фильма имеется видео ролик. При нажатие кнопки начнётся воспроизведение клипа.
Выход - завершение работы с программой.
3.3 Дерево объектов
Размещено на http://www.allbest.ru/
Рис.7 Дерево объектов
Окно1:
DBEdit1 - жанр
DBEdit2 - имя изображения/видео
DBGrid1 - название фильмов
DBMemo1 - описание фильмов
DataBase1
Table1
DataSourec1
Edit1 - Поиск
Image1 - Отображение изображений
Imagelist1 - изображения для кнопок
MainMenu1
MediaPlayer1 - плеер
Panel1
ProgressBar1 - отображает статус фильтрации БД
SaveDialog1 - сохранение описания фильма в файл
StatusBar1
ToolBar1
XPManifest1
Окно2:
DBEdit1 - жанр
DBEdit2 - имя изображения/видео
DBGrid1 - название фильмов
DBMemo1 - описание фильмов
DBNavigator1 - Управление базой данных
Label1
Label2
Label3
Label4
OpenPictureDialog1 - окно загрузки изображения/видео
SpeedButton1 - вызов окна загрузки изображения/видео
Окно3:
ComboBox1 - выбор жанра
SpeedButton1 - фильтровать
SpeedButton2 - выход
Окно5:
Image1
Timer1
Окно6:
Bevel1 - рамка
Label1
Label2
Memo1
SpeedButton1 - закрыть окно
3.4 Инсталлятор
В качестве создания инсталлятора используем программу WinRAR 3.6x
Устанавливаем параметры сжатия:
Рис.8 Параметры сжатия
Устанавливаем каталог в который будет распакована программа:
Рис.9 Параметры SFX
Добавляем ярлыки на рабочий стол и в ПУСК -> Программы
база данные серверный программа
Рис.10 Параметры SFX. Ярлыки
В результате генерируется SFX сценарий:
Рис.11 SFX сценарий
3.5 Справка
Справка сделана в виде HTM страниц, создавалась в редакторе Microsoft FrontPage (рис.13).
Справка вызывается при нажатии горячей клавиши [F1] либо при выборе из меню Помощь -> Справка (рис.12).
Рис.12 Вызов справки
Рис. 13 Справка
Исходный текст программы
Файл проекта:
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1}, //основная форма
Unit2 in 'Unit2.pas' {Form2}, //форма добавления записи
Unit3 in 'Unit3.pas' {Form3}, //фильтр
Unit4 in 'Unit4.pas' {Form5}, //заставка
Unit6 in 'Unit6.pas' {Form6}; //окно о программе
{$R *.res}
begin
Application.Initialize;
Form5 := TForm5.Create(Application);//форма заставки
Form5.Show;
Form5.Update;
while Form5.Timer1.Enabled do
Application.ProcessMessages;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm6, Form6);
Form5.Hide;
Form5.Free;
Application.Run;
end.
Unit1:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DBCtrls, Mask, Grids, DBGrids, ComCtrls, Menus,
ToolWin, DB, DBTables, XPMan, ImgList, ExtCtrls, hkdunit1, MPlayer,
ExtDlgs;
type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
DBMemo1: TDBMemo;
StatusBar1: TStatusBar;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
DataSource1: TDataSource;
Table1: TTable;
Database1: TDatabase;
ProgressBar1: TProgressBar;
XPManifest1: TXPManifest;
N5: TMenuItem;
N6: TMenuItem;
ImageList1: TImageList;
Image1: TImage;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
SaveDialog1: TSaveDialog;
Edit1: TEdit;
N10: TMenuItem;
DBEdit1: TDBEdit;
Panel1: TPanel;
DBEdit2: TDBEdit;
MediaPlayer1: TMediaPlayer;
N11: TMenuItem;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
procedure N4Click(Sender: TObject);
procedure Creat_(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure ChangeEdit(Sender: TObject);
procedure N10Click(Sender: TObject);
procedure ChangeIMG(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N8Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Max:integer;
bActive, bExclusive: Boolean;
implementation
uses Unit2, Unit3, Unit4, Unit6;
{$R *.dfm}
procedure TForm1.N4Click(Sender: TObject);
begin
Application.Terminate;
end;
procedure TForm1.Creat_(Sender: TObject);
begin
Form5.Show;
{-----инициализация бд----------}
Database1.DatabaseName:= 'MyNewAlias';
Database1.DriverName:= 'STANDARD';
Database1.Params.Clear;
Database1.Params.Add('PATH=.\base');//путь к базе данных
Table1.DatabaseName:= 'MyNewAlias';
Table1.TableName:= 'Films';//имя базы данных
Table1.Active:= True;
DataSource1.DataSet:= Table1;
{----конец инициализации бд---------}
DBedit1.DataSource:= DataSource1;
dbedit1.Datafield:='Ganre';
DBedit2.DataSource:= DataSource1;
dbedit2.Datafield:='Img';
Dbmemo1.DataSource:= DataSource1;
dbmemo1.DataField:='Info';
DBGrid1.DataSource:= DataSource1;
DBGrid1.Columns.Add.FieldName:='Name';
Statusbar1.Panels.Items[0].text :=' Всего записей: '+inttostr(Table1.RecordCount); //кол-во записей в бд
Max:=Table1.RecordCount;
Table1.IndexName:='NameID';
Table1.First;
{-----------progressBar in Statusbar---------}
with ProgressBar1 do
begin
Parent := StatusBar1;
Position := 0;
Top := 2;
Left := 120;
Height := StatusBar1.Height - Top;
Width := 150//StatusBar1.Panels[0].Width - Left;
end;
end;
procedure TForm1.N2Click(Sender: TObject);//сохранение опиёсания игры в текстовый файл
Var s:string;
begin
s:=Table1.FieldByName('Name').DisplayText;
Savedialog1.Title:=' Сохранить описание фильма: '+s;
Savedialog1.FileName:=strtst(s,'\/:*?<>|',2); //удаление спец символов
if Savedialog1.Execute then
begin
DBmemo1.Lines.SaveToFile(Savedialog1.Filename);
end;
end;
procedure TForm1.ChangeEdit(Sender: TObject);// приблизительный поиск
var s9, s7, s8 : string;
begin
if Edit1.Text<>'' then
begin
s9:=Edit1.Text;
s7:=Edit1.Text[1];
strtobig(s7,s8);
s9[1]:=s8[1];
Table1.FindNearest([s9]);
end;
end;
procedure TForm1.N10Click(Sender: TObject);
begin
Form2.Show;
end;
procedure TForm1.ChangeIMG(Sender: TObject); // загрузка изображения и видио файла
begin
if CheckFile('.\base\img\'+table1.FieldByName('Img').DisplayText+'.bmp')=0 //проверка наличия файла
then
begin
Image1.Picture.LoadFromFile('.\base\img\'+table1.FieldByName('Img').DisplayText+'.bmp'); //загрузкафайла изображения
end
else Image1.Picture.Graphic := nil;//иначе удаляем изображение
if CheckFile('.\base\img\'+table1.FieldByName('Img').DisplayText+'.avi')=0 then //проверка наличия файла
begin
N11.Enabled:=true; //делаем кнопку проиграть видео доступной
ToolButton4.Enabled:=true;
end
else
begin
if mediaPlayer1.Enabled then
begin
mediaPlayer1.Close;
panel1.Visible:=false;
end;
n11.Enabled:=false;
ToolButton4.Enabled:=false;
end;
end;
procedure TForm1.N11Click(Sender: TObject);//проиграть видео
begin
with MediaPlayer1 do
begin
Filename := '.\base\img\'+table1.FieldByName('Img').DisplayText+'.avi';
Open;
panel1.Visible:=true;
Display := Panel1;
DisplayRect := Panel1.ClientRect;
Play;
end;
n11.Enabled:=false;
ToolButton4.Enabled:=false;
end;
procedure TForm1.N6Click(Sender: TObject); //фильтрация базы данных
begin
if Table1.Filtered then
table1.Filtered:=false
else
Form3.Show;
end;
procedure TForm1.N8Click(Sender: TObject);
begin
Form6.Show;
Form6.Visible:=true;
end;
end.
Unit2:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DBCtrls, Mask, Grids, DBGrids, ExtCtrls, ShellApi,
Buttons, ExtDlgs,hkdunit1;
type
TForm2 = class(TForm)
DBGrid1: TDBGrid;
DBEdit1: TDBEdit;
DBMemo1: TDBMemo;
DBEdit2: TDBEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
DBNavigator1: TDBNavigator;
SpeedButton1: TSpeedButton;
OpenPictureDialog1: TOpenPictureDialog;
procedure Create_(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses Unit1;
{$R *.dfm}
//функция копирования файла
function WindowsCopyFile(FromFile, ToDir : string) : boolean;
var
F: TShFileOpStruct;
begin
F.Wnd := 0; F.wFunc := FO_COPY;
FromFile:=FromFile+#0; F.pFrom:=pchar(FromFile);
ToDir:=ToDir+#0; F.pTo:=pchar(ToDir);
F.fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION;
result:=ShFileOperation(F) = 0;
end;
//функция переименования файла
function RenameFiles( Handle : HWnd; Src : string; New : string;
AutoRename : Boolean ) : Integer;
var
SHFileOpStruct : TSHFileOpStruct;
begin
with SHFileOpStruct do
begin
Wnd := Handle;
wFunc := FO_RENAME;
pFrom := PChar( Src );
pTo := PChar( New );
fFlags := 0;
if AutoRename then
fFlags := FOF_RENAMEONCOLLISION;
fAnyOperationsAborted := False;
hNameMappings := nil;
lpszProgressTitle := nil;
end;
Result := SHFileOperation( SHFileOpStruct );
end;
procedure TForm2.Create_(Sender: TObject);
begin
DBedit1.DataSource:= Form1.DataSource1;
dbedit1.Datafield:='Ganre';
DBedit2.DataSource:= Form1.DataSource1;
dbedit2.Datafield:='Img';
Dbmemo1.DataSource:= Form1.DataSource1;
dbmemo1.DataField:='Info';
DBGrid1.DataSource:= Form1.DataSource1;
DBGrid1.Columns.Add.FieldName:='Name';
DBNavigator1.DataSource:=Form1.DataSource1;
end;
procedure TForm2.SpeedButton1Click(Sender: TObject);
begin
if DBEdit2.Text='' then
Showmessage('Error#02 Введите новое имя файла')//Ошибка - не введено новое имя файла
else
begin
if OpenPictureDialog1.Execute then
begin
if CheckFile('.\base\img\'+OpenPictureDialog1.FileName)<>0 //проверка наличия файла
then
if not WindowsCopyFile(OpenPictureDialog1.FileName, ApplicationPath+'\base\img\') then //копирование файла
ShowMessage('Error#01 Copy Failed')
else
begin
RenameFiles(Handle,ApplicationPath+'\base\img\'+ //переименование файла с извлечением расширения
ExtractFileNameEx(OpenPictureDialog1.FileName,true),ApplicationPath+'\base\img\'+DBEdit2.Text+'.bmp',false);
end
else
Showmessage('Error#03 Copy Failed');
end;
end;
end;
end.
Unit3:
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TForm3 = class(TForm)
ComboBox1: TComboBox;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
uses Unit1;
{$R *.dfm}
procedure TForm3.SpeedButton1Click(Sender: TObject);
var i:integer;
begin
if Combobox1.Text<>'Выберите жанр:' then
begin
Form1.Table1.Filtered:=true;
for i:=0 to (Form1.progressbar1.max) do
begin
Form1.progressbar1.Position:=i;
Form1.Table1.Filter:='Ganre = ' + QuotedStr(ComboBox1.Text); //SQL запрос
end;
form1.progressbar1.Position:=0;
end;
close;
end;
procedure TForm3.SpeedButton2Click(Sender: TObject);
begin
Close;
end;
end.
Unit4:
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, jpeg, StdCtrls,unit1;
type
TForm5 = class(TForm)
Image1: TImage;
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form5: TForm5;
implementation
{$R *.dfm}
procedure TForm5.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled:=false;
end;
end.
Unit6:
unit Unit6;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, ExtCtrls, StdCtrls;
type
TForm6 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Memo1: TMemo;
Bevel1: TBevel;
SpeedButton1: TSpeedButton;
procedure SpeedButton1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form6: TForm6;
implementation
{$R *.dfm}
procedure TForm6.SpeedButton1Click(Sender: TObject);
begin
Close;
end;
end.
Модуль hkdunit1.pas:
unit HKDUnit1;
interface
Uses SysUtils,Messages,Windows,MMSystem,Classes,Variants,Dialogs,Graphics,Forms,
Controls,ShlOBJ,comctrls, WinInet, Masks, ExtCtrls, ShellAPI,StdCtrls, Menus,
aCTIVEx,RichEdit, inifiles, ImgList;
{--------------РАБОТА С ФАЙЛАМИ------------------------------------}
//Проверка файла: 1-нет файла;0-файл присутствует
function CheckFile(filename:string):integer;
{--------------ПРИЛОЖЕНИЕ----------------------------------}
//Возвращает путь запущенной программы
function ApplicationPath: string;
{-------------РАБОТА СО СТРОКАМИ----------------------------}
//Удаление из строки ненужных символов
function strtst(var Input: string; EArray: string; Action: integer): string;
//Процедура приведения строки к верхниму регистру
procedure strtoBig(s_1 : string; var s_2: string);
function ExtractFileNameEx(FileName: string; ShowExtension: Boolean): string;
{--------------------END---------------------------------------------------------}
implementation
{------------------------------------------------------------------------------}
function ExtractFileNameEx(FileName: string; ShowExtension: Boolean): string;
var
I: Integer;
S, S1: string;
begin
I := Length(FileName);
if I <> 0 then
begin
while (FileName[i] <> '\') and (i > 0) do
i := i - 1;
S := Copy(FileName, i + 1, Length(FileName) - i);
i := Length(S);
if i = 0 then
begin
Result := '';
Exit;
end;
while (S[i] <> '.') and (i > 0) do
i := i - 1;
S1 := Copy(S, 1, i - 1);
if s1 = '' then
s1 := s;
if ShowExtension = TRUE then
Result := s
else
Result := s1;
end
else
Result := '';
end;
procedure strtoBig(s_1 : string; var s_2: string);
var s__,S__2: string;
i_,j_ : integer;
begin
s__:='абвгдеёжзийклмнопрстуфхцчшщъыьэюяabcdefghijklmnopqrstuvwxyz';
s__2:='АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯABCDEFGHIJKLMNOPQRSTUVWXYZ';
s_2:=s_1;
for i_:=1 to Length(s_1) do
for j_:=1 to 59 do
begin
if s_1[i_]=s__[j_] then
s_2[i_]:=s__2[j_];
end;
end;
{------------------------------------------------------------------------------}
function strtst(var Input: string; EArray: string; Action: integer): string;
begin
case Action of
1:
begin
while length(Input) <> 0 do
begin
if pos(Input[1], EArray) = 0 then
delete(Input, 1, 1)
else
begin
result := result + Input[1];
delete(Input, 1, 1);
end;
end;
end;
2:
begin
while length(Input) <> 0 do
begin
if pos(Input[1], EArray) <> 0 then
delete(Input, 1, 1)
else
begin
result := result + Input[1];
delete(Input, 1, 1);
end;
end;
end;
else
messagebox(0, 'Не корректный вызов функции.', '', mb_ok);
end;
end;
function CheckFile(filename:string):integer;
var f : file;
begin
assignfile(f,filename);
{$I-}
reset(f);
closefile(f);
{$I+}
if Ioresult <>0 then
CheckFile:=1
else
CheckFile:=0
end;
{------------------------------------------------------------------------------}
function ApplicationPath: string;
begin
Result := ExtractFilePath(ParamStr(0));
end;
{------------------------------------------------------------------------------}
end.
Список используемой литературы
1. Delphi7 учебный курс. С.Бобровский. Питер, 2004г. 735л.
2. Архив статей DelphiWorld 6
Размещено на Allbest.ru
Подобные документы
Изучение функций автоматизированных банков данных. Общие принципы описания, хранения и манипулирования данными. Анализ требований к базам данных. Файл-серверная и клиент-серверная архитектура БД. Преимущества введения системы управления базами данных.
презентация [91,5 K], добавлен 13.08.2013Этапы проектирования базы данных. Определение цели создания. Присвоение ключевых полей. Добавление данных и создание других объектов. Инфологическая и даталогическая модель. База данных "Прокат видеодисков". Создание пользовательского интерфейса.
курсовая работа [2,3 M], добавлен 24.10.2014Разработка модели и создание структуры реляционной базы данных. Организация данных в таблицах для предоставления оперативного доступа к данным. Основные структурные единицы базы данных Access: таблицы, запросы, формы, отчеты, страницы, макросы и модули.
реферат [4,0 M], добавлен 03.02.2013Модели информационного процесса обработки данных. Классификация баз данных. Сеть архитектуры и технология клиент-сервер. Создание запросов к реляционным базам данных на SQL. Работа с электронными таблицами MS Excel: форматирование данных, вычисления.
контрольная работа [17,8 K], добавлен 17.01.2010Выбор состава технических и программных средств разработки системы. Описание входных и выходных данных. Выбор модели базы данных. Разработка подсистемы наполнения базы данных, формирования отчетов. Разработка интерфейса пользователя, тестирование системы.
курсовая работа [3,7 M], добавлен 04.12.2014Особенности проектирования программы на языке С++ для обработки данных из таблиц базы данных. Основные функции программы, создание концептуальной модели базы данных и диаграммы классов, разработка интерфейса пользователя и запросов к базе данных.
курсовая работа [2,1 M], добавлен 08.06.2012Представление данных в памяти компьютера. Обобщенные структуры и модели данных. Методы доступа к информации. Физическая организация системы управления базами данных, структура сервера. Архитектура "клиент-сервер". Создание базы данных с помощью "Денвер".
курсовая работа [770,3 K], добавлен 17.11.2014Создание программ, позволяющих создавать базы данных. Создание таблицы базы данных. Создание схемы данных. Создание форм, отчетов, запросов. Увеличение объема и структурной сложности хранимых данных. Характеристика системы управления базой данных Access.
курсовая работа [2,1 M], добавлен 17.06.2013Возможности извлечения информации из баз данных. Программы для создания и обработки базы данных и создания пользовательского интерфейса. Обоснование выбора программных средств для реализации. Создание базы данных, интерфейса и базы данных к интерфейсу.
курсовая работа [2,9 M], добавлен 24.03.2023Выбор программных и аппаратных средств для создания базы данных. Описание структуры программы. Описание разработки приложения. Подключение к базе данных, выполняемое с помощью компонента ADOConnectio. Создание средств защиты информации в программе.
курсовая работа [2,1 M], добавлен 16.02.2015