![]() |
|
|
![]()
|
|
| Fighter |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 810 Регистрация: 5.1.2005 Репутация: нет Всего: 2 |
Проблема такая. Вот у меня таблица, у которой поле название страны имеет тип целочисленного (это чтобы вязаться по id с таблицей, в которой как раз таки и содержится список со странами). Сначала для поиска страны я закрывал запрос. Писал SQL что-то типа
"SELECT FROM * ... WHERE ID_COUNTRIES = ' + Sender.AsString". Sender в данном случае - это поле, в которое нужно записать строку. Поначалу работает нормально. Зато потом, когда откроешь список стран и выберешь другую страну, то при перерисовке таблицы вместо нормальных значений на их место запишутся значения выбранного поля. Что делать? Можно конечно как я первый раз делать, но дело в том, что первый алгоритм он медленноватый, потому что нужно за один проход в зависимости от количества записей, но если записей на экране точно штук по 20 будет, то таблица будет открываться и закрываться по 20-40 раз. Это же медленно, или это не столь важно? |
|||
|
||||
| Savek |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 10.4.2006 Где: Воронеж Репутация: 7 Всего: 7 |
Не совсем понятна решаемая задача..
Возможно тебе нужен такой запрос на объединение
ЗЫ с синтаксисом мог ошибиться |
|||
|
||||
| Sansa |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 18.10.2006 Где: Королев Репутация: 2 Всего: 6 |
У DataSet есть такой метод DisableControls. При его вызове, отключается перерисовка связанных с ним визуальных компонентов. Вызываешь его, делаешь свои 20 запросов, а затем EnableControls. Выполнение последовательности запросов без перерисовки происходит гораздо быстрее.
P.S. Проблема действительно непонятно описана. --------------------
- Здравствуйте, я Ваш патологоанатом |
|||
|
||||
| Fighter |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 810 Регистрация: 5.1.2005 Репутация: нет Всего: 2 |
Короче, это подзадача другой задачи. Нужно хранить список адресов. Структура адресов такова, что для стран есть отдельная таблица в которой есть 2 поля (например, id_Country, Country_Name), для областей будет таблица с такой структурой (id_Region, id_Country, Region_Name). Для таблицы городов и улиц всё в том же духе. И вот, когда мы создали все эти таблицы мы ничинаем создавать таблицу с адресами. В таблица адресов состоит из полей Country_Name, Region_Name, City_Name, Street_Name, House_Number, Flat_Number - все это числа, т.е. это всё поля подстановки.
Проблема такая. Сами данные в таблице хранятся примерно в таком виде Country_Name, Region_Name, City_Name, Street_Name, House_Number, Flat_Number 1 2 1 3 1 2 1 1 1 2 2 1 4 2 3 3 4 4 И всё в этом духе. Понятно что программа должна в первых 5 полях отображать не числа а нормальные названия, которые как раз таки нужно брать из соответствующих таблиц. Данные перерисовать как-раз таки нужно будет. В общем, не важно что там дальше. Мне интересно другое. Дело в том, что я начал делать редактор справочников. Первый у меня попался справочник стран. Дело в том, что когда я первый раз добавил Россию в таблицу tbl_Countries, то Россия была уже там, далеко не второй и не третий раз. А он мне стал отображать Россию в тех записях на которые я кликну мышкой. Когда я удалю Россию, и вместо неё например, встанет Белоруссия, то теперь вместо всех стран которые там были станет страна Белоруссия. Я подозреваю это метод Locate, котой немного глючит. Дело в том, что хватит только выделить другую запись, как вместо всех стран станет название страны, запись с которой была выделена до этого. |
|||
|
||||
| Sansa |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 18.10.2006 Где: Королев Репутация: 2 Всего: 6 |
В твоем случае, вместо Locate следует использовать Lookup. Принципиальное отличие этих методов в том, что Locate сдвигает курсор базы данных на найденую позицию, а Lookup нет (он просто возвращает найденое значение). Еще лучше - Lookup Fields (посмотри в справке)
--------------------
- Здравствуйте, я Ваш патологоанатом |
|||
|
||||
| SergeBS |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 11 Всего: 22 |
Fighter,
Это намек. |
|||
|
||||
| Sansa |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 18.10.2006 Где: Королев Репутация: 2 Всего: 6 |
SergeBS, все в теме написано
--------------------
- Здравствуйте, я Ваш патологоанатом |
|||
|
||||
| SergeBS |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 11 Всего: 22 |
Sansa,
Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) Где? Fighter, Неверный подход. Вместо locate и т.п. нужно применять lookup fields. Т.е. строятся связи между таблицей-справочником и таблицей-получателем кодов из справочника. Короче - кому-то надо срочно читать умные книжки. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |