Создание базы данных в delphi 7

Создание базы данных в delphi 7

Создание базы данных. Создание каталога. Создание псевдонима.

База данных – это набор файлов (таблиц), в которых находится информация. Как правило, база данных состоит из нескольких таблиц, которые размещают в одном каталоге. Каталог для новой базы данных создается обычным образом, например, при помощи Проводника. Таблицу можно создать, воспользовавшись входящей в состав Delphi утилитой Borland Database Desktop или организовав SQL-запрос к серверу базы данных.

Так как для доступа к файлам (таблицам) базы данных библиотека BDE использует не имя каталога, в котором находятся файлы, а его псевдоним, то перед тем, как приступить к созданию таблиц новой базы данных, необходимо создать псевдоним для этой базы данных.

Таким образом, процесс создания базы данных может быть представлен как последовательность следующих шагов:

  1. Создание каталога.
  2. Создание псевдонима.
  3. Создание таблиц.

Создание каталога

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

Примечание
Для дальнейшей работы с рассматриваемой в качестве примера базой данных "Архитектурные памятники Санкт-Петербурга" следует в каталоге Проекты создать каталог Петербург и в нем – подкаталог Data
.

Создание псевдонима

Псевдоним базы данных создается при помощи входящей в Delphi утилиты BDE Administrator, которая запускается из Windows выбором из меню Программы › Borland Delphi 7 команды BDE Administrator.

Вид диалогового окна BDE Administrator после запуска приведен на рис. 17.2.


Рис. 17.2. Окно BDE Administrator

В левой части окна, на вкладке Databases, перечислены псевдонимы, зарегистрированные на данном компьютере. Для того чтобы создать новый псевдоним, необходимо из меню Object выбрать команду New. Затем в открывшемся диалоговом окне New Database Alias (Новый псевдоним базы данных) из списка Database Driver Name, в котором перечислены зарегистрированные в системе драйверы доступа к базам данных, нужно выбрать драйвер для создаваемой базы данных (рис. 17.3), т. е. фактически выбрать тип создаваемой базы данных.

В комплекте с Delphi 7 поставляются сразу несколько библиотек для работы с базами данных (ADO, BDE, dbExpress, InterBase и др.). Для того чтобы создать приложение, работающее с локальной базой данных, то вы обычно используете библиотеку BDE. Эта библиотека создана компанией Borland и уже порядком устарела. Но без определённой подготовки операционной системы эти компоненты работать не будут. Есть альтернатива этим компонентам.

Существует автономный компонент TClientDataSet который использует свой собственный формат данных.

Итак, переходим к практике. Компонент TClientDataSet использует файлы с расширением *.CDS и *.XML мы будем рассматривать формат CDS, так как XML формат занимает вдвое больше места на диске и такой файл легко можно изменить, открыв его через блокнот. Этот компонент при создании проецирует файл в память и модифицирует только память, а при уничтожении данные записываются в файл целиком. Путь к файлу определяет свойство FileName. Файлы формата CDS можно найти в папке program filesCommon FilesBorland SharedData. Давайте сначала откроем один из них. Скопируем один из них в папку c:data .

Кидаем на форму 4 компонента
1. TClientDataSet
2. TDataSource
3. TDBGrid
4. TDBNavigator

В результате :
1. DataSource1
2. ClientDataSet1
3. DBGrid1
4. DBNavigator1

Настраиваем их свойства так чтобы получилось примерно так:
DBNavigator1.DataSource = DataSource1
DBGrid1.DataSource = DataSource1
DataSource1.DataSet = ClientDataSet1
ClientDataSet1.FileName = ‘D:Iwwwcustomer.cds’
ClientDataSet1.Active = True (самое главное этого не забыть :-))

И всё готово. Вы сразу у меня спросите: "А как создать новую таблицу?".
Всё очень просто даже не нужно НИКАКИХ дополнительных программ, только компонент TClientDataSet и конечно Delphi.

1. Создаём новый проект (можно даже его не сохранять) и добавляем на форму компонент TClientDataSet.
2. Сначала определим структуру таблицы. Для этого открываем свойство FieldDefs нашего компонента. Открывается окно "Editing ClientDataSet1.FieldDefs" жмём "добавить новый", и определяем свойства поля (тип, формат, размер и т.д.).
3. Теперь самое главное. Щёлкаем правой кнопкой мыши на компоненте TClientDataSet и выбираем пункт CreateDataSet. Потом ещё раз открываем контекстное меню и выбираем пункт "Save to binary MyBase file" и сохраняем файл туда, куда нам надо.

Всё готово теперь у нас есть файл CDS. Можно закрывать данный проект и создавать новый, так как это было показано выше. Изменяете его, как хотите, добавляйте, удаляйте, изменяйте короче как обычно. Как модифицировать файл программно и фильтровать и индексировать записи, я вам расскажу позже.

В предыдущей статье о создании базы данных в delphi, я рассказывал про компонент TClientDataSet, как подключаться к локальной базе данных и создавать новую локальную таблицу. Сегодня я вам расскажу, как фильтровать записи в таблице и индексировать их. Фильтровка записей таблицы это эквивалент SQL запросам. Фильтровка нужна, для того чтобы показать пользователю меньше записей согласно определённому условию (например: показать только тех учеников группы у кого день рождения в июне или в декабре и т.д.). Также фильтрацию можно использовать как поиск некоторой записи в таблице. На практике в большинстве случаев SQL запросы используются именно в таких случаях, какой описан в примере.

Фильтр задается, как строка и её определяет свойство Filter, а активность фильтра определяет свойство Filtered, соответственно если оно True то записи фильтруются. Фильтр задаётся согласно всем правилам программирования Delphi, к которым вы привыкли. Фильтр имеет очень много функций:

1. Арифметические и логические функции и операторы сравнения
Примеры:
a. Population 24 and Rost 300 or Razmer Moskva
e. Ves + Rost > 200;
f. Vozrast/Ves > 9;
2. Можно выполнят операции над строками
Примеры
a. Last_Name = ‘Иван’;
b. First_Name+Last_Name = ‘ИгорьПетров’;
c. Substring(Last_Name,1,2)= ‘Ca’;
3. Также функции даты и времени
Примеры
a. Year(Birth_Day) = 1986;
b. Day(Birth_Day) = 12;
4. Используются также операторы Like и In.

Читайте также:  Рейтинг моба игр 2018

Все возможности фильтрации полностью документированы в файле справки Delphi в разделе Developing Database Applications > Using client datasets > Limiting what records appear.

Индексацию определяет свойство IndexFieldNames. Для того чтобы упорядочить по возрастанию таблицу по полю Vozrast нужно присвоить свойству IndexFieldNames значение ‘Vozrast’. Очень часто индексация нужна тогда, когда пользователь щёлкает на заголовках столбцов компонента DBGrid.

procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
ClientDataSet1.IndexFieldNames:=Column.FieldName;
end;

Также можно создать индексы с помощью свойства IndexDefs. Индексы можно создать как во время выполнения, так и в стадии создания базы данных. Во время выполнения delphi приложения, для того чтобы создать индекс нужно вызвать метод Add свойства IndexDefs. Первый параметр это имя индекса, второй — имя поля (или полей), третий — опции. Теперь для того чтобы упорядочить таблицу по полю нужно присвоить свойству IndexName имя нужного индекса. Данный метод лучше, чем предыдущий, так как можно быстро переключаться между созданными заранее индексами. Для того чтобы изменить индексы нужно воспользоваться свойством Items свойства IndexDefs, указав порядковый номер индекса. Получить порядковый номер индекса можно через метод свойства IndexDefs IndexOf , указав имя индекса. Например:

var
i:integer;
begin
…..
i:=ClientDataSet1.IndexDefs.IndexOf(‘i3’);
ClientDataSet1.IndexDefs.Items[i].Fields:=’Birth_Day’;

В предыдущей статье я рассказывал, как фильтровать данные в компоненте TClientDataSet. Сегодня я расскажу, как редактировать данные в компоненте TClientDataSet.

