![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Метод Seek -объявил забостовку (else сыканул) [D6, dBase, FoxPro]
Eugene_S © (2002-12-19 11:07:00)Доброе время суток всем.
Задаю вопрос повторно, т.к. в 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-24 09:27:00) [1]Там, правда, вылезут и таки варианты, когда 1 раз исправили через 11 дней после вставки, второй - через 11, в третий - через 11. Вылезет строка "исправлено после вставки через 33 дня". :-)
Eugene_S (2002-12-24 09:22:00) [2]Вот она чужая ЭВРИКА! Все верно и похоже у меня все arbieten. Вопрос снят. Grand merci to W.
ЮЮ (2002-12-24 09:12:00) [3]Я чёй-то наверное не догоняю, но почему не сделать одним запросом:
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 08:49:00) [4]Я чёй-то наверное не догоняю, но цикл необходим для выяснения - когда была вставка, когда была модификация, какой интервал м-у ними по дням и если он(интервал) > месяца, то презренный user сделавший modif must die. >:-)
ЮЮ (2002-12-24 08:28:00) [5]>Напрашивается создать структуру Master->Detail (1 ко многим) и приспокойно moveиться себе до сканчания века.:-)
Естественно, при переходе на новую запись переоткрывается Detail.
А что ты там такого собираешься делать в цикле? А почему просто не открыть один запрос с ORDER BY ID, operation, OpDate ? И пройтись одним циклом?
Eugene_S (2002-12-24 08:13:00) [6]Спасибо за урок. Но как это по времени?
ЮЮ (2002-12-24 07:48:00) [7]>Но вся хитрость в необходимости проиндексировать поле скажем 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 ...
И бегои до самого урюпинска :-)
Наталия (2002-12-24 06:39:00) [8]При перемещении в Master-наборе делать запрос для отображения детальных записей только для DataSet1.NREC.
Eugene_S (2002-12-24 06:16:00) [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!
Anatoly Podgoretsky (2002-12-19 11:54:00) [10]Даже не совсем о поиске, сколько о перемещинии курсора на точную запись, поиск это ближе к Locate, а Lookup вообще из другой оперы.
Val (2002-12-19 11:45:00) [11]>Eugene_S ©
С SQL такая история:..
кажется сначала вопрос состоял о поиске записи, теперь об индексации и связях, так что же вы, все-таки, хотите?
Johnmen (2002-12-19 11:45:00) [12]SQL, SQL и SQL, как завещал Великий Программер !
И не понятно, какая связь между индексированием и дальнейшей связью ?
Наталия (2002-12-19 11:41:00) [13]Ты запросом не DataSet создавай, а ИЩИ нужные записи :)
Eugene_S (2002-12-19 11:35:00) [14]Это не ответ. Зачем расписываться за все комьюнити?
ЮЮ (2002-12-19 11:30:00) [15]Ну тогда к ЗНАХАРЯМ. МАСТЕРА отдыхают :-)
Eugene_S (2002-12-19 11:24:00) [16]С SQL такая история: даю запрос к базе и создаю DataSet. Пробовал программно индексировать его в памяти для дальнейшей связи с другим набором по принцыпу родитель-потомок. Увы. Компилер ругается 6-этажными исключениями:-(. Короче SQL не проходит.
ЮЮ (2002-12-19 11:11:00) [17]Пора начинать изучать SQL и позабыть о ADOTable и TTable.