Поиск с помощью метода Seek() в ADODB.RecordSet #372547


#0 by rino
Здравствуйте. Подскажите пожалуйста, как делать поиск с помощью метода Seek, знаю что нужно установить индекс а после вызваь функцию. Но, где не лазию не могу найти аргументы этой функции, что нужно подставлять туда??? Работаю с MSSQL, нужен быстрый поиск в таблице, при этом он будет повторятся многократно в цикле. Заранее спасибо.
#1 by smaharbA
ищи на форуме, недавно разбирали
#2 by skunk
#3 by rino
БДТблДок.Seek(Сред(ВРег(Док.Вид),1,50),1); {C:ПРОГРАММЫ ВЫГРУЗКИКОПИЯ ВЫГРУЗКА 1С 7.7 SQL.ERT}: ADODB.Recordset: Текущий проводник не поддерживает необходимый интерфейс для функции Index вот такую ошибку пишет, что может быть? индекс устанавливал перед открытием таблицы.
#4 by Sadovnikov
Зачем тебе в скуле Seek??
#5 by Sadovnikov
Зачем тебе в семерке ADODB.RecordSet ??
#6 by rino
в 1с версии 7.7 не существует (как мне кажется) единого справочника видов документов. Поэтому я его получаю с помощью объекта Документ. А он возвращает все виды документов вперемешку с дублями за период, который я указываю. Вообщем, чтобы виды были уникальны, то прежде чем занести очередной вид в таблицу,  я проверяю, есть ли он там или нет. Для этого делаю поиск по таблице. Разумеется все это происходит в цикле, в котором обрабатывается минимум 1500 записей. И как показал SQL, если делать SELECT получается долго. Мб есть другние варианты или я не прав в чем то?
#7 by Sadovnikov
Ну-ка еще раз всю задачу опиши? А то что-то не совсем ясно, что ты делаешь. И что такое, например, "единого справочника видов документов" ?
#8 by Voronve
вот так список документов конфы получить.
#9 by rino
Вообщем так. Напишу более подробно, потому как подобным способом решается задача во многих местах программы. Уйдем от документов. Есть таблица, в которую мне нужно заносить данные так, чтобы они там были уникальны по какому либо полю. Например мне нужно сформировать таблицу видов документов (выписка, счета фактура, накладная расход....). На входе я получаю результат выборки из глобальному объекта "Документ". В нем, я получаю все виды документов, которые есть в проводках и операциях за заданный мною период. Очевидно там есть дубликаты ( т.е. может быть так : выписка, счет, выписка, выписка, платежное поручение, выписка, платежное поручение....). А записать в таблицу мне нужно - выписка, счет, платежное поручение... Вот, для этого, прежде чем заносить в таблицу значение, я проверяю, есть ли оно там или нет. Вот, так понятно??? подобным способом я делаю проверку и для других таблиц. Но, это было когда я использовал XBase использую Ключ (НайтиПоКлючу), а сейчас нужно сделать ту же прогу, тока чтобы она работала с MSSQL. А в ADODB есть аналогичный только Seek.
#10 by Sadovnikov
"На входе я получаю результат выборки" - вот в ней сразу и примени Distinct
#11 by rino
Блин, я это описал лишь в примере к документу. Просто подобный механизм поиска в таблице есть и в других частях программы. Меня собственно интересует, как можно сделать это поиск быстрым? Т.е. общий случай, когда я в цикле постоянно получаю одну запись, смотрю есть ли такая же уже в таблице, если нет, то добавляю, и беру следующую запись. Меня интересует, как быстро сделать поиск записи в таблице??? Пробовал SELECTом, в Open("SELECT..."); но очень долго работает ;( Подскажите плиз....
#12 by Sadovnikov
Не надо такой посик делать, если он нужен только при добавлении строк в таблицу
#13 by rino
блин, и всеже, как сделать быстрый поиск в таблице??? Find не поддерживает индексов, нужен Seek
#14 by Sadovnikov
Помедитируй над этим: CREATE UNIQUE INDEX [IX_ЗадействованныеТовары] ON [dbo].[ЗадействованныеТовары]([идТовар]) With IGNORE_DUP_KEY ON [PRIMARY]
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям