Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.03.20;
Скачать: [xml.tar.bz2];

Вниз

Проблема при создании lookUp поля   Найти похожие ветки 

 
RIV_   (2003-02-22 06:01) [0]

Вроде бы ответ должен быть простым но информации нигде не нашол...

Есть 2 таблицы:
Предприятия:
ID (Основной ключ)
Name
...
...

Связ Предприятие-предприятие
Predpr1_ID
Predpr2_ID
My_Memo (Memo)

Я связал их следующим образом Predpr1_ID->ID (Много к одному)
Получилось, что когда выбирается предприятие в DBGRID1, в DBGRID2 отображаются все записи ссылалающиеся на данное предприятие. Но поле Predpr2_ID ссылается на другое предприятие и его индекс нужно заменить именем предприятия, т.е. поставить в соответствие Name и Predpr2_ID. Я это сделал создав LookUp поле в Table2. Возникла проблема: Или возникает ошибка переполнения стека при попытке отредактировать поле Memo (точнее при выполнении post после редактирования) или приходится убирать LookUp поле, тогда все работает, но вместо второго имени предприятия пользователь видит ключ Predpr2_ID.

Ника не могу понять в чем дело. Если у кого-то было что-то подобное, пожалуйсто поделитесь информацией.



Есть 2 таблицы, связанные Следующим образом

по полю , я использовал Paradox


 
RIV_   (2003-02-22 06:05) [1]

2 последние строчки я написал нечаянно...


 
Zap1111   (2003-02-22 11:56) [2]

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

1. Создай во второй таблице лукап поле Предпр1_имя и свяжи его с
первой таблицей.
- KeyFields = Предпр1_ID;
- LookupDataSet = Companies;
- LookupFeyFields = Companies->ID
- LookupResultField = Companies->Name

2. Аналогично с Предпр2_Имя.

Все. Теперь в таблице если стаешь на поле Предпр1_имя, появляется віпадающий список


 
Shatun   (2003-02-22 13:58) [3]

Самый простой способ, это создать вторую таблицу, в смысле не в базе данных, а компонент TTable, только не забывай делать Refresh, для синхронизации, я делал, прогу работает до сих пор и не глючит, как не может глючить Paradox :))


 
Jee   (2003-02-24 09:07) [4]

В свойстве лукап поля поставь LookupCache := true


 
RIV_   (2003-03-02 01:19) [5]

Спасибо, теперь заработало, но возникла другая проблема: если изменить поле в lookup таблице, то его отбражение не меняется. Причем если выключить LookupCash то при попытку изменить это самое поле выдает dataset table2 is not in edit mode


form3.Table3.Insert; //<-тут появляется ошибка
form3.Table3.FieldByName("Predpr1_ID").AsInteger:=form3.Table1.FieldByName("ID").AsInteger;
form3.Table3.FieldByName("Predpr2_ID").AsInteger:=Table1.FieldByName("ID").AsInteger;
form3.Table3.Post;
form3.Table3.Insert;
form3.Table3.FieldByName("Predpr1_ID").AsInteger:=Table1.FieldByName("ID").AsInteger;
form3.Table3.FieldByName("Predpr2_ID").AsInteger:=form3.Table1.FieldByName("ID").AsInteger;
form3.Table3.Post;


Ошибка возникает при insert. Кто-нибудь знает как тут быть.

Извените, но я не понял насчет еще одной таблицы, как это осуществить?


 
RIV_   (2003-03-02 01:22) [6]

Извиняюсь за путаницу. Я выдернул код прямо из текста программы, там эта таблица обзывается table3 вместо table2


 
Johnmen   (2003-03-02 01:29) [7]

Вместо Table2 ставишь Query2 и в нем никаких лукапных полей !
А наименования получаешь в запросе.


 
RIV_   (2003-03-02 02:39) [8]

Большое спасибо всем, кто пытался мне помоч. Тепеь я сам разобрался. Привожу решение проблемы, может кому понадобится...

На ботытие AfterPost таблицы, в которой редактировалось поле
повесил обновление LookUp-ного поля (оно у меня четвертое,
считая с нуля).


procedure TForm3.Table1AfterPost(DataSet: TDataSet);
var
Bookmark1,
Bookmark2:Pointer;

begin
Bookmark1:=form3.Table1.GetBookmark;// Закладка в первой таблицы
Bookmark2:=form3.Table3.GetBookmark;// Закладка во второй таблицы

Table3.Fields[4].RefreshLookupList;// Обновляем lookUp поле
// В этот момент указатель
// устанавливается на первую
// запись в обоих таблицах

Table1.GotoBookmark(Bookmark1);// Переход на закладку в первой таблице
Table3.GotoBookmark(Bookmark2);// Переход на закладку во первой таблице

Table1.FreeBookmark(Bookmark1);// Освобождаем память под первой закладкой
Table3.FreeBookmark(Bookmark2);// Освобождаем память под второй закладкой
end;



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.03.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
1-64081
Кулешов
2003-03-09 20:43
2003.03.20
Как в TEdit вводить только числа?


14-64370
Dmitry Filippov
2003-03-05 16:33
2003.03.20
Архивация


14-64328
Вопрошающий
2003-03-04 09:51
2003.03.20
Шаблоны в Excel


1-64161
nkrainev
2003-03-03 15:44
2003.03.20
CGI-Delphi


7-64408
artdeveloper
2003-01-22 11:24
2003.03.20
Поймать вывод на принтер





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский