Поиск:

Ответ в темуСоздание новой темы Создание опроса
> AdoQuery.Locate неправильно находит запись. 
:(
    Опции темы
Fighter
Дата 5.1.2007, 02:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 810
Регистрация: 5.1.2005

Репутация: нет
Всего: 2



Проблема такая. Вот у меня таблица, у которой поле название страны имеет тип целочисленного (это чтобы вязаться по id с таблицей, в которой как раз таки и содержится список со странами). Сначала для поиска страны я закрывал запрос. Писал SQL что-то типа
"SELECT FROM * ... WHERE ID_COUNTRIES = ' + Sender.AsString". Sender в данном случае - это поле, в которое нужно записать строку. Поначалу работает нормально. Зато потом, когда откроешь список стран и выберешь другую страну, то при перерисовке таблицы вместо нормальных значений на их место запишутся значения выбранного поля. Что делать?

Можно конечно как я первый раз делать, но дело в том, что первый алгоритм он медленноватый, потому что нужно за один проход в зависимости от количества записей, но если записей на экране точно штук по 20 будет, то таблица будет открываться и закрываться по 20-40 раз. Это же медленно, или это не столь важно?
PM MAIL   Вверх
Savek
Дата 5.1.2007, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 10.4.2006
Где: Воронеж

Репутация: 7
Всего: 7



Не совсем понятна решаемая задача..
Возможно тебе нужен такой запрос на объединение

Код

select t1.field1, .. t2.Countries from MyTable t1 
left join CountryTable t2 
on t1.ID_Country=t2.ID


ЗЫ с синтаксисом мог ошибиться
PM MAIL   Вверх
Sansa
Дата 5.1.2007, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 18.10.2006
Где: Королев

Репутация: 2
Всего: 6



У DataSet есть такой метод DisableControls. При его вызове, отключается перерисовка связанных с ним визуальных компонентов. Вызываешь его, делаешь свои 20 запросов, а затем EnableControls. Выполнение последовательности запросов без перерисовки происходит гораздо быстрее.

P.S. Проблема действительно непонятно описана. 
--------------------
- Здравствуйте, я Ваш патологоанатом
PM MAIL ICQ   Вверх
Fighter
Дата 6.1.2007, 02:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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, котой немного глючит. Дело в том, что хватит только выделить другую запись, как вместо всех стран станет название страны, запись с которой была выделена до этого. 
PM MAIL   Вверх
Sansa
Дата 8.1.2007, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 18.10.2006
Где: Королев

Репутация: 2
Всего: 6



В твоем случае, вместо Locate следует использовать Lookup. Принципиальное отличие этих методов в том, что Locate сдвигает курсор базы данных на найденую позицию, а Lookup нет (он просто возвращает найденое значение). Еще лучше - Lookup Fields (посмотри в справке)
--------------------
- Здравствуйте, я Ваш патологоанатом
PM MAIL ICQ   Вверх
SergeBS
Дата 10.1.2007, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 11
Всего: 22



Fighter, 
Цитата

Обязательно указание:
1. Базы данных (Paradox, Oracle и т.п.)
2. Способа доступа (ADO, BDE и т.д.)

Это намек.
PM MAIL   Вверх
Sansa
Дата 10.1.2007, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 18.10.2006
Где: Королев

Репутация: 2
Всего: 6



SergeBS, все в теме написано 
Цитата

AdoQuery.Locate неправильно находит запись

--------------------
- Здравствуйте, я Ваш патологоанатом
PM MAIL ICQ   Вверх
SergeBS
Дата 12.1.2007, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 11
Всего: 22



Sansa, 
Обязательно указание:
1. Базы данных (Paradox, Oracle и т.п.)
Где?

Fighter, 
Неверный подход. Вместо locate и т.п. нужно применять lookup fields. Т.е. строятся связи между таблицей-справочником и таблицей-получателем кодов из справочника. Короче - кому-то надо срочно читать умные книжки.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0570 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.