Cтраница 2
Если на этапе проектирования вы не создали ни одного компонента поля, в момент открытия таблицы программа автоматически создает объекты полей в соответствии с определением таблицы. Однако если на этапе проектирования вами были созданы какие-либо объекты полей, среда исполнения Delphi будет использовать именно эти компоненты, не добавляя к ним какие-либо дополнительные поля. [16]
Чтобы построить приложение, которое не использует специальных элементов управления работы с данными и ведет себя, как стандартное приложение Delphi, вы можете написать обработчики событий для операций, которые выполняются специальными элементами управления автоматически. Говоря конкретнее, в момент, когда пользователь изменяет содержимое визуальных компонентов, вы должны перевести набор данных в режим редактирования, а когда пользователь завершает работу с элементом управления, переключая фокус на другой элемент, вы должны обновить объекты полей набора данных. [17]
![]() |
Отображение содержимого полей Lengthjn, Notes и Graphic. [18] |
Для доступа к полям таблиц в Delphi используется класс TFJeld. Элементам списка, отображаемого в редакторе полей таблицы, соответствуют объекты классов, производных от TFJeld. Объекты полей, как и любые другие объекты, обладают рядом полезных свойств и методов. [19]
![]() |
Создание вычисляемого поля в примере Calc. [20] |
Если на этапе проектирования вы не создали ни одного компонента поля, в момент открытия таблицы программа автоматически создает объекты полей в соответствии с определением таблицы. Однако если на этапе проектирования вами были созданы какие-либо объекты полей, среда исполнения Delphi будет использовать именно эти компоненты, не добавляя к ним какие-либо дополнительные поля. [21]
Ранее я уже говорил о том, что в любой момент времени в наборе данных некоторая запись считается текущей, или активной. Эта запись сохраняется в буфере, и вы можете выполнять в ее отношении некоторые действия, применяя для этой цели набор универсальных методов. Однако для доступа к данным, содержащимся в этой записи, вы должны использовать объекты полей записи. Компоненты полей ( говоря точнее, экземпляры классов, производных от базового класса TFi eld) играют фундаментальную роль в любом приложении Delphi, ориентированном на работу с базами данных. Каждый объект поля соответствует одному из полей базы ДаН ных. Элементы управления для работы с данными напрямую соединяются с объектами полей. [22]
Это может оказаться необходимым, если вы хотите получить полный контроль над процедурами передачи данных между объектами полей и визуальными элементами управления. В подавляющем количестве ситуаций достаточно выполнить дополнительную настройку специализированных элементов управления и перехватить все необходимые вам сообщения о событиях, генерируемые объектами полей. [23]
Похожий, основанный на применении RTTI код используется в методах GetField-Data и SetFieldData. Когда мы используем свойства для доступа к данным набора данных, у нас появляется удобная возможность либо напрямую связать операции чтения-записи с данными, либо употреблять для обращения к данным специально предназначенные для этого методы. Можно было бы подключить код к объектам полей и в рамках этого кода выполнять все необходимые проверки, однако подход, основанный на использовании свойств, в большей степени соответствует концепции ООП. [24]
В методах, рассмотренных в предыдущем разделе, выполняется перемещение данных из файла в буфер, расположенный в памяти. Однако среда Delphi мало что может сделать с этими данными, так как она не знает, каким образом их интерпретировать, следовательно, она не может работать с ними напрямую. Чтобы обеспечить взаимодействие между Delphi и содержимым буфера, необходимо реализовать в рамках компонента еще два метода: GetData и SetData. Метод GetData копирует Данные из буфера в объекты полей набора данных, а метод SetData перемещает данные обратно из объектов полей в буфер. Потом Delphi сможет выполнить перемещение данных из объектов данных в элементы управления, работающие с этими Данными, и обратно, из элементов управления в объекты полей. [25]
В методах, рассмотренных в предыдущем разделе, выполняется перемещение данных из файла в буфер, расположенный в памяти. Однако среда Delphi мало что может сделать с этими данными, так как она не знает, каким образом их интерпретировать, следовательно, она не может работать с ними напрямую. Чтобы обеспечить взаимодействие между Delphi и содержимым буфера, необходимо реализовать в рамках компонента еще два метода: GetData и SetData. Метод GetData копирует Данные из буфера в объекты полей набора данных, а метод SetData перемещает данные обратно из объектов полей в буфер. Потом Delphi сможет выполнить перемещение данных из объектов данных в элементы управления, работающие с этими Данными, и обратно, из элементов управления в объекты полей. [26]
В методах, рассмотренных в предыдущем разделе, выполняется перемещение данных из файла в буфер, расположенный в памяти. Однако среда Delphi мало что может сделать с этими данными, так как она не знает, каким образом их интерпретировать, следовательно, она не может работать с ними напрямую. Чтобы обеспечить взаимодействие между Delphi и содержимым буфера, необходимо реализовать в рамках компонента еще два метода: GetData и SetData. Метод GetData копирует Данные из буфера в объекты полей набора данных, а метод SetData перемещает данные обратно из объектов полей в буфер. Потом Delphi сможет выполнить перемещение данных из объектов данных в элементы управления, работающие с этими Данными, и обратно, из элементов управления в объекты полей. [27]
Ранее я уже говорил о том, что в любой момент времени в наборе данных некоторая запись считается текущей, или активной. Эта запись сохраняется в буфере, и вы можете выполнять в ее отношении некоторые действия, применяя для этой цели набор универсальных методов. Однако для доступа к данным, содержащимся в этой записи, вы должны использовать объекты полей записи. Компоненты полей ( говоря точнее, экземпляры классов, производных от базового класса TFi eld) играют фундаментальную роль в любом приложении Delphi, ориентированном на работу с базами данных. Каждый объект поля соответствует одному из полей базы ДаН ных. Элементы управления для работы с данными напрямую соединяются с объектами полей. [28]