Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2009

.pdf
Скачиваний:
0
Добавлен:
15.11.2022
Размер:
1.08 Mб
Скачать

procedure TForm1.ValuesClick(Sender: TObject); var

i: Integer; begin ListBox2.Clear;

for i := 0 to Table1.FieldCount - 1 do ListBox2.Items.Add(Table1.Fields[i].AsString);

end;

Этот код добавляет содержимое каждого из полей во второй listbox. Обратите внимание, что вновь счетчик изменяется от нуля до FieldCount - 1.

Свойство Fields позволяет Вам выбрать тип результата, написав Fields[N].AsString. Этот и несколько связанных методов обеспечивают простой и гибкий способ доступа к данным, связанным с конкретным полем. Вот список доступных методов, который Вы можете найти в описании класса TField:

property AsBoolean property AsFloat property AsInteger property AsString property AsDateTime

Всякий раз (когда это имеет смысл) Delphi сможет сделать преобразования. Например, Delphi может преобразовывать поле Boolean к Integer или Float, или поле

Integer к String. Но не будет преобразовывать String к Integer,

хотя и может преобразовывать Float к Integer. Если Вы хотите работать с полями Date или DateTime, то можете использовать

AsString и AsFloat для доступа к ним.

Как было объяснено выше, свойство FieldByName позволяет Вам получить доступ к содержимому определенного поля, просто указав имя этого поля:

81

S := Table1.FieldByName(‘Pokupatel’).AsString;

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

Наше приложение выглядит, конечно, очень плохо. Шапка таблицы содержит непонятные пользователю имена полей, а надо, чтобы были написаны нормальные заголовки по-русски. Для редактирования отдельных полей служит Редактор Полей. Вызвать его проще всего двойным щелчком на компоненте Table1. Сначала вы увидите пустое поле этого редактора (рисунок 9а). Щелкните на нем правой кнопкой мыши и из всплывающего меню выберите раздел Add fields...

(добавить поля). Вы увидите окно, изображенное на рисунке 9б, в котором содержится список всех полей таблицы. Выберите из него курсором мыши интересующие поля. Если вы при этом будете держать нажатой клавишу Ctrl, то может выделить любую комбинацию полей. Однако имейте в виду, что только к тем полям, которые вы добавите, вы сможете в дальнейшем обращаться. Так что в данном случае вам имеет смысл выделить все поля. Выделив поля, щелкните на ОК, и вы вернетесь к основному окну Редактору Полей, но в нем уже будет содержаться список добавленных полей (рисунке 9в).

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

Выделите в списке какое-то поле и посмотрите его свойства в Инспекторе Объектов. Вы увидите, что каждое поле - это объект, причем его класс зависит от типа поля: TStringField, TSmallintField, TBooIeanFicld и т.п. Все эти классы являются производными от TField — базового класса полей. Таким образом, каждое поле является объектом и

82

обладает множеством свойств. Рассмотрим основные из них, которые чаще всего необходимо задавать.

а)

б)

в)

Рис. 9.

Редактор полей: исходное состояние (а), окно выбора

 

(б), состояние после выбора (в).

 

Свойство Alignment определяет выравнивание отображаемого текста внутри солонки таблицы: влево, вправо или по центру.

Свойство DisplayLabel соответствует заголовку столбца данного поля. Например, для поля Sht_faktura значение

83

DisplayLabel можно задать равным «Счет-фактура», для

“Pokupatel” — «Покупатель» и т.д.

Свойство DisplayWidth определяет ширину колонки — число символов.

Рис. 10. Приложение с установленными свойствами полей

Свойства EditMask для строк и EditFormat для чисел определяют форматы дображения данных.

Свойство ReadOnly, установленное в true, запрещает пользователю вводить в данное поле значения. Свойство Visible определяет, будет ли видно пользователю соответствующее поле.

После установки всех необходимых свойств приложение уже приобретает приемлемый вид (рисунок 10).

7.6. Работа с данными

Следующие методы позволяют Вам изменить данные, связанные с TTable:

procedure Append; procedure Insert;

84

procedure Cancel; procedure Delete; procedure Edit; procedure Post;

Все эти методы - часть TDataSet, они унаследованы и используются TTable и TQuery.

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

Имеется типичная последовательность, которую Вы могли бы использовать при изменении поля текущей записи:

Table1.Edit;

Table1.FieldByName(‘Pokupatel’).AsString := ‘ООО

«Свет»’; Table1.Post;

Первая строка переводит БД в режим редактирования. Следующая строка присваивает значение ‘ООО «Свет»’ полю ‘Pokupatel’. Наконец, данные записываются на диск, когда Вы вызываете Post.

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

Table1.Edit;

Table1.FieldByName(‘Pokupatel’).AsString := ‘ООО

«Свет»’;

85

Table1.Next;

Общее правило, которому нужно следовать, - всякий раз, когда Вы сдвигаетесь с текущей записи, введенные Вами данные будут записаны автоматически. Это означает, что вызовы First, Next, Prior и Last всегда выполняют Post, если Вы находились в режиме редактирования.

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

