Карта сайтаСсылкиКонтакты

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

PDF Печать
Статьи

В большой книге "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, это работает очень хорошо и требуется меньше кода.


 

Добавить комментарий


Защитный код
Обновить