Фактически в компоненте TClientDataSet можно редактировать только текущую запись и извлекать значение только из текущей записи. Текущая запись это та запись, которая имеет фокус ввода в данный момент. Для того чтобы некоторая запись стала текущей её должен выделить пользователь, также её можно выделить программно. Для того сделать некоторую запись текущей используется метод Locate:

Locate(const KeyFields: string;
const KeyValues: Variant; Options: TLocateOptions): Boolean;

Первый параметр это список полей разделяемых "точкой с запятой" либо одно поле. Второй параметр это значения, которым должны быть равны поля указанные в первом параметре если полей много то во втором параметре должен быть массив из Variant. Если указано несколько полей то переход осуществляется, только если каждое поле, указанное в первом параметре равно значению, указанному во втором параметре. Если переход прошёл успешно, то функция возвращает True. Для того чтобы получить массив из Variant можно использовать функцию VarArrayOf. Вот примеры использования метода Locate:

……
If not ClientDataSet1.Locate(‘LastName’,Edit1.text,[]) then
MessageDlg(‘ " ‘+Edit1.text+’ " не найдено’, mtError, [mbOK], 0);
…..

…..
ClientDataSet1.Locate(‘LastName;FirstName’, VarArrayOf( [‘Иванов’, ‘Иван’] ), []);
….

Если нужно перейти к записи, зная лишь часть строкового поля можно использовать опцию loPartialKey в третьем параметре.

ClientDataSet1.Locate(‘Adres’,’Mosk’,[loPartialKey]); Часть значения не может быть где-то посередине поля она может составлять лишь несколько символов сначала. Допустим, что значение поля Adres равно ‘Moskva’ то:

ClientDataSet1.Locate(‘Adres’,’Mosk’,[loPartialKey]); сработает
ClientDataSet1.Locate(‘Adres’,’skv’,[loPartialKey]); несработает.

Для навигации в таблице также можно использовать хорошо знакомые нам методы:

Также:
MoveBy(Distance : Integer):Integer; Функция возвращает количество записей, на которое фактически произошло перемещение. Например: если до конца осталось 7 записей, а перемещение происходит на 10 записей, то функция возвратит 7.
RecNo: Integer;
Свойство обозначает номер записи, на которой находится фокус ввода. Очень странно, но отсчёт начинается с 1.
Получить порядковый номер текущей записи:
Current_record:=ClientDataSet1.recno;
Установить фокус ввода на четвёртую запись в таблице:
ClientDataSet1.RecNo:=4;

Итак, мы перешли к нужной нам записи.
Сначала про класс TField: чтобы получить его значение нужно воспользоваться свойством value, которое возвращает значение типа Variant. Также есть специализированные свойства:
AsString;AsFloat;AsCurrency;AsDateTime и т.д.
Для того чтобы получить значение некоторого поля существует много способов.

1. Свойство Fields — является массивом объектов TField. Чтобы получить значение поля нужно указать его порядковый номер (отсчёт с нуля):
Str:= ClientDataSet1.Fields[3]. AsString;
2. Метод FieldByName — возвращает объект типа TField. ShowMessage(ClientDataSet1.FieldByName(‘Adres’).AsString);
3. Свойство FieldValues — возвращает значение Variant. ShowMessage(ClientDataSet1. FieldValues [‘LastName’]);
Это свойство является свойством по умолчанию, поэтому можно писать так ShowMessage(ClientDataSet1[‘LastName’]);

Для того чтобы изменить значение полей нужно сначала перевести компонент в состояние редактирования присвоить нужным полям нужные значения и обновить компонент. Переход в состояние редактирования осуществляет процедура Edit; обновление осуществляет процедура Post;

Вот пример:
ClientDataSet1.edit;
ClientDataSet1[‘LastName’]:=’Иванов’;
ClientDataSet1[‘Ves’]:=’71’;
ClientDataSet1.Fields[1].AsString:=’Moskva’;
ClientDataSet1.FieldByName(‘Vozrast’).AsFloat:=’24’;
ClientDataSet1.post;

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

Для удаления записи используется метод Delete; предупреждение не выводится и метод Post; вызывать не надо.

Чтобы создать элементарное приложение в Delphiработающее с БД требуется 2 основных компонента:TableиDataSource, а также дополнительные компоненты элементов управления. Ниже приведенная схема наглядно объясняет взаимодействие приложенияDelphiи базы данных.

ОбъектTableсоединяет ваше приложениеDelphiс псевдонимом базы данных.

Объект DataSourceявляется посредником междуTableи остальными объектами в программе. Он получает данные изTableи передаёт их объектам, и наоборот может передавать данные из объектов в БД также черезTable. ВзаимодействиеTableиDataSourceкоординируется программойBDEкоторая производит операции чтения и записи БД в нужном формате.

Объекты элементов управления данными в БД DBNavigator DBGird и т.д. черезDataSourceмогут получать и управлять информацией из БД.

DBGrid– это таблица для отображения базы данных в табличном виде.

Задание 3.1. Средствами Delphi откроем созданную Базу Данных «Сотрудники».

Запустите Delphi7. Создайте новый проект.

Первое что нужно сделать, это скинуть на форму компонент Table1. ВDelphi6 и в более ранних версиях он находился на вкладкеDataAccess, а вDelphi7 находится на вкладкеBDE.

Читайте также:  Как увеличить оперативную память с помощью флешки

Затем сбросьте на форму DataSource1 c вкладки DataAccess, а также DBNavigator1 и DBGird1 с вкладки DataControls.

Теперь настройте объект Table1 на БД через её псевдоним. Для этого установите его свойствоDatabaseNameна псевдоним Sotrudnik, а свойствоTableNameустановите на файл sotrudink.DB.

Далее подключим компонент DataSource1 к объекту(таблице)Table1. Установите дляDataSource1 его свойствоDataSetнаTable1.

Осталось последнее. Подключить объекты элементов управления к БД. Для этого установите для DBNavigator1 его свойство DataSourceвDataSource1, то же самое сделайте дляDBGird1. Вот и всё, теперь и объекты управления настроены на БД и могут на неё влиять.

Рис. 17Без помощи мастера БД создаём приложение работающее с БД– Sotrudnik

Теперь даже не запуская программу можно отобразить данные из БД в компоненте DBGird1. Для этого уTable1 установите значение свойстваActiveвTrue. Ваша таблицаDBGird1 заполнится данными из БД.

Рис. 18 В режиме программирования, не запуская приложение отображаем данные вDBGird1 установивTable1.ActiveвTrue

Для того чтобы Table1 активизировался можно не только установитьTable1.ActiveвTrueно и применить следующий оператор:Table1.open. Проверьте это. Для этого уTable1 установите значение свойстваActiveвFalse. Данные перестанут отображаться, а в обработчикеonCreateформы напишите:

Table1.open; // Открывает БД и таблицу

Запустите программу. Данные из БД будут отображаться в таблице. Вернитесь в РП.

Снова для Table1 установитеActiveвTrue. Аналогично для закрытия таблицыTable1.close.

Теперь скиньте ещё 6 компонентов labelна каждом из них напишите имена полей БД и напротив каждого компонентаlabelпоместите по одному– компоненту классаTDBEdit(элементу управления) позволяющий ввод, вывод и редактирование информации.

Причем для каждого компонента класса TDBEditустановите его свойствоDataSourceвDataSource1, а также свойствоDataFieldна соответствующее полеNameилиSurnameилиAgeи т.д.

Рис. 19 Добавляем компоненты классаTDBEdit

Запустите программу. Перемешайтесь по БД. Но старайтесь не менять данные. Выбранные Данные будут отображаться также и в компонентах Edit.Вернитесь в РП.

Задание 3.2. В Базе Данных «Сотрудники» создадим вычисляемое виртуальное поле.

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

Рис. 20Список полей доступных

Щелкните двойным щелчком на объекте Table1. Откроется редактор полей.

Здесь приводится список полей которые будут доступны Table1.

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

