Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.015 c
14-49239
Wonder
2002-12-26 14:44
2003.01.16
В этом году вы увидите следующие серии фильма


1-49124
Mak$
2003-01-05 12:10
2003.01.16
Совет нужен !!!


3-48928
menart
2002-12-19 21:23
2003.01.16
SQL&Memo


3-48851
mrcat
2002-12-23 16:49
2003.01.16
Удаление данных


14-49319
Nimda
2002-12-26 16:28
2003.01.16
Age of Empires II





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский