Как сделать запрос к dbf ? #488848


#0 by Штурман
Подскажите собственно как извлечь нужные данные из файлов *.dbf посредством запросов 1С ?
#1 by Rie
Запросы _1С_ непосредственно с DBF-файлами не работают. Тут или объект XBase использовать, или подключаться через OLE DB и там уже запросами.
#2 by Штурман
т.е. лучше всего перекинуть временно все данные из дбф в таблицу значений а там уже использовать менеджер временных таблиц ?
#3 by DCKiller
юзай ADO
#4 by Штурман
а пример ?
#5 by Rie
Если в запросе будут использоваться ещё и данные из 1С - то да, каким-либо способом перекинуть во временную таблицу и дальше 1С-овскими запросам. Если нет - то можно запросами через ADO.
#6 by DCKiller
#7 by DCKiller
к
#8 by DCKiller
ТекстЗапроса = "SELECT DB1.*, DB2.* FROM DB1 LEFT JOIN DB2 ON DB2.FIELD1 = DB1.FIELD1";
#9 by Штурман
зм, а как вывести на экран результат запроса?
#10 by Defender aka LINN
Ну, тут уж придется позвать программиста, без него никак.
#11 by Штурман
да, еще вопрос, а как собственно этот дбф открывать то?
#12 by Штурман
в искеле например так: ExcelФайл = ExcelПриложение.WorkBooks.Open(ИмяФайла);
#13 by DCKiller
читать-то хоть умеем? В все написано как.
#14 by Штурман
т.е. нужен только путь к каталогу, а "FROM DB1" - это и есть имя файла ?
#15 by DCKiller
да
#16 by DCKiller
Имя файла - это DB1. А FROM - это команда запроса, указывающая, что мы получаем данные из DB1.
#17 by Штурман
спасибо )
#18 by Штурман
уважаемый, вы тут? в общем я запрос написал, мну понравилось ) а можно ссылку на более подробный механизм работы в 1с с использованием ADO ?
#19 by DCKiller
гугл рулит
#20 by Штурман
а я спрашивать большей часть не у гугла лублу )
#21 by Штурман
ап, завис чуток, как задать параметр в вышепредставленном запросе? т.е. на форме есть поле выбора сотрудника, мы запоминаем его код, вот так: а как теперь Имя вставить в запрос? Where ....
#22 by Штурман
Where TBN=<что тут писать>
#23 by Rie
Объект ADODB.Command позволяет установить параметры запроса (коллекция Parameters).
#24 by МаленькийВопросик
лучше загрузи в неотображаемое табличное поле 1 раз... потом делай запрос уже с помощью временных таблиц - будет быстрее...
#25 by Штурман
шот я вас не пойму - одни АДО советуют, я уже код написал, а терь советуют юзать временные таблицы :)) а можно точнее, где быстрее все ж ?
#26 by Odavid
одно другому не мешает :) Сначала делаешь запрос через ADO, потом результат загружаешь в ВрТ Это разные механизмы, а не одно и то же.
#27 by МаленькийВопросик
мне кажется временные таблицы пошустрее будут т.к. работа тут с памятью идет только, а при чтении из дбф - ты каждый раз дбф-ку считываещь
#28 by Штурман
ладно, я сейчас допишу через АДО, тока разберусб как параметр в запрос вставить, а потом буду запрос с временными таблицами писать
#29 by Odavid
вы человеку объясните :) Что сначала все равно запрос к DBF делать, а потом, перед циклом - выгрузку во временную таблицу (конструкция заполнения ВрТ используется непосредственно в запросе, либо через менеджер ВрТ).
#30 by Odavid
в подразумевалась замена цикла по Запрос.MoveNext на цикл по ТЗ из временной таблицы.
#31 by МаленькийВопросик
короче так: 1.подключаешься через к дбф (обычное чтение дбф) - адо не надо.. 2.результат считываешь в табличное поле - например скрытое 3.результат с тп - засовываешь во временную таблицу 4.работаем с временной таблице запросами sql
#32 by Alpinist22
Вот держи, сам делал, работает на любой винде старше XP, наличие офиса не обязательно:
#33 by Штурман
понятно
#34 by Штурман
спасибо )
#35 by Злобный Йожег
"обычное чтение дбф) - адо не надо" Ты представляешь, какая скорость чтения дбф через адо и черех Xbase? Если файл загрузки большой, то обычное чтение будет идти очень медленно.
#36 by Alpinist22
у меня на дбф с 4000 записей через адо читает с такой же скоростью как и обычным способом, зато привязки к офису нету
#37 by Злобный Йожег
хз, у меня через адо быстрее было примерно в 2-3 раза минимум
#38 by Штурман
таварищи, никто еще раз не подскажет как в АДО в запросе передать параметр?
#39 by Штурман
пишу так:
#40 by Alpinist22
ну там SQL запрос как видно из текста, но я бы на твоем месте анализировал данные программно на 1С, слишком много нюансов в этом запросе получиться
#41 by Штурман
да меня в общем зацепило, хочется табельный сотра передать, никак не выходит уже так написал:
#42 by Штурман
никто не посоветует ?
#43 by Штурман
да, вот какую ошибку выдает: Ошибка при вызове метода контекста (Append): Произошла исключительная ситуация (ADODB.Parameters): Неправильно определен объект Parameter. Предоставлены несовместимые или неполные сведения.
#44 by Lelic
А просто как строку "склеить" параметры не получается? У нас вроде работает. С датами только приходится поковыряться
#45 by Штурман
а как? можно на моем примере привести?
#46 by Lelic
Должно получиться что-то вроде этого:
#47 by Штурман
ошибка вроде тут: CreateParameter("sotr", ?, ? ); вот вместо вопросов не понял что писать
#48 by Штурман
не вышло... вот текст ошибки: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][Драйвер ODBC dBase] Слишком мало параметров. Требуется 1.
#49 by Alpinist22
Забей, больше времени уйдет на запрос, чем на его анализ в 1С.
#50 by Штурман
+ это на такой код: написал потом так: ТекстЗапроса = "SELECT DUP FROM RLS03 WHERE TBN="+сотрудник; сейчас выдает такую ошибку: Ошибка при вызове метода контекста (Fields): Произошла исключительная ситуация (ADODB.Recordset): Не удается найти объект в семействе, соответствующий требуемому имени или порядковому номеру.
#51 by Штурман
не, вот всего один параметр передам и забью )
#52 by Штурман
вот весь код запроса
#53 by Штурман
как параметр то передать? (сотрудник)
#54 by Lelic
А где вы его присваиваете?
#55 by Lelic
Д.б.что-то вроде сотрудник=...Что-то не вижу
#56 by Штурман
в самом верху
#57 by Штурман
Сотр выбирается на формочке
#58 by Rie
В тексте запроса в местe параметра ставишь "?". Ну и устанавливаешь параметр через Parameters.
#59 by Штурман
ну написал так: вот ошибка: Ошибка при вызове метода контекста (Append): Произошла исключительная ситуация (ADODB.Parameters): Неправильно определен объект Parameter. Предоставлены несовместимые или неполные сведения. может все дело в том что у меня написано так: вроде нужно писать так: вот вместо вопросительных знаков не ясно что писать
#60 by Lelic
Извиняюсь. Я все про строки...Насколько я понимаю в результате запрос д.выглядеть ка-то так SELECT DUP FROM RLS03 WHERE TBN='000001'. Наверное просто кавычек не хватает. Может так получится: "SELECT DUP FROM RLS03 WHERE TBN=' "+сотрудник+"'";
#61 by Rie
Если мне не изменяет мой склероз, то второй параметр - тип, третий параметр - in/out. И то, и другое обозначается числами (см. в документации).
#62 by Штурман
ну что ж такое (((((( пишу уже так: ТекстЗапроса = "SELECT DUP FROM RLS03 WHERE TBN='"+сотрудник+"'"; так вылетает такая ошибка: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][Драйвер ODBC dBase] Несоответствие типов данных в выражении условия отбора.
#63 by Rie
Типы проверь. Где строка, а где - число. И не сравнивай строки с числами.
#64 by Lelic
Согласна с Rie. Я бы уже попробовала в лоб запрос написать с конкретным таб.номером, чтобы он отработал, а потом параметр передать.
#65 by Штурман
ну спасибо, я уже написал в лоб, тока таже ошибка вылетает может все дело в том, что 1С у четырехзначных цифр после первой цифры ставит пробел, т.е. получается ввели 5555 а на выходе такое число: 5 555
#66 by Rie
Очень может быть. Функция Формат поможет с этим справиться.
#67 by Lelic
А формат зачем? Там есть галочка группировка
#68 by Rie
"Там" - это где? В "SELECT ..... WHERE TBN="+сотрудник этот самый сотрудник преобразуется в строку автоматически, вставляя неразрывный пробел между группами разрядов.
#69 by Lelic
Как это он сам преобразуется? А "там" это в функции Формат
#70 by Штурман
шота нипанятное дело выходит - запрос через АДО писать уже явно усе прописал: ан нет, вылетает та же ошибка
#71 by Штурман
написал так: аналогично, думаю уже забить на это
#72 by Rie
Тип у поля TBN - какой?
#73 by Rie
Автоматически. Из числа в строку (поскольку складываются строки).
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С