C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Глюк, непонятный
** avtoritet
Отправлено: 16.09.2004, 13:28


Не зарегистрирован







Помогите, делема! БД парадокс. Значит кидаю TEdit, кнопку ну и все что нужно для отображеня данных табицы. НАжимаешь на кнопку и должно в TEDIT отобразить значение поля типа Alpha. НО выдает ошибку ели поле БД пустое. Что-то вроде — Не могу конвертнуть NULL в String.
Кто знает решение — отпишитесь если не лень!
AVC
Отправлено: 16.09.2004, 13:59


Ветеран

Группа: Модератор
Сообщений: 1583



Мда, действительно дилема. Я не могу даже повторить вашу ошибку.
На форме TTable, TDataSource, TDBGrid (для простого контроля) TEdit, TDBEdit и кнопка. BCDEMOS таблица country.pd поле Name. Все связи настроены. Добавляю пустую запись и становлюсь на нее. кнопка делает
CODE

TField *fld = tbl->FindField("Name");
if (!fld) return;
Edit1->Text = fld->AsString;

Ни Edit, ни DBEdit не ругаются.
Вы уверены, что правильно поняли сообщение об ошибке?
** avtoritet
Отправлено: 16.09.2004, 15:01


Не зарегистрирован







For AVC:
У меня такая строка ругается:
frmFilm->edtGod->Text =QRY->Fields->FieldByNumber(3)->Value;
Ошибка: Not convert type (NULL) for (String).-На пямять пишу, но суть изложил.

попробовал как ты через TFIeld — тоже ругается, причем так же.

На форме: TQuery, TDataSource, TUpdate, TDBGrid ...
Кстати, ругается тогда, когда ячейка пуста. Будь там значение — все ОК
AVC
Отправлено: 16.09.2004, 15:29


Ветеран

Группа: Модератор
Сообщений: 1583



У нас разница не в Field а в следующем:
я пишу AsString
вы Value
сообщение об ошибке вполне закономерно.

Если хотите использовать Value задавайте явное преобразование
frmFilm->edtGod->Text = AnsiString(QRY->Fields->FieldByNumber(3)->Value);
** avtoritet
Отправлено: 16.09.2004, 15:45


Не зарегистрирован







Сделал через преобразование в AnsiString — тажа история! Ты у себя пробовал? У меня уже бошка трещит от этого глюка!
Guest
Отправлено: 16.09.2004, 16:03


Не зарегистрирован







Виноват, поторопился. Конечно не сработает (по той же причине).
Поставьте AsString и не парьтесь.
или
CODE

Variant    v = QRY->Fields->FieldByNumber(3)->Value->Value;
AnsiString str;
if      (v.Type() == varString) str = v.AsType(varString);
else if (v.Type() == varBoolean) str = (bool(v))? AnsiString("True") : AnsiString("False");
// ...
else str = "";

frmFilm->edtGod->Text = str;
** avtoritet
Отправлено: 17.09.2004, 12:41


Не зарегистрирован







Душевно! Все поехало! Как гора с плеч свалилась!

Вернуться в Работа с базами данных в C++Builder