Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка добавления lookup поля в TADOTable [D7, ACCESS]


Fregl ©   (2007-12-10 17:31:00) 

Вот есть 2 таблички в access файле.(Номера вагонов,типы вагонов)
в одной хранится id;серийный номер вагона;тип вагона
во второй id;название типа.
и мне надо добавить lookup поле в первую таблицу, что бы выводило строкой имя типа вагона, а не id типа.
средствами IDE сделать не получается, так как после того если законектиться к БД в design mode сразу начинает вылетать ошибка wrong enum value или что то типа того, и проект сохранить нельзя, тока закрыть делфи. делфи 7,глючит АДО..

вобщем решил в рантайме создать поле и присоединить к таблице, вот как это я делаю при создании формы

 ADOTable1.TableName:='VagonNumbers'; это номера вагонов
 ADOTable2.TableName:='VagonTypes'; это типы вагонов

 T1TypeName:=TStringField.Create(Self);
 T1TypeName.FieldKind:=fkLookUP;
 T1TypeName.FieldName:='T1TypeName';
 T1TypeName.DataSet:=ADOTable1;
 T1TypeName.KeyFields:='VagonType';
 T1TypeName.LookupKeyFields:='ID';
 T1TypeName.LookupResultField:='TypeName';
 T1TypeName.LookupDataSet:=ADOTable2;

 DBGrid1.Columns[0].FieldName:='ID';
 DBGrid1.Columns[1].FieldName:='VagonNumber';
 DBGrid1.Columns[2].FieldName:='T1TypeName';
 DBGrid2.Columns[0].FieldName:='ID';
 DBGrid2.Columns[1].FieldName:='TypeName';

при попытке открыть таблицу1 вылетает ошибка - не найдено поле VagonType! Хотя это поле в таблице присутсвтует.
Вобщем я уже запутался, в хелпе ничего конкретного.
Посоветуйте как быть или выложите исчерпывающий пример для добавления собственного lookup поля в ADOTable. Заранее спасибо, лучше пример отправить и на почту


ЮЮ   (2007-12-13 12:48:00) [1]

> v kakuyu storonu nado rit?

Прочитать [7] (извини, что не в транслите) и убрать нафиг строки, приведенные в [4].


Fregl   (2007-12-13 12:44:00) [2]

Gospoda, u menya opita raboti s BD v delphi k sojaleniyu ne tak mnogo, poetomu skajite kak nujno sdelat? v kakuyu storonu nado rit?


ЮЮ   (2007-12-13 05:12:00) [3]

> нужно вызывать типа TField.clear?

Кому это надо при закрытии приложения?


> T1TypeName.DataSet:=nil;
> T1TypeName.Free;


Полагаешь при уничтожении DataSet-а элементы коллекции полей не будут уничтожены? Ошибаешься. Именно отсюда и AV. Сначала ты уничтожил, потом DataSet пытается.

> нужно вызывать типа TField.clear?

Тогда уж Clear method (TField s) , чем даструкторы. Хотя при закрытии приложения это лишнее.


FreGL   (2007-12-11 16:41:00) [4]

ну ткни пальцем что надо сделать, пожалуста.
я не понимаю что я делаю не так.
нужно вызывать типа TField.clear?


sniknik   (2007-12-11 15:55:00) [5]

> в чем может быть запара?
а вот во всем этом "обработчике". ни одного нужного действия в нем нет. есть разрушения обьектов без очистки указателей, по которым после "пройдется"  деструктор родителя вот и AV.


FreGL   (2007-12-11 15:39:00) [6]

сделал все в рантайме, все работает, но при закрытии приложения вылетает ошибка
Access violation at 0000000, read of address 000000.
не пойму почему. вроде все корректно закрывается, в formdestroy ставлю такой вот обработчик

 T1TypeName.DataSet:=nil;
 T1VagonNumber.DataSet:=nil;
 T1VagonType.DataSet:=nil;
 T2ID.DataSet:=nil;
 T2TypeName.DataSet:=nil;
 T1TypeName.Free;
 T1VagonNumber.Free;
 T1VagonType.Free;
 T2ID.Free;
 T2TypeName.Free;

в чем может быть запара?


ЮЮ   (2007-12-11 11:16:00) [7]

Если в Design-е нет полей в "Редакторе полей", то твои мероприятия создадут именно 1-ое поле, и никакого VagonType не будет. Если намерен создавать ftLookup-поле именоо в RunTime, то сначала надо добавить все ftData поля.


megabyte   (2007-12-11 11:08:00) [8]

Совет: не используй ADOTable, используй ADODataSet. Напиши там запрос на получение всей таблицы, попробуй сделать дизайн-тайме все тоже самое(настроить лукап-поле), если будут ошибки, тогда пиши...


FreGL   (2007-12-10 17:33:00) [9]

структуры таблиц
ADOTable1 : ID :autoinc | VagonNumber :int | VagonType : int
ADOTable2 : ID :int        | TypeName : int


Наверх

Титульная страница Поиск, карта сайта Написать письмо