Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Lookupcombobox как правильно связать таблицы

Автор: Feagor 28.05.2010 15:18

Доброго времени суток,коллеги. Возникла такая проблема:
имеется 2 таблицы Tovar и Tovar_type, связанных через поле Type_id
Имеется форма добавления нового товара
                      ---------------------------
Название       |        dbedit1             
 |
                      ---------------------------

                      ---------------------------
Тип товара     | dblookupcombobox1 |
                      ---------------------------
adoconnection, adoquery1,adoquery2,datasource1,datasource2

adoquery1.sql.text='select * from Tovar'
adoquery2.sql.text='select * from Tovar_type'

в dblookupcombobox1 указываю datasource=datasource1,datafield=type_id,listsource=datasource2,lisfield=type(н
азвание типа),keyfield=type_id

необходимо чтобы через dblookupcombobox1 можно было выбрать тип товара по имени и вокнуть его айдишник в поле type_id в таблице tovar.

запускаем. вроде всё нормально, но при попытке изменить dblookupcombobox1 вылетает ошибка
Cannot access field 'Type_id' as type Variant

кто сталкивался с таким, подскажите как это поправить

з.ы. юзаю делфи 7 и sql server 2008
з.ы.ы. знаю в принципе как сделать через ж#пу, но хочется сделать нормально

Добавлено через 19 мин.
я так понимаю здесь идет несоответствие типов, dblookupcombobox берет id перебивает его в variant, и затем пытается воткнуть этот variant в type_id имеющий тип integer

Добавлено через 7 мин.
сменил в таблице Tovar тип Type_id с bigint на char, ошибка пропала, но это не дело. Вопрос теперь ставится по другому - как сделать чтобы dblookupcombobox1 передавало в поле Type_id не Variant, а integer?

Автор: Client 28.05.2010 20:44

попробуй указать только ListSource и поле для отображения (ListField вроде) - при выборе пункта указатель записей будет перемещаться, останется только выбрать значение поля из таблицы

Автор: Feagor 29.05.2010 14:43

видишь ли, надо чтобы он передавал по выбранному указателю значение в другую таблицу, какой смысл мне делать просто чтобы листать? если бы надо было просто листать значения я бы поставил стандартный tcombobox и не напрягался

Автор: volvo 29.05.2010 19:56

Странно, на Access-овской базе все работает без лишних телодвижений (они ж с MSSQL Server-ом одной крови...), без смены типа Type_ID... Правда изначально я в таблице Tovar_Type ключевое поле сделал типа AutoNumber, а соответствующее ему Tovar.Type_ID - типа LongInteger (проверял на D2009)

Автор: Client 29.05.2010 20:42

блин, или я пишу как-то не так или что, раз ты сам сказал что не получается взять значение автоматически, то бери это значение из таблицы. Лукап не просто пролистывает, он еще и указатель записей перемещает по таблице.
Ну тебе виднее что ты хочешь сделать. Удачи

Автор: Feagor 29.05.2010 22:14

Цитата(Client @ 29.05.2010 16:42) *

блин, или я пишу как-то не так или что, раз ты сам сказал что не получается взять значение автоматически, то бери это значение из таблицы. Лукап не просто пролистывает, он еще и указатель записей перемещает по таблице.
Ну тебе виднее что ты хочешь сделать. Удачи

при пролистывании он меняет указатель - это да. но так же он умеет осуществлять связь между 2 таблицами по ключевому полю,что мне и нужно.
Цитата

Странно, на Access-овской базе все работает без лишних телодвижений (они ж с MSSQL Server-ом одной крови...), без смены типа Type_ID... Правда изначально я в таблице Tovar_Type ключевое поле сделал типа AutoNumber, а соответствующее ему Tovar.Type_ID - типа LongInteger (проверял на D2009)


сделал в ацессе, действительно всё нормально передает,тут же переключаюсь на бд в sql servere и ошибка(((...странно

Добавлено через 3 мин.
вообще прикол. разобрался. ставлю вместо bigint - просто int и эврика, ошибки нету...принципиального отличия между int и bigint не вижу...странности к нам в дом идут

Автор: Feagor 29.05.2010 23:36

думаю тему можно закрыть за своей дальнейшей неактуальностью