Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Отображение данных с ADOTable в DBGrid для разных таблиц

32K
27 ноября 2007 года
Identific@tor
4 / / 27.11.2007
Здравсвтуйте!
У меня приложение состоит из нескольких взаимосвязанных друг с другом компонентов:
ADOConnection (соединяется с БД Access), ADOTable, DataSource, DBGrid (отображает содержимое ADOTable). Ещё есть поле Edit и кнопка Load (при нажатии она должна по значению Edit->Text (напр. Таблица1, Таблица2 и т. д.) открыть соответствующую таблицу из БД и отобразить в DBGrid.

Вопрос: как осуществить такое отображение? При этом, если ввести Таблица1 в Edit, то в DBGrid должно отобразиться именно её содержимое; а если, например, Таблица2, то содержимое таблицы 2.

Как я пытался делать:(код нажатия кнопки Load)

ADOTable1->Active=false;
ADOTable1->TableName=Edit1->Text;
ADOTable1->Active=true;

В Edit1 я ввожу, например, Таблица1 (она уже есть в БД Access), жму Load...
В результате вылетает ошибка:
Project Project1.exe raised exception class EVariantTypeCastError with message 'Could not convert variant of type (Null) into type (String)'. Process stopped...
32K
27 ноября 2007 года
Identific@tor
4 / / 27.11.2007
Уррррра!
Я нашёл касяк!
Надо было писать имя таблицы в кавычках!
Извините за беспокойство.
1
27 ноября 2007 года
kot_
7.3K / / 20.01.2000
Цитата: Identific@tor
Здравсвтуйте!
У меня приложение состоит из нескольких взаимосвязанных друг с другом компонентов:
ADOConnection (соединяется с БД Access), ADOTable, DataSource, DBGrid (отображает содержимое ADOTable). Ещё есть поле Edit и кнопка Load (при нажатии она должна по значению Edit->Text (напр. Таблица1, Таблица2 и т. д.) открыть соответствующую таблицу из БД и отобразить в DBGrid.

Вопрос: как осуществить такое отображение? При этом, если ввести Таблица1 в Edit, то в DBGrid должно отобразиться именно её содержимое; а если, например, Таблица2, то содержимое таблицы 2.

Как я пытался делать:(код нажатия кнопки Load)

ADOTable1->Active=false;
ADOTable1->TableName=Edit1->Text;
ADOTable1->Active=true;

В Edit1 я ввожу, например, Таблица1 (она уже есть в БД Access), жму Load...
В результате вылетает ошибка:
Project Project1.exe raised exception class EVariantTypeCastError with message 'Could not convert variant of type (Null) into type (String)'. Process stopped...



А что, структура первой и второй таблици полностью совпадает? тогда какой смысл держать в базе 2 одинаковых таблицы?
Обычно подобная ошибка возникает при попытке считать из поля таблицы значение которое равно NULL. Возможно какой то глюк самого компонента - не знаю со стандартным ДБГридом давно не работаю а эксперементировать в облом. Попробуйте выполнить:

 
Код:
ADOTable1->Active=false;        
DBGrid1->DataSource = NULL;                      
ADOTable1->TableName=Edit1->Text;
ADOTable1->Active=true;
DBGrid1->DataSource = DataSource1;

или очистить список колонок DBGrid
 
Код:
DBGrid1->Columns->Clear();

кроме того - проверьте в коде что вы не обращетесь ни к какому из полей таблицы помимо DBGrid.
Т.е. если гдето есть подобный код:
 
Код:
Edit2->Text = Table1->FieldByName("field1")->AsString;

т.е. происходит чтение поля в какой либо компонент, то обязательно надо выполнять проверку на NULL
 
Код:
if(!Table1->FieldByName("field1")->IsNull)
Edit2->Text = Table1->FieldByName("field1")->AsString;

ну и справку почитайте.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог