Внешний вид сайта:

Сравнение FieldValues и FieldByName

В большой книге «Delphi 4 Developer's Guide» от Steve Teixeria и Xavier Pacheco они настоятельно рекомендуют, чтобы использовалось свойство FieldValues для чтения или записи значений полей, когда Вы работаете с полями данных. Так как FieldValues установлено как значение по умолчанию, так что писать код легко, примерно так:
Label1.Caption := DataSet['Name']; 
// то же самое, что и DataSet.FieldValues['Name'] 
DataSet['Name'] := Label1.Caption;

Первая инструкция работает в большинстве случаев, но когда Name пусто, возникает исключение. Почему это происходит? Из Онлайн справки мы видим, что свойство FieldValues возвращает Variant, а когда поле Name пусто, будет возвращено NULL, тогда как Delphi требует, чтобы NULL было преобразовано в строку, иначе генерируется ошибка.

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

var 
  a: Variant; 
  { ... }
  a := DataSet['Name']; 
  if VarIsNull(a) then 
Label1.Caption := EmptyStr 
  else 
Label1.Caption := a; 

Есть ли другой способ, чтобы сделать это? Используйте метод FieldByName. Метод FieldByName возвращает значение TField и Вы можете использовать AsString, AsInteger и так далее, чтобы преобразовать значение. Когда поле пусто, AsString возвратит пустую строку и никакого исключения, AsInteger возвратит 0. Сделать можно так:

Label1.Caption := DataSet.FieldByName('Name').AsString;

Итог: Из этой статьи мы узнали, что когда мы будет читать значение поля, лучше использовать FieldByName, хотя нужно будет написать немного лишнего кода. Но это сделает Ваш код безопасным. А когда Вы будете записывать данные в поле, лучше использовать свойство FieldValues, это работает очень хорошо и требуется меньше кода.

Комментарии

Нет комментариев. Ваш будет первым!