Удалите ряд полей, а затем щелкните правой кнопкой и выберите

Addallfields, все поля снова будут доступны.

(При данных действиях часто у Table1 устанавливается значение свойстваActiveвFalse, поэтому меняйте его наTrue).

Создадим виртуальное поле с именем Summa. Ради простоты в него просто будем заносить сумму записей полейAgeиWeight. Щелкните двойным щелчком на объектеTable1. Откроется редактор полей. Щелкните правой кнопкой и выберитеNewField. Заполните поля ввода как на рисунке ниже:

Рис. 21Создаём вычисляемое полеSumma

с использованием диалогового окна NewField

Здесь Summaэто имя поля, а компонент представляющий это поле в приложении имеет имяTable1Summa.Calculated– означает что поле вычисляемое. НажмитеOK. Теперь в редакторе полей будет отображаться данное поле.

Для того чтобы оно также стало отображаться в таблице DBGirdещё раз установите значение свойстваTable1.ActiveвTrue.

Далее выберите в ObjectInspectorTable1Summaи создайте обработчик событияonGetText, напишите там следующее:

Рис. 22В полеSummaсодержится сумма значений полейWeightиAge

Запустите программу. Посмотрите на поле Summa, там должна быть сумма значений полейWeightиAge. Можете изменять значения в поляхWeightиAge, эти изменения сразу отобразятся в полеSumma.Вернитесь в РП.

Событие onGetText наступает при обращении к свойствамDisplayTextилиTextобъекта наследника классаTDataSet, в данном случае объектаTable1.

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

Данный обработчик позволяет изменить форму отображения значения поля Value, т.е. изменить свойстваDisplayTextиTextобычно соответствующие свойствуAsStringконкретного поля представленного компонентом, напримерTable1Summa.

В данном случае в параметрах обработчика: объект Senderявляется – полем классаTField,Text– является отображаемой строкой текста, аDisplayTextуже имеет булевский тип и определяет будет ли строкаTextиспользоваться для отображения или редактирования.

Задание 3.3. Программно выведем информацию о именах полей БД в Memo1.

Здесь же скиньте на форму Memo1 иButton1.

Для Button1 установите свойствоCaptionв “Имена полей”

При щелчке на Button1 выведем вMemo1 названия всех полей. В обработчике щелчкаButton1 напишите:

var i:integer; s:string;

for i:=0 to Table1.FieldCount-1 do

Здесь компонент Table1 имеет свойство Fields представленное как

property Fields[Index: Integer]; Index означает номер поля.

Свойство FieldCount возвращает количество полей в текущей структуре записи. FieldName – в данном случае возвращает имя поля по заданному индексу поля. Первое поле индексируется 0, второе 1 , третье 2 и т.д.

Запустите программу. Щелкните Button1. Программа должна выводить имена полей.Вернитесь в РП.

Задание 3.4. Программно и выведем всю информацию из БД в Memo1.

Скиньте на форму Button2.

Для Button2 установите свойствоCaptionв “Данные в Мемо”

В обработчике щелчка на ней напишите:

var i,j:integer; s:string;

memo1.Clear; // очищаем Мемо

Table1.First; // Переходим на первую запись (строку) вTable1

with Table1 do // Для объекта Table1

fori:=0toRecordCount-1dobegins:=»; //Цикл по количеству записей (то есть строк)

forj:=0toFieldCount-1do//Цикл по количеству полей (то есть столбцов)

s:=s+’ ‘+Fields[j].AsString; // Вывод значения элемента записи в строковом формате

next; // переход на следующую запись от текущей

Запустите программу. Щелкните Button1. Программа должна выводить информацию из БД в Мемо1.Вернитесь в РП.

Здесь RecordCount– является свойствомTable1 и содержит количество записей или строк в таблице.

Для перемещения по таблице имеются следующие методы:

Table1.First— переход на первую запись

Читайте также:  Как узнать что письмо прочитано яндекс почта

Table1.Last— переход на последнюю запись

Table1.Prior-переход на предыдущую запись

Table1.Next — переход на следующую запись

