Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.16;
Скачать: CL | DM;

Вниз

Метод Seek -объявил забостовку (else сыканул)   Найти похожие ветки 

 
Eugene_S ©   (2002-12-19 11:07) [0]

Доброе время суток всем.
Задаю вопрос повторно, т.к. в 1-ый раз МАСТЕРА дружно промолчали.
Я это объясняю не столько отсутствием интереса или знаний по предмету обсуждения, сколько разницей в часовых поясах. Очевидно, когда вопрос появился на форуме, все ЗНАХАРИ пребывали еще в «Realm Of Morpheus». Затем вопрос благополучно канул в пучине questов и responsов. И не убеждайте меня в обратном.
Итак, что ответит коллективный разум дельфийцев на простой вопрос:
Как максимально быстро найти запись в таблице dBase открытой с индексным файлом *.mdx, если метод Seek(bla-bla) объекта ADOTable1 нагло и бесцеремонно отказывается работать? Теже яйца и с BDE-шной TTable1. Причина со слов разработчиков в самих компонентах. И счастливыми обладателями «Волшебного Поиска» в Delphi 6 являются только MS Accessoвцы с ихним *.mdb (тоже зондер-комманда), т.к. для них на момент написания уготован OLE DB JET 4 Provider.
FoxPro и dBase отдыхают.
Методы Locate и LookUp прошу не предлагать по причине их медленности и огромности БД (>700000 записей).
С надеждой на взаимовыручку. Заранее благодарю за идеи.
P.S. Прошу 1000 пардонов за излишнее многословие.


 
ЮЮ ©   (2002-12-19 11:11) [1]

Пора начинать изучать SQL и позабыть о ADOTable и TTable.


 
Eugene_S ©   (2002-12-19 11:24) [2]

С SQL такая история: даю запрос к базе и создаю DataSet. Пробовал программно индексировать его в памяти для дальнейшей связи с другим набором по принцыпу родитель-потомок. Увы. Компилер ругается 6-этажными исключениями:-(. Короче SQL не проходит.


 
ЮЮ ©   (2002-12-19 11:30) [3]

Ну тогда к ЗНАХАРЯМ. МАСТЕРА отдыхают :-)


 
Eugene_S ©   (2002-12-19 11:35) [4]

Это не ответ. Зачем расписываться за все комьюнити?


 
Наталия ©   (2002-12-19 11:41) [5]

Ты запросом не DataSet создавай, а ИЩИ нужные записи :)


 
Johnmen ©   (2002-12-19 11:45) [6]

SQL, SQL и SQL, как завещал Великий Программер !
И не понятно, какая связь между индексированием и дальнейшей связью ?


 
Val ©   (2002-12-19 11:45) [7]

>Eugene_S ©
С SQL такая история:..
кажется сначала вопрос состоял о поиске записи, теперь об индексации и связях, так что же вы, все-таки, хотите?


 
Anatoly Podgoretsky ©   (2002-12-19 11:54) [8]

Даже не совсем о поиске, сколько о перемещинии курсора на точную запись, поиск это ближе к Locate, а Lookup вообще из другой оперы.


 
Eugene_S ©   (2002-12-24 06:16) [9]

Anatoly Podgoretsky> Даже не совсем о поиске, сколько о... Совершенно в дырочку излагаете коллега.
Дело в том, что задача немного сложнее.
1. Нужно раздолбать имеющуюся таблицу на два набора(в памяти конечно)- это не сложно при помощи СКУЛА. Критерий долбежки следующий: из общей таблицы в 1-ый набор попадают записи со значением поля operation="0"(insertion), во 2-ой operation="1" or "2"(modification or deletion)
2. Организовать цикл по 1-му набору и искать значения поля NREC во 2-ом наборе так, чтобы DataSet1.NREC = DataSet2.NREC.
Суть вся здесь: записей с "0" и "1" огромное количество.
Напрашивается создать структуру Master->Detail (1 ко многим) и приспокойно moveиться себе до сканчания века. Но вся хитрость в необходимости проиндексировать поле скажем DataSet2.ID в подчиненном наборе для создания связи. Здесь как говорят в Урюпинске и No Pasaran!


 
Наталия ©   (2002-12-24 06:39) [10]

При перемещении в Master-наборе делать запрос для отображения детальных записей только для DataSet1.NREC.


 
ЮЮ ©   (2002-12-24 07:48) [11]

>Но вся хитрость в необходимости проиндексировать поле скажем DataSet2.ID в подчиненном наборе для создания связи. Здесь как говорят в Урюпинске и No Pasaran!

Хитрость здесь не к чему, достаточно воспользоваться заложенными в компоненты свойствами:

MasterQuery.SQL.Text :=
"SELECT * FROM table WHERE operation = 0 ORDER BY ID";
MasterSource.DataSet := MasterQuery

DetailQuery.SQL.Text :=
"SELECT * FROM table WHERE ID = :ID and operation > 0";
DetailQuery.MasterSource := MasterSource;

MasterQuery.Open;
DetailQuery.Open;
While not MasterQuery.EOF do ...

И бегои до самого урюпинска :-)





 
Eugene_S ©   (2002-12-24 08:13) [12]

Спасибо за урок. Но как это по времени?


 
ЮЮ ©   (2002-12-24 08:28) [13]

>Напрашивается создать структуру Master->Detail (1 ко многим) и приспокойно moveиться себе до сканчания века. :-)
Естественно, при переходе на новую запись переоткрывается Detail.

А что ты там такого собираешься делать в цикле? А почему просто не открыть один запрос с ORDER BY ID, operation, OpDate ? И пройтись одним циклом?


 
Eugene_S ©   (2002-12-24 08:49) [14]

Я чёй-то наверное не догоняю, но цикл необходим для выяснения - когда была вставка, когда была модификация, какой интервал м-у ними по дням и если он(интервал) > месяца, то презренный user сделавший modif must die. >:-)


 
ЮЮ ©   (2002-12-24 09:12) [15]

Я чёй-то наверное не догоняю, но почему не сделать одним запросом:

select t1.SHIPS_ID, t1.OUT_BEGIN, t2.SHIPS_ID, t2.OUT_BEGIN from "_UTSFAKT.db" t1
left join "_UTSFAKT.db" t2
on t1.SHIPS_ID = t2.SHIPS_ID and t2.OUT_BEGIN > t1.OUT_BEGIN
Where t2.OUT_BEGIN - t1.OUT_BEGIN > 30


 
Eugene_S ©   (2002-12-24 09:22) [16]

Вот она чужая ЭВРИКА! Все верно и похоже у меня все arbieten. Вопрос снят. Grand merci to W.


 
ЮЮ ©   (2002-12-24 09:27) [17]

Там, правда, вылезут и таки варианты, когда 1 раз исправили через 11 дней после вставки, второй - через 11, в третий - через 11. Вылезет строка "исправлено после вставки через 33 дня". :-)



Страницы: 1 вся ветка

Текущий архив: 2003.01.16;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.02 c
1-49092
duke2
2003-01-02 07:06
2003.01.16
Вопрос знатокам формата RTF


14-49275
McSimm
2002-12-27 10:54
2003.01.16
Режим


3-48885
ruslanyd
2002-12-19 22:35
2003.01.16
Обновление Lookup полей


14-49306
Иксик
2002-12-28 10:18
2003.01.16
Поисковая система


6-49187
Nevel
2002-11-17 00:42
2003.01.16
Перевод даты из Unix