Базы данных на Delphi

Построение банков данных. Инструментальные средства баз данных Borland. Принцип работы и архитектура баз данных в Delphi. Навигационный способ доступа к базам данных: операции с таблицей, сортировка и перемещение по набору данных, фильтрация записей.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 06.02.2014
Размер файла 642,7 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Параметр Size определяет размер поля. Если для полей некоторых типов, например, поля даты (ftDate), размер не задается, то параметр Size принимает нулевое значение. Логический параметр Required определяет, должно ли поле содержать значение (True) или может быть пустым (False).

В таблице можно определить индексы, описание которых заносится в свойство IndexDefs типа TIndexDefs. После предварительной очистки значения этого свойства методом Clear данные об индексах заносятся методом Add. После создания таблицы для нее можно создать индекс или удалить его с помощью методов AddIndex и DeleteIndex.

Для удаления таблицы используется метод DeleteTable, в результате выполнения которого происходит физическое удаление всех файлов указанной таблицы БД. Путь и имя удаляемой таблицы определяют свойства DatabaseName и TableName набора данных. Перед удалением таблицы набор данных должен быть закрыт.

Для переименования таблиц dBase и Paradox можно использовать метод RenameTable (const NewTableName: String), при выполнении которого переименовываются все файлы, относящиеся к таблице. Параметр NewTableName задает новое название таблицы. Напомним, что имя таблицы совпадает с названиями файлов, за исключением расширения имени файла, которое отражает содержимое файла (например, файл содержит данные или индексы).

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

Метод LockTable (LockTepy: TLockТуре) устанавливает блокировку для таблицы, параметр LоскТуре задает тип блокировки:

· ltReadLock -- запрещены запись в таблицу и чтение ее; этот режим является своего рода режимом монопольного доступа

· ltWriteLock -- запрещена запись в таблицу; другие приложения не могут выполнять модификацию таблицы, но чтение данных разрешено

Метод UpLockTable (LockType: TLockТуре) снимает установленную ранее блокировку.

2.2 Сортировка набора данных

база данных delphi фильтрация

Порядок расположения записей в наборе данных может быть неопределенным. По умолчанию записи не отсортированы или сортируются, например, для таблиц Paradox по ключевым полям, а для таблиц dBase в порядке их поступления в файл таблицы.

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

Сортировка наборов данных Table и Query выполняется различными способами. Рассмотрим сортировку набора данных Table. Для компонента Query вопросы сортировки рассмотрены в пункте «Реляционный способ доступа к базе данных».

Сортировка наборов данных Table выполняется автоматически по текущему индексу. При смене индекса происходит автоматическое переупорядочение записей. Таким образом, сортировка возможна по полям, для которых создан индекс. Для сортировки по нескольким полям нужно создать индекс, включающий эти поля.

Направление сортировки определяет признак ixDescending текущего индекса. По умолчанию он выключен, поэтому упорядочение происходит в порядке возрастания значений. Если для индекса установлен признак ixDescending, то сортировка выполняется в порядке убывания значений.

Задать индекс, по которому будут сортироваться записи, можно с помощью установки значений свойств IndexName или IndexFieldNames. В качестве значения свойства IndexName указывается имя индекса, которое определяется при создании таблицы. При использовании свойства IndexFieldNames указывается имена полей, образующих соответствующий индекс.

2.3 Перемещение по набору данных

Перемещение по набору данных заключается в управлении указателем текущей записи (курсором). Этот указатель определяет запись, с которой будут выполняться такие операции, как редактирование или удаление.

Перемещение по записям. Перед перемещением указателя текущей записи набор данных автоматически переводится в режим просмотра. Если текущая запись находилась в режиме редактирования или вставки, то перед перемещением указателя сделанные в записи изменения вступают в силу. Для этого автоматически вызывается метод CheckBrowseMode набора данных.

Для перемещения указателя текущей записи в наборе данных используются:

· Процедура First -- первая запись

· Процедура Next -- следующая запись (при вызове метода Next для последней записи указатель не перемещается)

· Процедура Last -- последняя запись

· Процедура Prior -- предыдущая запись (при вызове метода Prior для первой записи указатель не перемещается)

· Функция MoveBy (Distance: Integer): Integer -- перемещает указатель на число записей, определяемое параметром Distance. Если его значение больше нуля, то происходит перемещение вперед, если меньше нуля -- назад. При нулевом значении параметра указатель не перемещается. В качестве результата возвращается число записей, на которое переместился указатель.

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

Значения указателя текущей записи изменяют также методы, связанные с поиском записей, например, метод FindFirst.

Для контроля за положением указателя текущей записи можно использовать свойство RecNo, которое содержит номер записи, начиная от начала набора данных (для локальных таблиц dBase и Paradox).

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

Для определения начала и конца набора данных при перемещении указателя текущей записи можно использовать свойства BOF и EOF типа Воо1eаn. Эти свойства доступны для чтения при выполнении приложения. Свойство BOF показывает, находится ли указатель на первой записи набора данных. Этому свойству устанавливается значение True при размещении указателя на первой записи, например, сразу после вызова метода First. Свойство EOF показывает, находится ли указатель на последней записи набора данных. Этому свойству устанавливается значение Ture, когда указатель находится на последней записи.

2.4 Фильтрация записей

Фильтрация -- это ввод ограничений для записей, которые должны войти в набор данных. Напомним, что набор данных представляет собой записи, выбранные из одной или нескольких таблиц. Состав записей в наборе данных в определенный момент времени зависит от устанавливаемых ограничений, в том числе с помощью фильтрации. Delphi предоставляет возможность выполнения двух следующих вариантов фильтрации записей набора данных:

· По выражению

· По диапазону

По умолчанию фильтрация записей не ведется и набор данных Table содержит все записи связанной с ним таблицы БД, а набор данных Query составляют все записи, удовлетворяющие SQL-запросу, содержащемуся в свойстве SQL.

Фильтрация похожа на SQL-запросы, однако не настолько мощное средство. По сравнению с SQL-запросами фильтрация менее эффективна, т.к. ограничивается количество записей, видимых в наборе.

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

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

Для определения выражения фильтра используется свойство Filter типа String. Выражение фильтра представляет собой конструкцию, в состав которой могут входить следующие элементы:

· Имена полей таблиц

· Литералы

· Операции сравнения

· Арифметические операции

· Логические операции

