Форум: "Базы";
Текущий архив: 2008.05.18;
Скачать: [xml.tar.bz2];
ВнизОшибка добавления lookup поля в TADOTable Найти похожие ветки
← →
Fregl © (2007-12-10 17:31) [0]Вот есть 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. Заранее спасибо, лучше пример отправить и на почту
← →
FreGL © (2007-12-10 17:33) [1]структуры таблиц
ADOTable1 : ID :autoinc | VagonNumber :int | VagonType : int
ADOTable2 : ID :int | TypeName : int
← →
megabyte © (2007-12-11 11:08) [2]Совет: не используй ADOTable, используй ADODataSet. Напиши там запрос на получение всей таблицы, попробуй сделать дизайн-тайме все тоже самое(настроить лукап-поле), если будут ошибки, тогда пиши...
← →
ЮЮ © (2007-12-11 11:16) [3]Если в Design-е нет полей в "Редакторе полей", то твои мероприятия создадут именно 1-ое поле, и никакого VagonType не будет. Если намерен создавать ftLookup-поле именоо в RunTime, то сначала надо добавить все ftData поля.
← →
FreGL © (2007-12-11 15:39) [4]сделал все в рантайме, все работает, но при закрытии приложения вылетает ошибка
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;
в чем может быть запара?
← →
sniknik © (2007-12-11 15:55) [5]> в чем может быть запара?
а вот во всем этом "обработчике". ни одного нужного действия в нем нет. есть разрушения обьектов без очистки указателей, по которым после "пройдется" деструктор родителя вот и AV.
← →
FreGL © (2007-12-11 16:41) [6]ну ткни пальцем что надо сделать, пожалуста.
я не понимаю что я делаю не так.
нужно вызывать типа TField.clear?
← →
ЮЮ © (2007-12-13 05:12) [7]> нужно вызывать типа TField.clear?
Кому это надо при закрытии приложения?
> T1TypeName.DataSet:=nil;
> T1TypeName.Free;
Полагаешь при уничтожении DataSet-а элементы коллекции полей не будут уничтожены? Ошибаешься. Именно отсюда и AV. Сначала ты уничтожил, потом DataSet пытается.
> нужно вызывать типа TField.clear?
Тогда уж Clear method (TFields) , чем даструкторы. Хотя при закрытии приложения это лишнее.
← →
Fregl © (2007-12-13 12:44) [8]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 12:48) [9]> v kakuyu storonu nado rit?
Прочитать [7] (извини, что не в транслите) и убрать нафиг строки, приведенные в [4].
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2008.05.18;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.08 c