Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.22;
Скачать: CL | DM;

Вниз

Проблема с Lookup-полем   Найти похожие ветки 

 
bss   (2007-04-17 13:30) [0]

Я использую 3 таблицы: Сотрудники (Persons), Организации (Organizations), Подразделения (Departments)
Таблица Departments имеет ссылку на организацию (Organization_id)
Таблица Persons имеет ссылки Organization_id т Department_id.
Для показа в DBGrid делаю 2 lookup-поля - OrganizationName (связь между Persons и Organizations по Organization_ID) и DepartmentName (связь между Persons и Departments по Department_ID). При загрузке данные в гриде отображаются нормально, но при попытке отсортировать данные в столбцах или при переходе между записями в столбце DepartmentName начинают появляться какие-то "левые" значения. При закрытии окна и загрузке его заново все опять отображается нормально.
В чем может быть проблема?


 
Sergey13 ©   (2007-04-17 13:33) [1]

> [0] bss   (17.04.07 13:30)
> Таблица Persons имеет ссылки Organization_id т Department_id.

Зачем Organization_id если есть Department_id?


 
bss   (2007-04-17 13:35) [2]

Не для всех людей заносится информация о подразделении, например, для командировочных указывается только организация


 
Sergey13 ©   (2007-04-17 13:42) [3]

> [2] bss   (17.04.07 13:35)

А как относятся командировочные к сотрудникам? Что за предметная область?

> но при попытке отсортировать данные в столбцах

Каким образом?

> в столбце DepartmentName начинают появляться какие-то "левые" значения
Набор данных Department должен быть открыт и на него не должны накладываться никакие фильтры.


 
bss   (2007-04-17 13:47) [4]

На самом деле не сотрудники, а посетители в организацию, которым надо выписывать пропуска, а это могут быть как и постоянные сотрудники, так и временные или командировочные.
Сортировка по нажатию на заголовки столбцов. Считывается имя поля и добавляется в запрос ORDER BY <имя поля>


 
Sergey13 ©   (2007-04-17 14:01) [5]

> [4] bss   (17.04.07 13:47)
> и добавляется в запрос ORDER BY <имя поля>

И какое поле при сортировке дает такой результат? Любое?


 
bss   (2007-04-17 14:04) [6]

На самом деле "левые" значения в столбце DepartmentName появляются при любом действии с запросом (при попытке редактирвоать данные, при открытии его заново)


 
Sergey13 ©   (2007-04-17 14:26) [7]

> [6] bss   (17.04.07 14:04)
> На самом деле "левые" значения в столбце DepartmentName

А что значит "левые"? Должна быть "бухглтерия", а появляется "дирекция юмористических программ центрального телевидения"? Или что?


 
bss   (2007-04-17 14:29) [8]

похоже, что первые попавшиеся значения из справочника подразделений


 
Sergey13 ©   (2007-04-17 14:37) [9]

> [8] bss   (17.04.07 14:29)

Что значит "первые попавшиеся значения"? Первые 2, 3 , 10? Непонятно это как то все. Что делаешь со справочными наборами данных во время работы?


 
bss   (2007-04-18 13:37) [10]

Я заметила, что это происходит, когда в таблице Persons есть Organization_ID, а Department_ID=NULL или 0. Тогда на в столбце DepartmentName для этой строки появляются "левые" значения...


 
Sergey13 ©   (2007-04-18 14:21) [11]

> [10] bss   (18.04.07 13:37)
> а Department_ID=NULL или 0

Как это NULL или 0? NULL и 0 это абсолютно разные вещи.


 
bss   (2007-04-18 14:29) [12]

Null


 
Sergey13 ©   (2007-04-18 15:44) [13]

> [12] bss   (18.04.07 14:29)

Где то у тебя проблема с данными или с их интерпретацией, ИМХО. Если в поле NULL, то лукап-поле должно быть пустым.


 
Виталий Панасенко ©   (2007-04-18 16:58) [14]

не проще ли использовать EhLib - там для БДЕ есть поддержка сортировки(тоже добавляется ORDER BY судя по исходникам).. Возможно, реализовано более аккуратно. А, возможно,
> Sergey13 ©   (18.04.07 15:44) [13]

на 100% прав.Хотя
> Если в поле NULL, то лукап-поле должно быть пустым.

это не так.. для Paradox, например.


 
bss   (2007-04-18 17:07) [15]

база MySQL.
Насколько я понимаю, EhLib нельзя использовать для коммерческих программ. Или это не так?


 
Виталий Панасенко ©   (2007-04-18 17:19) [16]

до 3,5(или 6) можно.. да, 3,6(у меня) разрешает(нет прямого запрета или иных оговорок. только то, что граждане и организации бывшего СССР имеют право использовать бесплатно). а вот с 4-и нельзя


 
bss   (2007-04-20 13:34) [17]

На самом деле не отображаются правильно все lookup-поля в гриде, для которых ключевое поле в таблице Persons = Null или номеру, которого нет в справочнике, откуда отображается наименование в lookup-поле.
База данных - MySQL.
Компоненты доступа - ZeosDB
В чем может быть дело?


 
Sergey13 ©   (2007-04-20 13:47) [18]

> или номеру, которого нет в справочнике

Это как это? А ссылочная целостность напрочь отсутствует что-ли?


 
bss   (2007-04-20 13:57) [19]

временно удалялась, чтобы поэксперементировать. Так что такой ситуации быть не должно, а вот значение Null вполне возможно


 
Sergey13 ©   (2007-04-20 14:04) [20]

> [19] bss   (20.04.07 13:57)
> временно удалялась, чтобы поэксперементировать.

Странные у вас эксперименты.

> а вот значение Null вполне возможно
Я уже писал про интерпретацию данных на клиенте. Вполне вероятно, что NULL у вас транслируется в нечто "похожее", например в 0 или "".


 
bss   (2007-04-20 14:07) [21]

Как это можно обойти?


 
Sergey13 ©   (2007-04-20 14:10) [22]

> [21] bss   (20.04.07 14:07)

Найти то место в компонентах, где это происходит, и исправить. Но это, напомню, мое предположение, а не утверждение. И ни с Zeos-ом ни с мускулом я не работал.



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

Текущий архив: 2007.07.22;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.023 c
15-1182710878
FIL-23
2007-06-24 22:47
2007.07.22
сканер кода


2-1182774689
>>DEATH<<
2007-06-25 16:31
2007.07.22
Сообщения из трея


15-1182784402
antonn
2007-06-25 19:13
2007.07.22
проблемка с html


2-1183115310
Nikfel
2007-06-29 15:08
2007.07.22
Как нарисовать точку.


2-1182587570
Ezorcist
2007-06-23 12:32
2007.07.22
Расстояние между строками?