Типы программирования, программирование, языки программирования, книги программирование На сайте представлена информация про программирование в Интернете и работу  

Как Вы относитесь к курящим девушкам?
Как связать ADOTable с DBGrid (Delphi)?, MS Access
Сново запись данных в BD???!!!
Как Вы относитесь к курящим девушкам?
Пароль на DBase
DBF файл?????!!!!!!, ХОЧУ ЗНАТЬ!!!
Пропадают записи, в БД
База данных на ClientDataSet!!!???, процедуры работы с ClientDataSet???
Установка BDE, как правильно устанавливать BDE
TTable
Добавление или замена данных в BD????!!!!!!, ОЧЕНЬ НАДО!!!
Нашел старую лабу
Навигация в BDE
Delphi, BDE, Paradox, SQL запрос, как сделать запрос?
пароль, bde administrator
Параметры запроса, помогите
Подключение к БД.
Delphi+ADO
Как заставить БДЕ не откатываться?
Delphi, ADO, MS SQL 2000
Как определить номер текущей записи?, Использую Query (BDE). Sybase
Создание инсталляции для BDE, помогите
Case...of
Где найти примеры БД на Delphi, inside
База данных
Первая колонка в базе!, хелп!
BDE. Файл inmem000.rem, Почему "растет" файл inmem000.rem?
Delphi & MSAccess, Можно ли в Delphi работать с MSAccess?
Delphi, xml и БД
Огромная проблема с BDE администратором! под win2k
Ошибка в BDE Administrator
Access+SQL, Ошибка в запросе
Драйвера BDE, или как создать не Paradox
Как запустить программу деинсталляции?
пароль для поля таблицы, Help!!!
БД в Delphi 6
Нужна помощь по запросу, Динамический запрос
BDE, как она использует память
Locate по нескольким полям в TADOQuery, Delphi, "Invalid variant type conversation"
ADOQuery, CommandText does not return a result set
Пароль на базу данных, использую BDE и DataBase Desktop
Глюки BDE. Paradox., Пропадают данные.
Прямой SQL - запрос., Subj
MS Access 97 + пароль к ней + BDE
Вопрос о ресурсах..., ..................................
Переименование таблицы
Как создать копию db таблицы?
BDE Error: Index does not exist
Как Вы относитесь к курящим девушкам?
как добавлять, редактировать, удалять записи через, запросы SQL?
Ошибка в запросе SQL
Значение из таблицы
получения списка таблиц
Добавление изображений в базу, Подскажите пожалуста как это сделать
DBgrid - Clear, как очистить DbGrid
Событие OnFocus у Мемо?, Как сделать?
БД Paradox
Офигенно простой вопрос про TQuery
TADOQuery, Как объявить параметры в TADOQuery?
Delphi 5 & InterBase 6, Не могу создать хранимую процедуру
Как Вы относитесь к курящим девушкам?
Добавление в конец текста MS Word
Своё popup меню для браузера
TWebBrowser, FullScreen
И снова TWebBrowser, Размер шрифта
Word и компонент OleContainer, Отображаеться только одна страница
Как передать параметры с hml в ocx
HEX, FileStream
Несколько одинаковых страниц в Word, как создать?
TF1Book...

Платные хостинги     Раскрутка сайта     Книги по программированию


Delphi, BDE, Paradox, SQL запрос, как сделать запрос?

Только здесь 1000 посетителей на Ваш сайт всего за 3 у.е.!

- Дело в том, что я уже месяц делаю программу по японскому морю. Сущность в том, что бы проставить на карте точки и получить отчёт - скорости звука в этих точках на разных глубинах. Но, как вы понимаете, проставить точки на карте в точности в том месте, которому соответствует запись в БД нереально. Поэтому метод простой - подбираем ближайшую существующую точку в БД. Таблица данных имеет 1'200'000 записей. Структура:idlat - широтаlon - долготаdeep - глубинаvelo - скорость звукаbe - номер дня в году, с которого началось измерениеee - -||- в котором закончилось измерение (они все длились ровно месяц)Т.о. задача такова: вход: lat_u, lon_u - координаты точки пользователя в морских координатахНапример lat_u = 43.0lon_u = 134.0Выходlat_u = 43.3lon_u = 134.34Вот так господа