· Круглые и квадратные скобки

Если имя поля содержит пробелы, то его заключают в квадратные скобки, в противном случае квадратные скобки необязательны.

Литерал представляет собой значение, заданное явно ( например, число, строка или символ).

В качестве логических операций можно использовать and, or и not .

Для активизации и деактивизации фильтра используется свойство Filtered типа Воо1еап. По умолчанию это свойство имеет значение false, т.е. фильтрации не происходит.

Фильтрация по диапазону. При фильтрации по диапазону в набор данных будут включены те записи, значения полей которых соответствуют заданному диапазону. Таким образом, условием фильтрации является выражение вида значение > нижней границы AND значение < верхней границы, в котором вместо операций сравнения < и > могут указываться операции <= и >=. Такая фильтрация применяется к наборам данных Table.

Достоинством указанного способа фильтрации является скорость обработки записей. В отличие от способа фильтрации по выражению, когда последовательно просматриваются все записи таблицы, фильтрация происходит с использованием индексов индексно-последовательным методом. Однако этот способ фильтрации можно применять только для индексированных полей. Индекс поля, диапазон которого действует для отбора записей, должен быть установлен как текущий индекс с помощью свойства IndexName или IndexFieldNames. Если текущий индекс не установлен, то по умолчанию используется главный индекс.

Для включения и выключения фильтрации по диапазону применяются методы ApplyRange и CancelRange. Первый активизирует фильтр, а второй -деактивизирует. Предварительно для индексного поля (полей), по которому выполняется фильтрация, следует задать диапазон допустимых значении.

Методы SetRangeStart и SetRangeEnd устанавливают границы диапазона. Эти процедуры не имеют параметров, поэтому нужно использовать оператор присваивания.

Таким образом, методы SetRangeStart и SetRangeEnd переводят набор данных в режим dsSetKey, а с помощью оператора присваивания задается диапазон.

Для изменения границ диапазона предназначены методы EditRangeStart и EditRangeEnd, действие которых аналогично действию методов SetRangeStart и SetRangeEnd.

Совместно с этими методами используется свойство KeyExclusive типа Boolean, которое определяет, как учитывать заданное граничное значение при анализе записей. Если свойство KeyExclusive имеет значение False (по умолчанию), то записи c значением поля, по которому выполняется фильтрация, равным границе диапазона, включаются в состав набора данных. Если свойство имеет значение True, то записи с названным значением поля в набор данных не включаются.

Для отмены фильтрации, выполненной с помощью методов ApplyRange или SetRange, используется метод CancelRange. Другой вариант отмены предыдущей фильтрации -- задание новых границ диапазона, например, методами SetRangeStart и SetRangeEnd.

2.5 Поиск записей

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

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

Рассмотрим средства, с помощью которых выполняется поиск записей в наборах данных Table и Query. Отметим, что к средствам поиска можно отнести также методы FindFirst, FindLast, FindNext и FindPrior -- Переход на записи, удовлетворяющие условиям фильтра.

Поиск в наборах данных. Для поиска записей по полям в Delphi служат методы Locate и LookUp. Поля могут быть не индексированными.

Функция Locate (Const KeyFields: String; const KeyValues: Variant; Options: TLocateOption): Boolean ищет записи, содержащие заданные поля. Если записи, удовлетворяющие условиям поиска, существуют, то указатель текущей записи устанавливается на первую из них. Когда запись найдена, функция возвращает значение True, в противном случае -- значение False.

KeyFields - список полей, по которым ведется поиск.

KeyValues - указывает значения полей для поиска.

Options - позволяет задать значения, которые обычно используются при поиске строк.

Метод LookUp, работает так же, как метод Locate. Функция LookUp (Const KeyFields: String; const KeyValues: Variant; const ResultField: String): Variant осуществляет поиск записи, удовлетворяющей определенным условиям, но, в отличие от метода Locate, не перемещает указатель текущей записи на найденную запись, а считывает информацию из полей записи. Еще одно отличие между этими двумя методами заключается в том, что метод LookUp осуществляет поиск, причем значения в полях записей (с учетом регистра) должны точно соответствовать значениям, заданным для поиска.

Параметры KeyFields и KeyValues имеют такое же назначение, как и в методе Locate, и используются аналогичным образом при поиске по одному или нескольким полям.

Для параметра ResultField через точку с запятой перечисляются названия полей, значения которых будут получены в случае успешного поиска.

Поиск по индексным полям. Для набора данных Table существуют методы, позволяющие вести поиск записей только по индексным полям. Перед вызовом любого из этих методов следует установить в качестве текущего индекс, построенный по полям, используемым для поиска. Методы поиска можно разделить на две группы, в первую из которых входят методы FindKey, SetKey, EditKey и GotoKey, предназначенные для поиска на точное соответствие, а другую группу -- методы FindNearest, SetNearest, EditNearest И GotoNearest, допускающие частичное совпадение заданных для поиска значений и значений полей записей.

Метод FindKey (const KeyValues: array of const): Boolean выполняет поиск в наборе данных Table той записи, значения полей которой совпадают со значениями, указанными параметром KeyValues. Список полей для поиска не задается, а используются индексные поля в соответствии с текущим индексом. Если поиск завершился успешно, то найденная запись становится текущей, а метод возвращает значение True. При неудачном поиске указатель текущей записи не перемещается, а результатом метода будет значение False.

Если заданным условиям поиска соответствует несколько записей, то указатель текущей записи устанавливается на первую из них. Порядок сортировки и, соответственно, порядок расположения записей в наборе данных определяется текущим индексом, по которому и ведется поиск.

Вместо метода FindKey можно использовать методы SetKey, EditKey и GotoKey, которые применяются совместно. Их использование похоже на использование уже рассмотренных методов SetRangeStart, EditRangeStart и ApplyRange для фильтрации набора данных по диапазону значений.

Метод SetKey переводит набор данных в режим dsSetKey поиска записи. Этот метод вызывается один раз для текущего индекса. Впоследствии для перехода в режим поиска можно вызывать метод EditKey. Если набор данных находится в режиме поиска, значения полей устанавливаются с помощью операторов присваивания. Метод GotoKey: Boolean выполняет собственно поиск записи, удовлетворяющей заданному условию.

Метод FindNearest, в отличие от метода FindKey, производит поиск значений полей записей набора данных Table, которые частично совпадают со значениями, заданными для поиска. Частичное совпадение допускается для начала значения поля записи. Такой поиск можно применять к строкам и к данным другого типа, например, целочисленного. Поиск с помощью процедуры FindNearest (const KeyValues: array of const) Всегда является успешным и перемешает указатель текущей записи на запись, в наибольшей степени отвечающую условиям поиска.

Вместо метода FindNearest можно использовать комбинацию методов SetNearest, EditNearest И GotoNearest, работа с которыми аналогична работе с соответствующими методами поиска, требующими точного соответствия значений полей и значений, заданных для поиска.

2.6 Модификация набора данных

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

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

Управлять изменением набора данных Table можно с помощью свойства ReadOnly типа Boolean, при установке которому значения True изменения записей запрещены. По умолчанию свойство ReadOnly имеет значение False, т. е. набор данных можно модифицировать.

Значение свойства ReadOnly можно изменять только для закрытого набора данных. В отличие от многих управляющих элементов, например, редакторов Edit и Memo, запрет редактирования относится к визуальному (пользователем) и программному изменению записей набора данных.

Возможность модификации набора данных Query определяет свойство RequestLive типа Boolean. По умолчанию это свойство имеет значение False, т. е. набор данных Query доступен только для чтения. Для получения возможности редактирования записей свойству RequestLive нужно установить значение True. Кроме этого свойства, возможность изменения набора данных Query зависит также от содержания SQL-запроса. Например, если в результате запроса отбираются записи из нескольких таблиц, то набор данных нельзя модифицировать, и значение True свойства RequestLive не учитывается.

Для проверки возможности изменения набора данных предназначено свойство CanModify типа Boolean, действующее при выполнении приложения и доступное только для чтения. Если свойство CanModify имеет значениеTrue, то набор данных можно изменять, редактируя, вставляя записи, а также удаляя их. Если свойство CanModify имеет значение False, то набор данных изменять нельзя и попытка сделать это визуально или программно вызывает исключительную ситуацию.

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

· Перевести набор данных в режим редактирования

· Изменить значения полей записи

· Подтвердить сделанные изменения или отказаться от них, в результате чего набор данных снова переходит в режим просмотра

Если набор данных является модифицируемым, и исключительная ситуация не возбуждается.

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

Для проверки, вносились ли изменения в запись, можно проанализировать свойство Modifid типа Boolean. Если свойство имеет значение True, то было изменено значение, как минимум, одного поля текущей записи.

После ввода информации сделанные изменения должны быть или подтверждены, или отменены.

Метод Post записывает модифицированную запись в таблицу БД, снимает блокировку записи и переводит набор данных в режим просмотра. Если набор данных не находился в режиме редактирования, то вызов метода Post приведет к генерации исключительной ситуации.

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

Для добавления записи нужно выполнить следующие действия:

· Перевод набора данных в режим вставки

· Задание значений полей новой записи

· Подтверждение сделанных изменений или отказ от них, в результате на бор данных переходит в режим просмотра

Для добавления записей используются методы Insert, InsertRecord, Append и AppendRecord.

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

Метод InsertRecord выполняет те же действия, что и методы Insert и SetFields. Процедура InsertRecord (const Values: array of const) вставляет в позицию указателя текущей записи новую запись, задавая значения всех или некоторых ее полей.

Методы Append и AppendRecord отличаются от методов Insert и InsertRecord тем, что вставляют запись в конец набора данных, а не в текущую позицию указателя.

Удаление записей. Удаление текущей записи выполняет метод Delete, который работает только с модифицируемым набором данных. В случае успешного удаления, текущей становится следующая запись, если же удалялась последняя запись, то курсор перемещается на предыдущую запись, которая после удаления становится последней. В отличие от некоторых СУБД, в Delphi удаляемая запись действительно удаляется из набора данных.

Обычно метод Delete вызывается для удаления просматриваемой записи, однако он удаляет и редактируемую запись. Таким образом, метод Delete удаляет текущую запись набора данных, который находится в режимах просмотра или редактирования. Если набор данных находится в режиме вставки или поиска, то вызов метода Delete аналогичен вызову метода Cancel, отменяя вставку или поиск записи.

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

3. ОПИСАНИЕ ПРИЛОЖЕНИЯ

В данном разделе будет приведено описание форм и модулей приложения.

3.1 Файл проекта

При входе в программу первым запускается файл проекта, который был изменен для добавления дополнительных функций. Пароль для входа - " zybr".

В данный файл сначала подключены дополнительные модули dialogs, controls, sysUtils для работы с типизированными файлами, диалогами… До создания какой либо формы проверяется пароль методом функции inputQuery (рис. 3.1.), которая присваивает параметру Pas значение введённое в окне диалога.

Рис. 3.1. Диалог inputQuery

Если пароль подтвердился, то дальше создаются формы. В противном случае приложение закрывается. Первой создается форма fZastavka (Рис. 3.2) которая тут же выводится на экран и обновляется. После чего таймеру присваивается значение FALSE и форма уничтожается.

3.2 Форма заставки

На форму помещен элемент Timer1 с установленным значением Interval = 1000 (1 сек). После срабатывания таймера его свойству ENABLED:=False, что и приводит к закрытию формы и после удалению.

Рис. 3.2. Форма заставки

3.3 Основная форма

Данная форма является главной в программе, т.к. программа предназначена для сортировки, просмотра и создания базы данных абсолютно любых файлов компьютера.

Для просмотра (открытия) какого-нибудь файла необходимо указать путь и щелкнуть дважды по его имени в окне проводника.

Для копирования (перемещения) файла необходима указать папку куда будет скопирован (перемещен) данный файл и зажав кнопку мыши перетащить в соседнее окно (так же можно воспользоваться кнопками на форме). Предварительно указав действие (Копировать или перемещать), нажав кнопку в панели управления соответствующие команде.

Рис. 3.3. Основная форма программы

Также можно форме установить свойство «Всегда наверху», установив галочку на панели инструментов.

В пункте «ФАЙЛ» можно выбрать пункт открыть базу, что приведёт к открытию формы базы (Более детально она будет рассмотрена ниже).

Кнопка «Удалить»- удаляет файл с компьютера.

Также в системном меню есть пункт, не имеющий названия, в нем расположены подпункты выключения, перезагрузки компьютера и смены пользователя.

При выборе файла и нажатии кнопки «Добавить файл» будет открыта форма добавления записи в базу данных (Будет рассмотрена ниже).

