घर
Top.Mail.Ru Yandeks.Metrika
फोरम: "मामले";
वर्तमान संग्रह: 2004.06.20;
डाउनलोड करें: [xml.tar.bz2];

नीचे

एक ग्रिड के साथ मदद करें। इसी तरह की शाखाएँ खोजें


korvin   (2004-05-23 12:02) [0]

Имеется две таблицы. Ну скажем в одной Страны, в другой города и структура их пусть будет такой:
- Таблица стран:
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 для БД - не помогает. Только переоткрытие и Локэйтом искать ту запись опять, но это геморой. Есть ли ещё способы?



KADAN ©   (2004-05-23 16:03) [1]

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



Domkrat ©   (2004-05-23 16:54) [2]

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



jack128 ©   (2004-05-23 16:55) [3]


> ID_Gorod नाव
> id_Strana नाव
оригинальное решение

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



Domkrat ©   (2004-05-23 16:55) [4]

आईडी - आमतौर पर पूर्णांक



Vlad ©   (2004-05-23 17:05) [5]


> Domkrat ©  


> जैक128 ©

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



jack128 ©   (2004-05-23 17:10) [6]


> ] Vlad ©   (23.05.04 17:05)

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



jack128 ©   (2004-05-23 17:11) [7]


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



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

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



Vlad ©   (2004-05-23 17:41) [9]

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

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


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

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


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

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

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



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

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

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

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



Vlad ©   (2004-05-23 19:45) [11]


> korvin   (23.05.04 19:28) [10]

что делаешь перед тем как происходит Post ?
Есть ли какие-то обработчики, т.е. Before/AfterPost или что-то подобное ?
Вобще, ситуация ненормальная конечно.



jack128 ©   (2004-05-23 19:50) [12]


> Select * from Strana, Gorod
> where Gorod.Id_Strana=Strana.Id_Strana
блин, народ, объясните мне, недалекому, какой InsertSQL может быть повешен на такой запрос??? В какую таблицу инсерт то делается?
И еще какой у тя RefreshSQL ?



Vlad ©   (2004-05-23 19:56) [13]


> jack128 © (23.05.04 19: 50) [12]

а что тут странного ?
При таких конструкциях обычно делают insert в детайл-таблицу, т.е. в справочник городов.
Однако, все-же неясно, почему после post обнуляется поле с наименованием, ведь если бы была связка мастер-детайл на клиенте, то можно было бы предположить нарушение ссылочной целостности, а так.... непонятно.



Наталия ©   (2004-05-24 06:35) [14]

व्लाड © (23.05.04 19: 45) [11]
После Insert сделай Refresh.
Или измени интерфейс для работы со странами-городами на Master-Details.



Johnmen ©   (2004-05-24 09:19) [15]

>korvin

1. Делать нецелочисленный суррогатный ключ - верный способ нажить большие неприятности.
2. Чтобы  не пропадало - вкл.кеширование лукап поля.



Vlad ©   (2004-05-24 11:45) [16]


> नतालिया © (24.05.04 06: 35) [14]
> व्लाड © (23.05.04 19: 45) [11]
> После Insert сделай Refresh.

Спасибо, обязательно последую Вашему совету
:-)



jack128 ©   (2004-05-24 18:06) [17]


> [14] नतालिया © (24.05.04 06: 35)
> व्लाड © (23.05.04 19: 45) [11]
> После Insert сделай Refresh.
он и так делается. Если, конечно InsertSQL прописан.

> Или измени интерфейс для работы со странами-городами на
> Master-Details.
это да. Я себе слабо представляю, кому могут понадобиться рзультаты такого запроса. Хотя как знать, конечно...



korvin   (2004-05-25 08:54) [18]

jack128 © (23.05.04 19: 50) [12]
Уточню - таблица стран в качестве справочной, а главная - города. Инсерт и Рефреш относятся только к её полям:
Рефреш:
चुनते हैं
 ID_Gorod,
 ID_Strana,
 Gorod_Name
from Gorod
जहां
 ID_Gorod = :ID_Gorod

Инсерт:
insert into Gorod
 (ID_Gorod, ID_Strana, Gorod_Name)
मानों
 (:ID_Gorod,:ID_Strana, :Gorod_Name, :Gorod_Name)

Полное закоментирование всех процессов в Бэфор и Афтер Пост проблемы не решает как и выполнение Рефреша принудительно.
Повторюсь: чисто при выполнении POST для этого запроса очищается видимое значение поля названия страны ...

К обсуждению применённого формата float - специально заменял на integer (для чистоты эксперимента везде) и ничего это не меняет.



korvin   (2004-05-25 08:56) [19]

jack128 © (24.05.04 18: 06) [17]

Прошу прощения, но вообще-то мой проект более огромный, чем справочник городов и работает он уже 2 года в интенсивном режиме. Города и страны вообще к нему отношения не имеют и были выбраны мной просто как показательный пример проблемы.



Sergey13 ©   (2004-05-25 09:24) [20]

2korvin   (25.05.04 08:54) [18]
А как заполняется поле GOROD.ID_GOROD? Что делается перед POST? Как вообще происходит вставка - в гриде или с отдельной формы?



Sergey13 ©   (2004-05-25 09:52) [21]

2korvin   (25.05.04 08:54) [18]
А если в Рефреш написать
Select * from Strana, Gorod
where Gorod.Id_Strana=Strana.Id_Strana
and  ID_Gorod = :ID_Gorod

или, что правильнее, с указанием полей вместо *



korvin   (2004-05-25 14:22) [22]

सर्गेईएक्सएनयूएमएक्स © (एक्सएनयूएमएक्स एक्सएनयूएमएक्स: एक्सएनयूएमएक्स) [एक्सएनयूएमएक्स]
Заолняется на форме в верхней части экрана, а нижняя часть того же окна - это табличное отображение записей. Вот в таблице то и исчезает значение этого поля.

सर्गेईएक्सएनयूएमएक्स © (एक्सएनयूएमएक्स एक्सएनयूएमएक्स: एक्सएनयूएमएक्स) [एक्सएनयूएमएक्स]
Пробовал наспех и такое, но ошибок кучу выдавало особенно при открытии почему-то ... Но буду ещё разок ковырять в том же направлении (что-то в этом есть, но вот "вымучить" такую связь придётся долго и нудно).



korvin   (2004-05-27 11:42) [23]

Уважаемые мастера, зашёл в тупик с решением данной проблемы.
Посему создал работающий, упрощённый пример и выложил его по адресу http://www.magnus.kiev.ua/~korvin/Goroda.zip
Весит всего 42Kb (в архиве исходники, база на IB, и файлик с пояснениями).

Очень прошу оказать помощь.



Sergey13 ©   (2004-05-28 09:00) [24]

2korvin   (27.05.04 11:42) [23]
У меня нормально открылся только датамодуль (я работаю на Д5+ФБ1.5 из-за этого). Поэтому смотрел только его. Нашел неоднозначность полей в твоем основном и рефреш запросе к городам (у меня он вообще в дизайне не открывался с указанием именно ошибки неоднозначности). Т.е. и город и страна имеют поле ИД_СТРАНА, в запросах ты пишешь * вместо полей, а в наборе полей датасета всего 1 ИД_СТРАНА (а должны по идее быть 2 - из каждой таблицы). При обновленнии записи программа может просто не понимать каким ИД_СТРАНА надо пользоваться. Перепиши запросы с конкретными с полями. Т.е. укажи  одинИД_СТРАНА из таблицы город.



korvin   (2004-05-28 16:32) [25]

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

Ну да ни это главное. Всё по тому же адресу выложил обновлённую версию програмки с внесёнными изменениями (как советовал Sergey13) + экзешник, чтоб без компиляции увидеть глюк.

http://www.magnus.kiev.ua/~korvin/Goroda.zip
http://www.magnus.kiev.ua/~korvin/Goroda_exe.zip



Sergey13 ©   (2004-05-28 17:07) [26]

2korvin   (28.05.04 16:32) [25]
Опять смог открыть только датамодуль из-за д5. Вроде исправил. Но как то странно ведет себя программа при добавлении. Описываю что происходит у меня. При нажатии на "добавить" меняется текущее название города (?), исчезает название страны, и (!!!) появляется новая строка, как при вводе данных вручную в гриде (в режиме редактирования). При "Подтвердить" новая строка перходит в нормальный режим и остается пустой. При "переоткрытии" пустая новая строка исчезает. Вот такая бодяга. Где то ты чего то напутал, но формы у меня не открываются, поэтому посмотрел только код. Для добавления непустой записи просто DM.DSGorod.Append маловато вроде. Надо бы и значения присваивать полям то. Хотя может я чего, не видя, не разобрал.



