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

 
Динамическое создание TADOTable, И связь с существующей таблицей
Jojobets
Отправлено: 06.06.2005, 10:52


Ученик-кочегар

Группа: Участник
Сообщений: 16



Визуально-все просто. Кинул на форму компоненты TADOConnection, TADOTable. Настроил подключение к существующей таблице, добавил поля в редакторе полей. И можно работать.
Однако при динамическом создании таблицы возникают проблемы.
Допустим,


TADOTable *tab1=new TADOTable(Form1);
tab1->Connection=con1;
tab1->TableName="existingtablename";

Не смотря на указание свойства TableName связи между tab1 и существующей таблицей (existingtablename) нет.
Как их связать? sad.gif
Konstantine
Отправлено: 06.06.2005, 11:21


Мастер участка

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



а open() ?
если можешь — код давай
Guest
Отправлено: 06.06.2005, 11:34


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







Работает
CODE

void __fastcall TForm1::Button1Click(TObject *Sender)
{
TADOTable *tbl1 = new TADOTable(Form1);
tbl1->Connection = con1;
tbl1->TableName = "p8";
tbl1->Active = true;
DataSource1->DataSet = tbl1;
ShowMessage(1);
DataSource1->DataSet = NULL;
tbl1->Active = false;
delete tbl1;
}
Jojobets
Отправлено: 06.06.2005, 13:57


Ученик-кочегар

Группа: Участник
Сообщений: 16



попробуй добавить в таблицу tbl1 запись и увидишь, что ничего не работает
Guest
Отправлено: 06.06.2005, 15:03


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







Попробовал.
Действительно странно — все работает.
CODE

ADOTable2->Active = false;

TADOTable *tbl1 = new TADOTable(Form1);
tbl1->Connection = con1;
tbl1->TableName = "p8";
tbl1->Active = true;
DataSource1->DataSet = tbl1;

tbl1->Insert();
tbl1->FieldByName("Nom")->AsInteger = 22;
tbl1->Post();

ShowMessage(2);

DataSource1->DataSet = NULL;
tbl1->Active = false;
delete tbl1;

DataSource1->DataSet = ADOTable2;
ADOTable2->Active = true;

Скорее всего у вас проблемы с настройками соединения или доступа — похоже стоит RO.
Konstantine
Отправлено: 06.06.2005, 18:01


Мастер участка

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



посмотри ещё настройки ODBC, у меня недавно было там ReadOnly и на запись не работало, хотя вроде через него и не работал...
строка коннекта какая?
Jojobets
Отправлено: 06.06.2005, 21:34


Ученик-кочегар

Группа: Участник
Сообщений: 16



DataSource1->DataSet = tbl1;

Нафига здесь DataSource1?
AVC
Отправлено: 07.06.2005, 08:43


Ветеран

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



QUOTE

DataSource1->DataSet = tbl1;
Нафига здесь DataSource1?

Что бы наблюдать (в сетке) за происходящим.
Jojobets
Отправлено: 07.06.2005, 09:01


Ученик-кочегар

Группа: Участник
Сообщений: 16



Проблема такова, что при открытиии таблицы, в которой набор TFields пуст, выдается ошибка Could not convert variant of type (Null) into type (String).
AVC
Отправлено: 07.06.2005, 09:11


Ветеран

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



QUOTE

Настроил подключение к существующей таблице, ...
и
... таблицы, в которой набор TFields пуст ...

Как вам удалось создать таблицу без полей?

QUOTE

Could not convert variant of type (Null) into type (String)

Ну он действительно не может преобразовать Null к пустой строке. Можно сделать самому.

Обрисуйте порядок действий и проблему более точно.
PS. Лично я предпочитаю не работать с полями, созданными в редакторе полей, а пользуюсь методами FieldByName и FindField

Отредактировано AVC — 07/06/2005, 08:14
Jojobets
  Отправлено: 07.06.2005, 16:02


Ученик-кочегар

Группа: Участник
Сообщений: 16



Проблема: при запуске программе из под оболочки билдера (IDE) возникает ошибка (см вкладыш). Если запускать отдельно, никаких проблем. Файлы прилагаю.

Такая проблема исчезает, если в набор TFields таблицы добавить поля, причем неважно как — визуально или динамически. Это и есть глюк? Как его пофиксить?
sad.gif

User Attached Image Скачать файл
toforum.rar


AVC
Отправлено: 07.06.2005, 16:41


Ветеран

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



QUOTE

Проблема: при запуске программе из под оболочки билдера (IDE) возникает ошибка (см вкладыш). Если запускать отдельно, никаких проблем

Такое бывает если Builder пытается обработать ошибки раньше приложения. Посмотрите настройки Tools / Debugger Options / Os Exceptions. Я ставлю все user programm. Да и остальные вкладки посмотрите.
Файлы посмотрю (скорее всего только завтра).

Полистал — у меня 5 и не стоят многие из компонентов, имеющиеся у вас — следовательно не могу запустить exe или пересобрать существующий проект. По тексту unit1 сделаю свой такой же, а там посмотрим.

Отредактировано AVC — 07/06/2005, 15:42
AVC
Отправлено: 07.06.2005, 16:56


Ветеран

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



Сделал, ошибки получить не смог. Все работает нормально.
На всякий случай прилагаю проект.

User Attached Image Скачать файл
tojojo.rar


Jojobets
  Отправлено: 07.06.2005, 21:00


Ученик-кочегар

Группа: Участник
Сообщений: 16



Работает только таким образом (см. файл). Я там указал поставщика данных MS Jet 4.0. OLE DB Provider.
Если в качестве поставщика используется MS OLE DB Provider for ODBC Drivers, то возникает тот самый глюк, о котором я говорил.
Всем спасибо за помощь! smile.gif

User Attached Image Скачать файл
111.rar



Вернуться в Вопросы программирования в C++Builder