ADOTable1->Active=false;
DBGrid1->DataSource = NULL;
ADOTable1->TableName=Edit1->Text;
ADOTable1->Active=true;
DBGrid1->DataSource = DataSource1;
Отображение данных с ADOTable в DBGrid для разных таблиц
У меня приложение состоит из нескольких взаимосвязанных друг с другом компонентов:
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...
Я нашёл касяк!
Надо было писать имя таблицы в кавычках!
Извините за беспокойство.
Цитата: 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...
У меня приложение состоит из нескольких взаимосвязанных друг с другом компонентов:
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. Возможно какой то глюк самого компонента - не знаю со стандартным ДБГридом давно не работаю а эксперементировать в облом. Попробуйте выполнить:
Код:
или очистить список колонок DBGrid
Код:
DBGrid1->Columns->Clear();
кроме того - проверьте в коде что вы не обращетесь ни к какому из полей таблицы помимо DBGrid.
Т.е. если гдето есть подобный код:
Код:
Edit2->Text = Table1->FieldByName("field1")->AsString;
т.е. происходит чтение поля в какой либо компонент, то обязательно надо выполнять проверку на NULL
Код:
if(!Table1->FieldByName("field1")->IsNull)
Edit2->Text = Table1->FieldByName("field1")->AsString;
Edit2->Text = Table1->FieldByName("field1")->AsString;
ну и справку почитайте.