Также на форме предусмотрено отображение подсказок в панели состояния и там же отображается некоторая системная информация.

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

3.4 Форма вставки новых записей

Данная форма (Рис. 3.5) предназначена для добавления выдранного файла, с указанием необходимой информации, в базу данных. Возможно так же редактирование дополнительной базы «Раздел», хранящую информацию о типе файла (пр. Матан, художественная…). Для добавления книги необходимо ввести обязательную информацию, иначе будет показано предупреждение(рис. 3.4). Поле «Адрес», о выбранном файле, заполняется автоматически. После добавления форма закрывается.

Рис. 3.4. Предупреждение

Рис. 3.5. Форма вставки записи

3.5 Форма добавления разделов

Данная форма предназначена для редактирования разделов, т.е. дополнительной информации о книге. Информация о разделах сохраняется в отдельной базе - Raz.DB, Находящейся в папке с программой.

Рис. 3.6. Форма редактирования разделов

3.6 Форма просмотра базы данных

Форма предназначена для просмотра и редактирования базы данных (Рис. 3.8). На форме также использована система отображения подсказок и функция отображения Фомы «поверх всех окон», возможна сортировка информации и последовательный поиск записи. Также возможен запуск файла при двойном клике по записи файла или нажатии соответствующей кнопки. Для удобства в использовании максимальная высота и минимальная ширина формы ограничены (Рис. 3.7).

Рис. 3.7. Форма с измененными размерами

Рис. 3.8. Фома просмотра базы

3.7 Дополнительный модуль

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

ЗАКЛЮЧЕНИЕ

В ходе данной работы были изучены основные цели и требования, предъявляемые к разработчикам баз данных:

1. Возможности поиска. Пользователь базы данных может обращаться к ней с различными вопросами по поводу хранимых данных. Возросшие требования к системам заключаются в обеспечении обработки таких запросов или формирования таких ответов, которые заранее не запланированы.

2.Безопасность и секретность. Изучены некоторые методы ограничения доступа к базам данных.

3.Простота использования. Интерфейс программного обеспечения максимально ориентирован на конечного пользователя и учитывает возможность того, что пользователь не имеет необходимой базы знаний.

Были проведены соответствующие исследования в интерфейсах других приложений для организации наиболее эргономичного управления программой.

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

Особую роль для хранения информации на компьютере играет объектно-ориентированное программирование. Общую ее цель можно сформулировать так: доступ и обработка информации осуществляется без определенных знаний и опыта работы с компьютером.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1 Тейксейра. Delphi 5. Руководство разработчика, том 1. Основные методы и техники программирования / Тейксейра, Стив, Пачеко, Ксавье - Издательский дом «Вильямс», 2001.- 780с.

2 Тейксейра. Delphi 5. Руководство разработчика, том 2. Разработка компонентов и программирование баз данных / Тейксейра, Стив, Пачеко, Ксавье - Издательский дом «Вильямс», 2001.- 821с.

3 Гофман, В.Э. Delphi / В.Э. Гофман.- СПб.: БХВ - Петербург, 2001.-800с.

4 Фаронов, В. Delphi 6: учебный курс / В. Фаронов - СПб.: Питер, 2002.-512с.

ПРИЛОЖЕНИЯ

ПРОГРАММА ДЛЯ СОРТИРОВКИ ЭЛЕКТРОННЫХ ФАЙЛОВ

//Текст файла проекта

program Project1;

uses

Forms,

dialogs,

controls,

sysUtils,

Unit1 in 'Unit1.pas' {Form1},

Modulepas in 'Modulepas.pas',

InsRec in 'InsRec.pas' {InsertRec},

UZastavka in 'UZastavka.pas' {FZastavka},

URazdel in 'URazdel.pas' {Razdel},

UBase in 'UBase.pas' {FBase};

{$R *.RES}

var

pas:string;

listBase:TextFile;

begin

if inputQuery('Вход','Введите пароль',pas) then

if pas='zybr' then begin

Application.Initialize;

Application.CreateForm(TFZastavka, FZastavka);

fZastavka.Show;

fzastavka.Update;

while fzastavka.Timer1.enabled do

application.processMessages;

Fzastavka.free;

Application.CreateForm(TForm1, Form1);

Application.CreateForm(TInsertRec, InsertRec);

Application.CreateForm(TRazdel, Razdel);

Application.CreateForm(TFBase, FBase);

if not FileExists(extractFilePath(application.exeName)+'Base\ListBase.txt') then begin

assignFile(ListBase, extractFilePath(application.exeName)+'Base\ListBase.txt');

rewrite(ListBase);

end;