Существуют два метода, названные Append и Insert, которые Вы можете использовать всякий раз, когда Вы хотите добавить новую запись в DataSet. Очевидно имеет больше смысла использовать Append для DataSets, которые не индексированы, но Delphi не будет генерировать exception, если Вы используете Append на индексированной таблице. Фактически, всегда можно использовать и Append, и Insert.

Продемонстрируем работу методов на простом примере. Чтобы создать программу, используйте TTable, TDataSource и TdbGrid. Открыть таблицу. Затем разместите две кнопки на форме и назовите их ‘Вставить’ и ‘Удалить’. Когда Вы все сделаете, то должна получиться форма, показанная на рисунок

11.

Следующим шагом Вы должен связать код с кнопками “Вставить” и “Удалить”.

Для кнопки «Вставить»:

procedure TForm1.InsertClick(Sender: TObject); begin

Table1.Insert; Table1.FieldByName(‘Sht_faktura’).AsString := '6'; Table1.FieldByName(‘Prodavec’).AsString := 'ООО

«Альфа»';

86

Table1.FieldByName(‘Pokupatel’).AsString :=

'ООО

«Свет»';

 

Table1.FieldByName(‘edinica’).AsString := ‘шт.';

 

Table1.FieldByName(‘kolvo’).AsString := ‘2';

 

Table1.FieldByName(‘Price’).AsString := ‘265000';

 

Table1.Post;

 

end;

 

Рис. 11, Программа может вставлять и удалять запись из таблицы

и соответственно для кнопки «Удалить»:

procedure TForm1.DeleteClick(Sender: TObject); begin

Table1.Delete;

end;

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

87

записи следующим этапом нужно назначить значения одному или большему количеству полей. Существует, конечно, несколько различных путей присвоить эти значения. В нашей программе Вы могли бы просто ввести информацию в новую запись через DBGrid. Или Вы могли бы разместить на форме стандартную строку ввода (TEdit) и затем установить каждое поле равным значению, которое пользователь напечатал в этой строке:

Table1.FieldByName(‘Name’).AsString := Edit1.Text;

Можно было бы использовать компоненты, специально предназначенные для работы с данными в DataSet.

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

Если после вызова Insert Вы решаете отказаться от вставки новой записи, то Вы можете вызвать Cancel. Если Вы сделаете это прежде, чем Вы вызовете Post, то все что Вы ввели после вызова Insert будет отменено, и dataset будет находиться в состоянии, которое было до вызова Insert.

Одно дополнительное свойство, которое Вы должны иметь в виду, называется CanModify. Если CanModify возвращает False, то TTable находиться в состоянии ReadOnly. В противном случае CanModify возвращает True, и Вы можете редактировать или добавлять записи в нее по желанию. CanModify - само по себе ‘read only’ свойство. Если Вы хотите установить DataSet в состояние только на чтение (Read Only), то Вы должны использовать свойство ReadOnly, не CanModify.

88

8. ОСНОВЫ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ В СРЕДЕ DELPHI 7

8.1. Интегрированная Среда Разработки (ИСР) Delphi

Интегрированная Среда Разработки (Integrated Development Environment - IDE, в дальнейшем мы будем использовать для нее аббревиатуру ИСР) — это среда, в которой есть все необходимое для проектирования, запуска и тестирования приложений и где все нацелено на облегчение процесса создания программ. ИСР интегрирует в себе редактор кодов, отладчик, инструментальные панели, редактор изображений, инструментарий баз данных — все, с чем приходится работать. Эта интеграция предоставляет разработчику гармоничный набор инструментов, дополняющих друг друга. Более того, как вы увидите в дальнейшем, вам предоставлена возможность расширять меню ИСР, включая в нее необходимые вам дополнительные программы, в том числе и собственные. Результатом является удобная для вас среда быстрой разработки сложных прикладных программ.

Запустите Delphi, выбрав пиктограмму Delphi в разделе меню Windows Пуск Программы. Когда вы щелкнете на пиктограмме Delphi, перед вами откроется основное окно Интегрированной Среды Разработки. В Delphi 7 вид окна представлен на рисунке 12. В общих чертах окна всех версий достаточно сходны.

В верхней части окна ИСР вы видите полосу главного меню. Ниже полосы главного меню расположены две инструментальные панели. Левая панель (состоящая, в свою очередь, из нескольких панелей) содержит два ряда быстрых кнопок, дублирующих некоторые наиболее часто используемые команды меню.

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

89

но и от того, создаете ли вы приложение Windows, или кроссплатформенное приложение

Рис. 12. Основное окно Интегрированной Среды Разработки в Delphi 7

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

В основном поле окна вы можете видеть слева два окна: сверху — Дерево Объектов (Object TreeView), под ним — Инспектор Объектов (Object Inspector). Окно Дерево Объектов будет отображать иерархическую связь визуальных и невизуальных компонентов и объектов вашего приложения. А Инспектор Объектов — это основной инструмент, с помощью которого вы в дальнейшем будете задавать свойства компонентов и обработчики событий. Правее этих окон вы можете видеть окно пустой формы, готовой для переноса на нее компонентов. Под ним расположено окно Редактора

90

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]