- Код Type  TSeaPosition = record    lat_u, lon_u: Real;  end;function GetRealSeaPosition(SeaPosition: TSeapPosition): TSeaPosition;begin  {Получаем первую ближайшую}  Query.SQL.Text := 'SELECT Max(lat) FROM Table WHERE lat <= :lat_u';  Query.ParamByName('lat_u').AsFloat := SeaPosition.lat_u;  Query.Open;  Query.Close;    Result.lat_u := Query.FieldByName('lat').AsFloat;  {Получаем вторую ближайшею точку}  Query.SQL.Text := 'SELECT Min(lat) FROM Table WHERE lat >= :lat_u';  Query.ParamByName('lat_u').AsFloat := SeaPosition.lat_u;  Query.Open;  Query.Close;  {Находим ближаушую точку}  if (SeaPosition.lat_u - Result.lat_u) > (Query.FieldByName('lat_u').AsFloat - SeaPosition.lat_u) then    Result.lat_u := SeaPosition.lat_u;  {тоже самое для lot_n}end;{далее где то используешь примерно так}var  RealPosition: TSeaPosition;begin  RealPosition.lat_u := 43.3;  RealPosition.lon_u := 134.4;  RealPosition := GetRealSeaPosition(RealPosition);  Query.SQL.Text := 'SELECT velo                                    FROM Table                                  WHERE lat = :lat_u                                       AND lon = :lon_u';  Query.ParamByName('lat_u').AsFloat := RealPosition.lat_u;  Query.ParamByName('lon_u').AsFloat := RealPostition.lon_u;  Query.Open;  Query.Close;  if not Query.IsEmpty then    ShowMessage(FloatToStr(Query.FieldByName('velo').AsFloat));end;highlightSyntax('sqlxZjdkO','sql');Примерно так - я не проверял это код, но думаю идея понятна. Да, и в функции GetRealSeaPosition нет проверки на случай если точка не будет найдена - учти это. Добавлено @ 19:33 И еще одно замечание - у тебя 1 200 000 записей в базе. Даже если ты сделаешь индекс по полям lat и lon, то учитывая что проверка идет на больше\меньше, то индесы работать не будут, если я правильно помню одну статью - прийдется тут чего то выдумывать. Это сообщение отредактировал <Spawn> - 22.8.2004, 20:00

- Спасибо, как проверю сразу сообщу.

- Да, работает. Но как тороз-з-з-з-ит! Около 7 секунд одну выборку! Лодку сто раз торпеда потопит, пока эта программа выдаст отчёт. (Шутка) Итого у меня получается 20 выборок.Тормоззз идёт две минуты. Это сообщение отредактировал Матроскин - 24.8.2004, 20:40

- Матроскин Думай чего то с индексами.

- Или ставь какой-нибудь SQL - они обычно заточены на базы и работают гораздо быстрее, чем локальные базы большого размера. У тебя все-таки более миллиона записей.

- Всё таки единственный выход, который я вижу это использование индексов. Как только найду решение сразу выложу.

- Мужики оно работает!Создаём комплексный индекс по полям Lat и Lon. Table1.IndexName := 'iLatLon'; Table1.FindNearest([SeaPosition.lat_u, SeaPosition.lon_u]);Ищет в доли секунды

Интернет казино     Онлайн игры     Увеличение члена     Купить DVD


Главная страница | программирование 1с учебник | программирование сотовых | офшорное программирование | примеры линейное программирование | анализ программирование | программирование делфи | cgi программирование | программирование atmel | школа программирования | типы программирования | практика программирования | программирование autocad | программирование профессиональное | обзор языков программирования | среда программирования delphi | задачи целочисленного программирования | характеристика языка программирования | стиль программирования | постановка задачи программирование | программирование серверов | программирование диплом скачать | применение программирования | Ссылки

Все про практика программирования