end else MessageDlg('Не тот пароль !'+#13+'Проверь пароль!!', mtError,[mbOk],0);

Application.Run;

end.

//Текст файла заставки

unit UZastavka;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

ExtCtrls;

type

TFZastavka = class(TForm)

Timer1: TTimer;

Image1: TImage;

procedure Timer1Timer(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

FZastavka: TFZastavka;

implementation

{$R *.DFM}

procedure TFZastavka.Timer1Timer(Sender: TObject);

begin

timer1.Enabled:=false;

end;

end.

//Текст файла основной формы

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

Buttons, StdCtrls, Menus, FileCtrl, ComCtrls, ToolWin, AppEvnts, Grids,

Outline, DirOutln, shellApi, ExtCtrls, jpeg, ImgList;

type

TForm1 = class(TForm)

StatusBar1: TStatusBar;

ToolBar1: TToolBar;

ScrollBox1: TScrollBox;

TBSBCopy: TSpeedButton;

TBSBMove: TSpeedButton;

SpeedButton3: TSpeedButton;

DriveComboBox1: TDriveComboBox;

DirectoryListBox1: TDirectoryListBox;

Dir1: TFileListBox;

FilterComboBox1: TFilterComboBox;

SBDir12: TSpeedButton;

SBDir21: TSpeedButton;

SBDir13: TSpeedButton;

SBDir31: TSpeedButton;

Dir2: TFileListBox;

Dir3: TFileListBox;

LabDir2: TLabel;

LabDir3: TLabel;

ApplicationEvents1: TApplicationEvents;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

PopupMenu1: TPopupMenu;

MnCopy: TMenuItem;

MNMove: TMenuItem;

N5: TMenuItem;

PmRef: TMenuItem;

ToolButton5: TToolButton;

TBSBDelete: TSpeedButton;

MnOpenBase: TMenuItem;

MnExit: TMenuItem;

HeaderControl1: THeaderControl;

BbIns2: TBitBtn;

BbIns3: TBitBtn;

N3: TMenuItem;

BbDir2: TBitBtn;

BitBtn1: TBitBtn;

MnShutDown: TMenuItem;

MnReBoot: TMenuItem;

N8: TMenuItem;

Label1: TLabel;

CBOnTop: TCheckBox;

ToolButton1: TToolButton;

procedure PmRefClick(Sender: TObject);

procedure ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);

procedure FormCreate(Sender: TObject);

procedure ButDir2Click(Sender: TObject);

procedure ButDir3Click(Sender: TObject);

procedure Dir3Change(Sender: TObject);

procedure AllDirDbl(Sender: TObject);

procedure MnCopyClick(Sender: TObject);

procedure MNMoveClick(Sender: TObject);

procedure ConfChange(const ACaption, FromFile, ToFile: string);

procedure SBDir12Click(Sender: TObject);

procedure SBDir21Click(Sender: TObject);

procedure SBDir13Click(Sender: TObject);

procedure SBDir31Click(Sender: TObject);

procedure Dir1DragOver(Sender, Source: TObject; X, Y: Integer;

State: TDragState; var Accept: Boolean);

procedure Dir2DragOver(Sender, Source: TObject; X, Y: Integer;

State: TDragState; var Accept: Boolean);

procedure Dir3DragOver(Sender, Source: TObject; X, Y: Integer;

State: TDragState; var Accept: Boolean);

procedure Dir2DragDrop(Sender, Source: TObject; X, Y: Integer);

procedure Dir3DragDrop(Sender, Source: TObject; X, Y: Integer);

procedure Dir1DragDrop(Sender, Source: TObject; X, Y: Integer);

procedure TBSBDeleteClick(Sender: TObject);

procedure MnExitClick(Sender: TObject);

procedure MnOpenBaseClick(Sender: TObject);

procedure BbIns2Click(Sender: TObject);

procedure BbIns3Click(Sender: TObject);

procedure BbDir2Click(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure Dir2Change(Sender: TObject);

procedure MnShutDownClick(Sender: TObject);

procedure MnReBootClick(Sender: TObject);

procedure N8Click(Sender: TObject);

procedure FormKeyPress(Sender: TObject; var Key: Char);

procedure Dir1Enter(Sender: TObject);

procedure Dir2Enter(Sender: TObject);

procedure CBOnTopClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

aders:string;

implementation

uses modulepas, Insrec, UBase, URazdel;

{$R *.DFM}

procedure TForm1.PmRefClick(Sender: TObject);

begin

statusbar1.Panels[2].Text:=IntToStr(diskSize(3) div 1024000)+' Mb';

statusbar1.Panels[4].Text:=IntToStr(diskSize(4) div 1024000)+' Mb';

dir1.Update;

dir2.Update;

dir3.Update;

end;

procedure TForm1.ApplicationEvents1Idle(Sender: TObject;

var Done: Boolean);

begin

form1.Caption:=TimeTostr(time);

application.Title:=TimeToStr(Time);

statusBar1.Panels[5].Text:=application.Hint;

fbase.statusBar1.Panels[0].Text:=statusBar1.Panels[5].Text;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

statusbar1.Panels[2].Text:=IntToStr(diskSize(3) div 1024000)+' Mb';

statusbar1.Panels[4].Text:=IntToStr(diskSize(4) div 1024000)+' Mb';

MnCopy.Checked:=true;

TBsbCopy.Down:=true;

Form1.KeyPreview := True;

end;

procedure TForm1.Dir3Change(Sender: TObject);

begin

LabDir3.Caption:=dir3.Directory;

end;

procedure TForm1.Dir2Change(Sender: TObject);

begin

LabDir2.Caption:=dir2.Directory;

end;

procedure TForm1.AllDirDbl(Sender: TObject);

begin

ShellExecute(form1.Handle, nil, PChar((sender as tFileListBox).FileName), nil, nil, sw_ShowNormal);

end;

{////////////////////////////////////////////////////////////////////////////////////////}

procedure TForm1.MnCopyClick(Sender: TObject);

begin

if MnCopy.Checked then begin

MnCopy.Checked:=false;

TBSBCopy.Down:=false;

MnMove.Checked:=True;

TBsbMove.Down:=True;

end else begin

MnCopy.Checked:=true;

TBSBCopy.Down:=true;

MnMove.Checked:=False;

TBsbMove.Down:=False;

end;

end;

procedure TForm1.MNMoveClick(Sender: TObject);

begin

if MnMove.Checked then begin

MnMove.Checked:=false;

TBsbMove.Down:=false;

MnCopy.Checked:=True;

TBsbCopy.Down:=True;

end else begin

MnMove.Checked:=true;

TBsbMove.Down:=True;

MnCopy.Checked:=False;

TBsbCopy.Down:=false;

end;

end;

{////////////////////////////////////////////////////////////////////////////////////////}

procedure TForm1.ConfChange(const ACaption, FromFile, ToFile: string);

begin

if MessageDlg(Format('%s %s '+#13+'В %s?', ['Копировать', FromFile,ToFile]),

mtConfirmation,[mbYes, mbNo],0) = mrYes then begin

if ACaption = 'Copy' then CopyFile(FromFile, ToFile) else

if ACaption = 'Move' then MoveFile(FromFile, ToFile);

Dir1.Update;

Dir2.Update;

Dir3.Update;

end;

end;

{//////////////////////////////////////////////////////}

procedure TForm1.SBDir12Click(Sender: TObject);

var

CurrentDir,FromFileName,ToFileName,s:string;

begin

if TBsbCopy.Down then s:='Copy' else

if TBsbMove.Down then s:='Move' else Exit;

FromFileName:=dir1.FileName;

ToFileName:=dir2.Directory;

ConfChange(s, FromFileName, ToFileName);

end;

procedure TForm1.SBDir21Click(Sender: TObject);

var

CurrentDir,FromFileName,ToFileName,s:string;

begin

if TBsbCopy.Down then s:='Copy' else

if TBsbMove.Down then s:='Move' else Exit;

FromFileName:=dir2.FileName;

ToFileName:=Dir1.Directory;

ConfChange(s, FromFileName, ToFileName);

end;

{///////////////////////////////////////////////////}

procedure TForm1.SBDir13Click(Sender: TObject);

var

CurrentDir,FromFileName,ToFileName,s:string;

begin

if TBsbCopy.Down then s:='Copy' else

if TBsbMove.Down then s:='Move' else Exit;

FromFileName:=dir1.FileName;

ToFileName:=dir3.Directory;

ConfChange(s, FromFileName, ToFileName);

end;

procedure TForm1.SBDir31Click(Sender: TObject);

var

CurrentDir,FromFileName,ToFileName,s:string;

begin

if TBsbCopy.Down then s:='Copy' else

if TBsbMove.Down then s:='Move' else Exit;

FromFileName:=dir3.FileName;

ToFileName:=Dir1.Directory;

ConfChange(s, FromFileName, ToFileName);

end;

{////////////////////////////////////////////////////}

procedure TForm1.Dir1DragOver(Sender, Source: TObject; X, Y: Integer;

State: TDragState; var Accept: Boolean);

begin

if (source=Dir2) or(source=dir3) then accept:=true else accept:=false;

end;

procedure TForm1.Dir2DragOver(Sender, Source: TObject; X, Y: Integer;

State: TDragState; var Accept: Boolean);

begin

if source=Dir1 then accept:=true else accept:=false;

end;

procedure TForm1.Dir3DragOver(Sender, Source: TObject; X, Y: Integer;

State: TDragState; var Accept: Boolean);

begin

if source=Dir1 then accept:=true else accept:=false;

end;

procedure TForm1.Dir2DragDrop(Sender, Source: TObject; X, Y: Integer);

begin

SBDir12.Click;

end;

procedure TForm1.Dir3DragDrop(Sender, Source: TObject; X, Y: Integer);

begin

SBDir13.Click;

end;

procedure TForm1.Dir1DragDrop(Sender, Source: TObject; X, Y: Integer);

begin

if source=dir2 then SBDir21.Click else SBDir31.Click;

end;

{////////////////////////////////////////////////////////////////////////////////////////}

procedure TForm1.TBSBDeleteClick(Sender: TObject);

begin

if dir1.Focused then

with dir1 do

if MessageDlg('Delete ' + FileName + '?', mtConfirmation,

[mbYes, mbNo], 0) = mrYes then

if DeleteFile(FileName) then begin

Update;

dir2.Update;

dir3.Update;

end;

if dir2.Focused then

with dir2 do

if MessageDlg('Delete ' + FileName + '?', mtConfirmation,

[mbYes, mbNo], 0) = mrYes then

if DeleteFile(FileName) then begin

Update;

dir1.Update;

dir3.Update;

end;

if dir3.Focused then

with dir3 do

if MessageDlg('Delete ' + FileName + '?', mtConfirmation,

[mbYes, mbNo], 0) = mrYes then

if DeleteFile(FileName) then begin

update;

dir1.Update;

dir2.Update;

end;

end;

procedure TForm1.MnExitClick(Sender: TObject);

begin

Close;

end;

procedure TForm1.MnOpenBaseClick(Sender: TObject);

begin

FBase.showmodal;

end;

procedure TForm1.BbIns2Click(Sender: TObject);

begin

insertRec.Table1.Active:=true;

insertRec.Table2.Active:=true;

if insertrec.Table1.RecordCount<>0 then insertrec.table1.Last

else insertrec.Table1.First;

insertrec.Table1.Insert;

insertRec.Table1.FieldByName('Адрес').asString:=Dir2.FileName;

try

insertRec.ShowModal;

except

messagebeep(0);

showmessage('Обязательный ввод "Название" и "Раздел"');

end;

end;

procedure TForm1.BbIns3Click(Sender: TObject);

begin

insertRec.Table1.Active:=true;

insertRec.Table2.Active:=true;

if insertrec.Table1.RecordCount<>0 then insertrec.table1.Last

else insertrec.Table1.First;

insertrec.Table1.Insert;

insertRec.Table1.FieldByName('Адрес').asString:=Dir3.FileName;

insertRec.ShowModal;

end;

procedure TForm1.BbDir2Click(Sender: TObject);

var dir:string;

begin

if selectDirectory(dir,[sdAllowCreate, sdPerformCreate,sdPrompt],0) then Dir2.directory:=dir;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

var dir:string;

begin

If selectDirectory(dir,[sdAllowCreate, sdPerformCreate,sdPrompt],0) then Dir3.directory:=dir;

end;

procedure TForm1.MnShutDownClick(Sender: TObject);

begin

win32Check(exitWindowsEx(ewx_ShutDown,0));

end;

procedure TForm1.MnReBootClick(Sender: TObject);

begin

win32Check(exitWindowsEx(ewx_ReBoot,0));

end;

procedure TForm1.N8Click(Sender: TObject);

begin

win32Check(exitWindows(0,0));

end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);

begin

if key = #27 then Close;

end;

procedure TForm1.Dir1Enter(Sender: TObject);

begin

{if (dir2.ItemIndex<>-1) then begin

dir2.Selected[dir2.ItemIndex]:=false;

dir1.Selected[dir1.ItemIndex]:=True;

end;}

end;

procedure TForm1.Dir2Enter(Sender: TObject);

begin

{if dir1.ItemIndex<>-1 then begin

dir1.Selected[dir1.ItemIndex]:=false;

dir2.Selected[dir2.ItemIndex]:=True;

end;}

end;

procedure TForm1.CBOnTopClick(Sender: TObject);

begin

if CBOnTop.Checked then form1.FormStyle:=fsStayOnTop

else form1.FormStyle:=fsNormal;

end;

end.

//Текст файла вставки записей

unit InsRec;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Db, DBTables, Mask, DBCtrls;

type

TInsertRec = class(TForm)

GroupBox1: TGroupBox;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Label6: TLabel;

DataSource1: TDataSource;

Table1: TTable;

DBEdit1: TDBEdit;

DBEdit2: TDBEdit;

DBEdit3: TDBEdit;

DBMemo1: TDBMemo;

DataSource2: TDataSource;

Table2: TTable;

DBLookupComboBox1: TDBLookupComboBox;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

InsertRec: TInsertRec;

implementation

uses Unit1,URazdel;

{$R *.DFM}

procedure TInsertRec.Button1Click(Sender: TObject);

Var Adres:String;

begin

if ((DBEdit1.Text<>'')and(DBLookupComboBox1.Text<>'')) then begin

try

table1.Active:=true;

table2.Active:=true;

table1.FieldByName('Название').asString:=DBedit1.Text;

table1.FieldByName('Автор').asString:=DBedit2.Text;

table1.FieldByName('Раздел').asString:=DBLookupComboBox1.Text;

table1.FieldByName('Описание').asString:=DBMemo1.Text;

table1.Post;

table1.Active:=false;

table2.Active:=false;

close;

except

beep;

ShowMessage('Возмлжно уже существует запись с такими полями.');

DBEdit1.Text:='';

DBEdit2.Text:='';

DBMemo1.Text:='';

end; end else begin

showmessage('Обязательный ввод "Название" и "Раздел"');

table1.cancel;

end;

end;

procedure TInsertRec.Button2Click(Sender: TObject);

begin

table1.cancel;

close;

end;

procedure TInsertRec.Button3Click(Sender: TObject);

begin

razdel.ShowModal;

end;

procedure TInsertRec.FormCreate(Sender: TObject);

begin

InsertRec.table1.dataBaseName:=extractFilePath(application.exeName)+'Base';

InsertRec.table2.dataBaseName:=extractFilePath(application.exeName)+'Base';

end;

end.

//Текст файла редактирования разделов

unit URazdel;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

Grids, DBGrids, StdCtrls, Mask, DBCtrls, Db, DBTables;

type

TRazdel = class(TForm)

Table1: TTable;

DataSource1: TDataSource;

Button1: TButton;

Button2: TButton;

DBGrid1: TDBGrid;

Button3: TButton;

Edit1: TEdit;

procedure Button3Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure FormActivate(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Razdel: TRazdel;

implementation

{$R *.DFM}

procedure TRazdel.Button3Click(Sender: TObject);

begin

Close;

end;

procedure TRazdel.Button1Click(Sender: TObject);

begin

Razdel.table1.Active:=true;

Razdel.table1.Append;

Razdel.table1.FieldByName('Раздел').asString:=edit1.Text;

Razdel.table1.Refresh;

end;

procedure TRazdel.Button2Click(Sender: TObject);

begin

Razdel.table1.Delete;

end;

procedure TRazdel.FormActivate(Sender: TObject);

begin

if edit1.CanFocus then edit1.SetFocus;

end;

procedure TRazdel.FormCreate(Sender: TObject);

begin

Razdel.table1.dataBaseName:=extractFilePath(application.exeName)+'Base';

end;

end.

//Текст файла просмотра базы данных

unit UBase;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

Menus, StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids, ComCtrls, Db,

DBTables, Buttons, shellApi, AppEvnts;

type

TFBase = class(TForm)

ScrollBox1: TScrollBox;

MainMenu1: TMainMenu;

MnFBTop: TMenuItem;

DBGrid1: TDBGrid;

DataSource1: TDataSource;

Table1: TTable;

DBMemo1: TDBMemo;

StatusBar1: TStatusBar;

ApplicationEvents1: TApplicationEvents;

ScrollBox2: TScrollBox;

RadioGroup1: TRadioGroup;

RadioGroup2: TRadioGroup;

GroupBox2: TGroupBox;

CheckBox1: TCheckBox;

Edit1: TEdit;

RadioGroup3: TRadioGroup;

DBNavigator5: TDBNavigator;

DBNavigator6: TDBNavigator;

BitBtn2: TBitBtn;

DBNavigator7: TDBNavigator;

DBNavigator8: TDBNavigator;

Label7: TLabel;

Label8: TLabel;

Label9: TLabel;

Label10: TLabel;

Label11: TLabel;

OnTop1: TMenuItem;

procedure FormActivate(Sender: TObject);

procedure RadioGroup2Click(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure Edit1Change(Sender: TObject);

procedure CheckBox1Click(Sender: TObject);

procedure RadioGroup3Click(Sender: TObject);

procedure RadioGroup1Click(Sender: TObject);

procedure ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);

procedure FormCreate(Sender: TObject);

procedure FormKeyPress(Sender: TObject; var Key: Char);

procedure MnFBTopClick(Sender: TObject);

procedure OnTop1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

FBase: TFBase;

implementation

{$R *.DFM}

procedure TFBase.FormActivate(Sender: TObject);

begin

table1.Active:=true;

table1.Refresh;

DBGrid1.Columns[4].Visible:=false;

RadioGroup3.ItemIndex:=0;

end;

procedure TFBase.RadioGroup2Click(Sender: TObject);

begin

case radioGroup2.ItemIndex of

0: Table1.IndexDefs[table1.IndexDefs.IndexOf(table1.indexName)].Options:=

Table1.IndexDefs[table1.IndexDefs.IndexOf(table1.indexName)].Options+[ixDescending];

1: Table1.IndexDefs[table1.IndexDefs.IndexOf(table1.indexName)].Options:=

Table1.IndexDefs[table1.IndexDefs.IndexOf(table1.indexName)].Options-[ixDescending];

end;

end;

procedure TFBase.BitBtn1Click(Sender: TObject);

begin

ShellExecute(fBase.Handle, nil, PChar(table1.fieldbyname('Адрес').asString), nil, nil, sw_ShowNormal);

end;

procedure TFBase.Edit1Change(Sender: TObject);

var strField:string;

begin

if not checkbox1.Checked then exit;

case radiogroup3.ItemIndex of

0: strField:='Название';

1: strField:='Раздел';

2: strField:='Автор';

end;

table1.Locate(strField, edit1.text, [loCaseInsensitive, loPartialKey]);

end;

procedure TFBase.CheckBox1Click(Sender: TObject);

begin

Edit1Change(sender);

end;

procedure TFBase.RadioGroup3Click(Sender: TObject);

begin

Edit1Change(sender);

end;

procedure TFBase.RadioGroup1Click(Sender: TObject);

begin

case radioGroup1.ItemIndex of

0: table1.IndexName:='indNazv';

1: table1.IndexName:='indRaz';

else table1.IndexName:='';

end;

radiogroup2.OnClick(sender);

end;

procedure TFBase.ApplicationEvents1Idle(Sender: TObject;

var Done: Boolean);

begin

if radioGroup1.ItemIndex=-1 then radioGroup2.Enabled:=false else radioGroup2.Enabled:=True;

end;

procedure TFBase.FormCreate(Sender: TObject);

begin

FBase.KeyPreview := True;

Fbase.table1.dataBaseName:=extractFilePath(application.exeName)+'Base';

end;

procedure TFBase.FormKeyPress(Sender: TObject; var Key: Char);

begin

if key = #27 then Close;

end;

procedure TFBase.MnFBTopClick(Sender: TObject);

begin

MnFBTop.Checked:= not MnFBTop.Checked;

if MnFBTop.Checked then begin

fBase.FormStyle:=fsStayOnTop;

fBase.Caption:='Всегда наверху'end

else begin

fBase.FormStyle:=fsnormal;

fBase.Caption:='Base';

end;

end;

procedure TFBase.OnTop1Click(Sender: TObject);

begin

close;

end;

end.

//Текст файла дополнительного модуля

unit Modulepas;

interface

uses SysUtils, Windows, Classes, Consts;

type

EInvalidDest = class(EStreamError);

EFCantMove = class(EStreamError);

procedure CopyFile(const FileName, DestName: string);

procedure MoveFile(const FileName, DestName: string);

function GetFileSize(const FileName: string): LongInt;

function FileDateTime(const FileName: string): TDateTime;

function HasAttr(const FileName: string; Attr: Word): Boolean;

function ExecuteFile(const FileName, Params, DefaultDir: string;

ShowCmd: Integer): THandle;

implementation

uses Forms, ShellAPI;

const

SInvalidDest = 'Destination %s does not exist';

SFCantMove = 'Cannot move file %s';

procedure CopyFile(const FileName, DestName: string);

var

CopyBuffer: Pointer; { buffer for copying }

BytesCopied: Longint;

Source, Dest: Integer; { handles }

Len: Integer;

Destination: TFileName; { holder for expanded destination name }

const

ChunkSize: Longint = 8192; { copy in 8K chunks }

begin

Destination := ExpandFileName(DestName); { expand the destination path }

if HasAttr(Destination, faDirectory) then { if destination is a directory... }

begin

Len := Length(Destination);

if Destination[Len] = '\' then

Destination := Destination + ExtractFileName(FileName) { ...clone file name }

else

Destination := Destination + '\' + ExtractFileName(FileName); { ...clone file name }

end;

GetMem(CopyBuffer, ChunkSize); { allocate the buffer }

try

Source := FileOpen(FileName, fmShareDenyWrite); { open source file }

if Source < 0 then raise EFOpenError.CreateFmt(SFOpenError, [FileName]);

try

Dest := FileCreate(Destination); { create output file; overwrite existing }

if Dest < 0 then raise EFCreateError.CreateFmt(SFCreateError, [Destination]);

try

repeat

BytesCopied := FileRead(Source, CopyBuffer^, ChunkSize); { read chunk }

if BytesCopied > 0 then { if we read anything... }

FileWrite(Dest, CopyBuffer^, BytesCopied); { ...write chunk }

until BytesCopied < ChunkSize; { until we run out of chunks }

finally

FileClose(Dest); { close the destination file }

end;

finally

FileClose(Source); { close the source file }

end;

finally

FreeMem(CopyBuffer, ChunkSize); { free the buffer }

end;

end;

{ MoveFile procedure }

{ Moves the file passed in FileName to the directory specified in DestDir.

Tries to just rename the file. If that fails, try to copy the file and

delete the original.


Подобные документы

  • Изучение основных принципов разработки приложений баз данных в среде Delphi. Создание таблиц, псевдонима и вычисляемых полей базы данных. Особенности организации поиска и фильтрации. Сортировка данных в таблицах. Построение запросов. Генерация отчетов.

    курсовая работа [1,3 M], добавлен 05.02.2017

  • Определение базы данных и банков данных. Компоненты банка данных. Основные требования к технологии интегрированного хранения и обработки данных. Система управления и модели организации доступа к базам данных. Разработка приложений и администрирование.

    презентация [17,1 K], добавлен 19.08.2013

  • Применение приложения Excel как базы данных: подсчет по формулам, сортировка, структурирование, фильтрация данных в списке. Построение сводных таблиц, создание диаграммы и гиперссылки. Ввод и просмотр данных посредством формы, формирование запросов.

    курсовая работа [6,2 M], добавлен 27.03.2012

  • Разработка программных продуктов на языке программирования Borland Delphi. Применяемые таблицы и связи между ними. Пользовательский интерфейс работы с базой данных. Алгоритм работы программы "Футбольные команды и игроки". Защита от ввода неверных данных.

    курсовая работа [788,1 K], добавлен 22.06.2011

  • Многомерные структуры данных и поиск информации. Интеллектуальные системы и мягкие вычисления. Интегрированные и распределенные информационные системы. Построение базы данных. Проверка ввода некорректных символов и фильтрации, вывода и печати отчета.

    отчет по практике [732,5 K], добавлен 07.07.2012

  • Разработка простейшей базы данных с использованием приемов работы с Microsoft Access в среде программирования Delphi. Назначение базы данных, условия эксплуатации, выполнения и запуска программы "База данных районного отдела налоговой инспекции".

    курсовая работа [1,3 M], добавлен 14.12.2012

  • Анализ данных предметной области. Информационно-логическая модель базы данных. Физическое проектирование и мероприятия по защите и обеспечению целостности базы данных. Приложение интерфейса для SQL-сервера базы данных на языке программирования Delphi.

    курсовая работа [2,2 M], добавлен 30.05.2013

  • Программа поиска в базе данных в среде Borland Delphi 7.0 Enterprise. Условия и блок-схемы задач. Ввод массива. Текст программ в Delphi, в Паскаль. Текст программы поиска в базе данных. Кодирование материала. Изготовление реляционной базы данных.

    практическая работа [27,6 K], добавлен 11.10.2008

  • Использование электронной таблицы как базы данных. Сортировка и фильтрация данных в Microsoft Excel 97. Сортировка - это упорядочение данных по возрастанию или по убыванию. При фильтрации базы отображаются только записи, обладающие нужными свойствами.

    реферат [6,6 K], добавлен 17.11.2002

  • Понятие баз данных и принципы проектирования информационных систем. Разработка программы для отслеживания финансовой стороны работы компании в среде Delphi 7. Создание таблиц и схемы данных. Разработка клиентского приложения и процедуры добавления данных.

    курсовая работа [1,4 M], добавлен 25.04.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.