Процедура MoveBy перемещает указатель в объекте Table1 на N записей вперед или назад в таблице. Нет никакого различия между вызовом метода Table1.Next и вызовом Table1.MoveBy(1).

Аналогично, вызов Table1.Prior имеет тот же результат, что и вызов Table1.MoveBy(-1). Таким образом например: перемещение на 3 записи вперед: MoveBy(3); перемещение на 3 записи назад: MoveBy(-3).

propertyBOF:BooleanreadFBOF; — возвращаетTrueесли указатель в началеTable1

propertyEOF:BooleanreadFEOF; — возвращаетTrueесли указатель в концеTable1

Также необходимо отметить свойство FieldDefs(класса TFieldDefs) для существующей таблицы содержит информацию обо всех полях таблицы. Число полей определяется свойствомCount, а доступ к элементам массива осуществляется через свойство Items:

property Items[Index: Integer]: TFieldDef;

Задание 3.4. Разными операторами выведем информацию о двух полях БД в Memo1.

Для доступу к полю мы можем использовать либо его имя и тогда значение записи в данном поле будем получать используя метод требующий в качестве параметра имя поля. Например, оператор Table1.FieldByName(‘Age’).Valueсодержит значение записи поляAge.

У нас в таблице поле Ageявляется вторым по счёту, следовательно, его индекс 1, т.к. нумерация идет от нуля, поэтому оператор совершенно эквивалентный предыдущему будет иметь вид:Table1.Fields[0].Value

Здесь Valueсодержит значение, имеющее конкретный тип – целый, вещественный, текстовый и т.д. В данном случаеValueдля поляAgeимеет целый тип, поэтому можно

Спокойно присвоить некоторой переменной целого типа I:integerданное значение:

I:= Table1.FieldByName(‘Age’).Value или I:= Table1.Fields[0].Value

При этом Delphiтакже легко преобразовывает формат вывода, поэтому если нужно значение целого типа в полеAgeвывести в переменную строкового типаS:stringили вMemo1 нужно проделать следующее:S:=Table1.FieldByName(‘Age‘).AsString

Преобразования форматов вывода в классе TFieldследующие:

AsBoolean, AsFloat, AsInteger, AsString, AsDateTime

Скиньте на форму Button3.

Для Button3 установите свойствоCaptionв “Форматы поля”

В обработчике щелчка на ней напишите:

var s:string; Age:integer;

Table1.Fields[0].FieldName+’ в формате AsString: ‘+s);

Table1.FieldByName(‘Age’).FieldName+’ в формате AsString: ‘+s);

Memo1.Lines.Add(‘Значение поля Age в формате Value: ‘+IntToStr(Age));

Запустите программу. Щелкните Button3. Программа должна работать правильно. Еще раз проанализируйте код.Вернитесь в РП.

Задание 3.5. Программно поменяем значения записей поля Growth(рост) в таблице Table1

Чтобы программно поменять любую текущую запись нужно сначала перевести объект Table1 в режим редактирования методомEdit.

Поменяем просто в цикле значения поля Growth(рост) на 160, 161, 162 и т.д.

Скиньте на форму Button4.

Для Button4 установите свойствоCaptionв “Меняем ПолеGrowthв цикле”

В обработчике щелчка на ней напишите:

Table1.First;//переход на начало записи (первая строка)

for i:=0 to Table1.RecordCount-1 do begin //Делаем цикл по записям

Table1.Edit;// ПереводимTable1 в режим редактирования

Table1.FieldByName(‘Growth’).value := 160+i; // Меняем записи поля Growth

Table1.Post;// сохраняем данные на диск

Table1.next; // переход на следующую запись

Мы всегда после изменения данных чтобы сохранить их изменёнными в БД должны вызывать метод Table1.Post.

Запустите программу. Щелкните Button4. Программа должна работать правильно. Еще раз проанализируйте код.Вернитесь в РП.

Задание 3.6. Программно вставим ещё одну запись в таблицу Table1

Это можно сделать с помощью метода Insert или Append компонента Table1.