jack128 ©   (2004-05-28 20:11) [27]


> Прошу прощения, но вообще-то мой проект более огромный,
> чем справочник городов и работает он уже 2 года в интенсивном
> режиме.
Да ладно, это не наезд был, я ж сказал, что возможно кому то нужно именно такое представление.

А с добавлением записи у тебя проблем нет? После перевода исходников под пятёрку и компиляции исходников вот какая бага выходит. В режиме Append грид просто игнорирует  введенные символы.

И еще (частично связанное с первым глюком)

У тя в грид выводится поля GOROD_NAME и STRANA_NAME, а в InsertSQL написано  insert into GOROD
 (ID_GOROD, STRANA, GOROD_NAME)
मानों
 (:ID_GOROD, :STRANA, :GOROD_NAME)  совсем другое поле..Поле STRANA у тя негде не задается..(по крайней мере я не увидел...)



jack128 ©   (2004-05-28 21:26) [28]


> korvin  
я тут те письмецо отправил, мыло проверь..



korvin   (2004-05-28 21:36) [29]

सर्गेईएक्सएनयूएमएक्स © (एक्सएनयूएमएक्स एक्सएनयूएमएक्स: एक्सएनयूएमएक्स) [एक्सएनयूएमएक्स]
Честно говоря не знаю, как ведёт себя данный код под 5-м, но под 6-м у меня не выдаёт ни одной ошибочки. Добавдение строки я не отрабатывал в этом тренировочном проекте, но в процессе подготовки обнаружил, что название страны исчезает даже при простом обновлении Refresh.
Для этого на форме городов создал кнопки Рефреша и переоткрытия таблицы.
Если несложно, посмотрите на экзешник - как это работает у меня.



korvin   (2004-05-28 23:14) [30]

jack128 © (28.05.04 21: 26) [28]
Попробовал твой пример доработать своими функциями и действительно работает ... Побежал разбирать подробнее.

आपका धन्यवाद।



पन्ने: 1 पूरी शाखा

फोरम: "मामले";
वर्तमान संग्रह: 2004.06.20;
डाउनलोड करें: [xml.tar.bz2];

ऊपर





मेमोरी: 0.68 एमबी
समय: 0.069 c
3-1085564877
Reostat
2004-05-26 13:47
2004.06.20
Настройка подключения к базе находящейся на другой машине


1-1086603969
एलेक्सी
2004-06-07 14:26
2004.06.20
कैसे एक TListItem फ़ाइल को बचाने के लिए


14-1086256838
ilnarab
2004-06-03 14:00
2004.06.20
खोया हुआ स्रोत


14-1086424564
Dimman123
2004-06-05 12:36
2004.06.20
होम नेटवर्किंग लेख


1-1086291679
neteditor
2004-06-03 23:41
2004.06.20
वैरिएंट का वेरिएंट ऐरे





अफ्रीकी अल्बानियन अरबी भाषा अर्मेनियाई आज़रबाइजानी बस्क बेलारूसी बल्गेरियाई कैटलन सरलीकृत चीनी) चीनी पारंपरिक) क्रोएशियाई चेक डेनिश डच अंग्रेज़ी एस्तोनियावासी फिलिपिनो फिनिश फ्रेंच
गैलिशियन् जॉर्जियाई जर्मन यूनानी हाईटियन यहूदी हिंदी हंगरी आइसलैंड का इन्डोनेशियाई आयरिश इतालवी जापानी कोरियाई लात्वीयावासी लिथुआनियाई मेसीडोनियन मलायी मोलतिज़ नार्वेजियन
फ़ारसी पोलिश पुर्तगाली रोमानियाई रूसी सर्बियाई स्लोवाक स्लोवेनियाई स्पेनिश स्वाहिली स्वीडिश थाई तुर्की यूक्रेनी उर्दू वियतनामी वेल्श यहूदी बंगाली बोस्नियाई
सिबुआनो एस्पेरांतो गुजराती हौसा हमोंग ईग्बो जावानीस कन्नड़ खमेर लाओ लैटिन माओरी मराठी मंगोलियन नेपाली पंजाबी सोमाली तामिल तेलुगु योरूबा
ज़ुलु
Английский Французский Немецкий Итальянский Португальский Русский Испанский