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-28 23:14:00) [1]

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

Благодарствую.


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

Sergey13 ©   (28.05.04 17:07) [26]
Честно говоря не знаю, как ведёт себя данный код под 5-м, но под 6-м у меня не выдаёт ни одной ошибочки. Добавдение строки я не отрабатывал в этом тренировочном проекте, но в процессе подготовки обнаружил, что название страны исчезает даже при простом обновлении Refresh.
Для этого на форме городов создал кнопки Рефреша и переоткрытия таблицы.
Если несложно, посмотрите на экзешник - как это работает у меня.


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


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


jack128   (2004-05-28 20:11:00) [4]


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

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

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

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


Sergey13   (2004-05-28 17:07:00) [5]

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


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

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

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

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


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

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


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

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

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


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

Sergey13 ©   (25.05.04 09:24) [20]
Заолняется на форме в верхней части экрана, а нижняя часть того же окна - это табличное отображение записей. Вот в таблице то и исчезает значение этого поля.

Sergey13 ©   (25.05.04 09:52) [21]
Пробовал наспех и такое, но ошибок кучу выдавало особенно при открытии почему-то ... Но буду ещё разок ковырять в том же направлении (что-то в этом есть, но вот "вымучить" такую связь придётся долго и нудно).


Sergey13   (2004-05-25 09:52:00) [10]

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

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


Sergey13   (2004-05-25 09:24:00) [11]

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


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

jack128 ©   (24.05.04 18:06) [17]

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


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

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

Инсерт:
insert into Gorod
 (ID_Gorod, ID_Strana, Gorod_Name)
values
 (:ID_Gorod,:ID_Strana, :Gorod_Name, :Gorod_Name)

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

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


jack128   (2004-05-24 18:06:00) [14]


> [14] Наталия ©   (24.05.04 06:35)
> Vlad ©   (23.05.04 19:45) [11]
> После Insert сделай Refresh.
он и так делается. Если, конечно InsertSQL прописан.

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


Vlad   (2004-05-24 11:45:00) [15]


> Наталия ©   (24.05.04 06:35) [14]
> Vlad ©   (23.05.04 19:45) [11]
> После Insert сделай Refresh.

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


Johnmen   (2004-05-24 09:19:00) [16]

>korvin

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


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

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


Vlad   (2004-05-23 19:56:00) [18]


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

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


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


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


Vlad   (2004-05-23 19:45:00) [20]


> korvin   (23.05.04 19:28) [10]

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


Страницы:   1 2

Наверх

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