Форум: "Базы";
Текущий архив: 2003.01.16;
Скачать: [xml.tar.bz2];
ВнизМетод 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.01 c