Скиньте на форму Button5.

Для Button5 установите свойствоCaptionв “Insert”

В обработчике щелчка на ней напишите:

Table1.Insert;//переводимTable1 в режим вставки

Table1.FieldByName(‘Name’).AsString := ‘STEPAN’; // В поле Name пишем имя STEPAN

Table1.FieldByName(‘Age’).Value := 33; // Указываем возраст 33

Table1.Post; // Сохраняем данные на диск

Запустите программу. Щелкните на Button5, но только один раз иначе возникнет ошибка. Программа должна работать правильно. Еще раз проанализируйте код.Вернитесь в РП.

Также существуют аналогичная процедура Table1.Cancel(Отмена)

Задание 3.7. Программно удалим эту запись в таблице Table1

Скиньте на форму Button6.

Для Button6 установите свойствоCaptionв “Delete”

В обработчике щелчка на ней напишите:

Table1.Delete ; // удалить запись.

Запустите программу. Мышкой в таблице выберите созданную вами запись STEPAN, а затем щелкните только 1 раз наButton6 . Запись должна удалиться. Больше не щелкайте чтобы не удалить остальные записи.Вернитесь в РП.

Задание 3.7. Программно определим, находится ли конкретная запись в таблице Table1 для конкретного поля?

Определим, есть ли сотрудник по фамилии Pahomovaв полеSurname.

Будем использовать function TBDEDataSet.Locate(const KeyFields: string;

const KeyValues: Variant; Options: TLocateOptions): Boolean;

TLocateOption = (loCaseInsensitive, loPartialKey);– класс опций

Скиньте на форму Button7.

Для Button6 установите свойствоCaptionв “Find”

В обработчике щелчка на ней напишите:

then showmessage(‘Pahomova найдена. ‘) else

Здесь Table1.Locate(‘Surname’,’Pahomova’,[loCaseInsensitive]) возвращает True если Pahomova присутствует в поле Surname, а иначе возвращает False.

Самостоятельное Задание. Программным путем выведите в Memo1 самого толстого и самого старого человека из БД Сотрудники.

В вашей БД «Сотрудники» поле Weight– означает вес.

Самостоятельное Задание. В Delphi с помощью мастера БД откройте учебную БД с псевдонимом DBDEMOS и выберите файл с именем animals.dbf, создайте отображение БД в виде сетки (Gird) Будем отображать рисунки в DBImage1 из данной БД.

Поместите компонент DBImage1 на форму, настройтеDBImage1 на БД используя свойствоDataSource, также настройтеDBImage1 на отображение рисунков животных из данной базы данных используя его свойствоDataField.

После того как сделали данную лабораторную работу удалите созданную Вами БД Сотрудники используяDatabaseDesktop.Сначала удалите псевдоним (Алиас).

Запустите DatabaseDesktop. ВыберетеTools–>AliasManager, а затем выберите псевдонимSotrudnikтак как показано на рисунке и затем щёлкните на кнопкеRemoveодин раз чтобы случайно не удалить другие псевдонимы.

Далее сотрите с жесткого диска каталог, где хранились файлы вашей БД. В данном случае D:DatabaseSotrudink

автор и разработчик лабораторных

доцент кафедры Информационных технологий и систем

Ссылка на основную публикацию
Сколько рублей получают ютуберы
Видеохостинг YouTube — не только развлекательная площадка, но и хороший источник дохода. Тысячи пользователей выкладывают ролики, пытаясь привлечь внимание аудитории....
Самый дорогой самсунг 2018
Samsung / Самсунг - южнокорейская компания, ведущий производитель смартфонов в мире. В первом квартале 2018 года доля Самсунг на мировом...
Самый лучший smart tv
Ежегодные обновления телевизионных технологий делают телевизоры уже больше, чем обычным экраном для демонстрации каналов. Растет популярность функции Smart TV, которая...
Сколько света мотает компьютер
Выбирая комплектующие для персонального компьютера (ПК) обычно обращают внимание на производительность и объем памяти, порой забывая о том, сколько же...
Adblock detector