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

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

Помогите с гридом. [D6, IB6.x]


Страницы:   1 2

korvin ©   (2004-05-23 12:02:00) 

Имеется две таблицы. Ну скажем в одной Страны, в другой города и структура их пусть будет такой:
- Таблица стран:
ID_Strana floaf
Strana_Name varchar(30)
- Таблица городов
ID_Gorod float
id_Strana float
Gorod_Name varchar(30)

Делаю запрос типа:
Select * from Strana, Gorod
where Gorod.Id_Strana=Strana.Id_Strana

Всё это хозяйство отображаю в гриде (точнее в dxDBGrid, хотя разницы наверное нет). И вот при выполнении Post для таблицы БД очищается видимое в Гриде поле Названия страны (хотя в базе с ним ничего не случается). Пробовал обойти заполнением этого поля при AfterScroll для БД - не помогает. Только переоткрытие и Локэйтом искать ту запись опять, но это геморой. Есть ли ещё способы?


korvin   (2004-05-23 19:28:00) [21]

Ребята, ID действительно взят в Флоат из-за предполагаемо большого количества записей и ничего кроме иногда Локэйта да связи между таблицами с ним не делается.

Для предложения по Квэри - у меня Интербэйсовская база.

Дело вобщем то не в ID, а в том, что поле названия из связанной по нему таблицы очищается (только на экране, в гриде) в момент выполнения Post. Само же поле если запросить в этот момент, то значение получим правильное. Вопрос, как не потерять этой информации в таком случае с экрана?


Vlad   (2004-05-23 17:41:00) [22]

> jack128 ©   (23.05.04 17:10) [6]
> Domkrat ©   (23.05.04 17:16) [8]

Я привел лишь один из "дешевых" (в смысле затрат на разработку) вариантов решения данной задачи.


> множество 0..MaxInt делят на диапазоны для каждого подразделения

Это недальновидное решение, потому как диапазона integer может не хватить, если таблица большая, к примеру бухгалтерские, банковские проводки.


> Вообще использую float можно нарваться на погрешности округления
>

Ну, вобще-то с ID-шниками обычно не производят никаких мат. операций, он служит лишь для поддержки ссылочной целостности.
В моем варианте, дробная часть ID представляет собой строго (к примеру) 4-х значный код подразделения
То есть процедура формирования ID возвращает нечто вроде такого: 23545677.0044  Конечно, если начать выполнять математические действия, с этим числом, можем нарваться на погрешность, но оно как правило не надо.

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


Domkrat   (2004-05-23 17:16:00) [23]

>а дробная часть - код подразделения в этом регионе
IMHO  это отдельная таблица, или хотябы разряды integer, bigint


jack128   (2004-05-23 17:11:00) [24]


> а-ля 1/3 * 3 = 1- может вернуть False


jack128   (2004-05-23 17:10:00) [25]


> ] Vlad ©   (23.05.04 17:05)

гм. Насколько я знаю(самому такое делать не доводилось) обычно в таких случаях просто множество 0..MaxInt делят на диапазоны для каждого подразделения. Вообще использую float можно нарваться на погрешности округления (а-ля 1/3 * 3 = 3 - может вернуть False) вот и получиться, что делаешь запрос where ID = 1 и нечего неполучешь, потому что у тя ID = 1.00000000000000000001 ...


Vlad   (2004-05-23 17:05:00) [26]


> Domkrat ©  


> jack128 ©  

Применение дробных идентификаторов мне известно в следующих случаях:
Когда есть центральный сервер, и есть множество локальных БД, к примеру в разных регионах. В конце дня регионы присылают копии своих локальных баз, и все их необходимо слить в этот центральный сервер. В этом случае целая часть - это уникальный ID в рамках одного региона, а дробная часть - код подразделения в этом регионе. В целом получается строгая уникальность.


Domkrat   (2004-05-23 16:55:00) [27]

ID - обычно integer


jack128   (2004-05-23 16:55:00) [28]


> ID_Gorod float
> id_Strana float
оригинальное решение

приведи запросы на InsertSQL


Domkrat   (2004-05-23 16:54:00) [29]

Сделать поле страна лукапным, селект Select * from GOROD


KADAN   (2004-05-23 16:03:00) [30]

Плохо понял, что именно требуется... возможно нужны методы
Query.Requery и Query.GotoBookmark


Страницы:   1 2

Наверх

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