|   |   | 
| 
 | v7: подключение к 1с DBF базе через OLEDB foxpro (РЕШЕНО) Fish, yurikmellon2, JohnGilbert, Калиостро, Жеглофф, Злопчинский, nick86, X Leshiy, Hawk_1c, uno-group, Волшебник, elka302, skafandr, dyevgeniy, kubik_live, vbus, vis, ADirks, bigdenis22, MWWRuza, Franchiser, trad, Builder, trdm, DimR_71, maxab72, formista2000, Vstur, abfm, Дмитрий, Chameleon1980, Prog_man, alexela, Crusher, DimVad, Гость из Мариуполя, Caesar, Климов Сергей, liap_ok, BSV, СвинТуз, bwi3, DiMel_77, Krendel, AlexKimp, phabeZ, maxar, El_Duke, evorle145, Толич, Джордж1, youalex, mmg, Олдж, mishaPH, ReaLg, Наивный | ☑ | ||
|---|---|---|---|---|
| 0
    
        bigdenis22 11.07.25✎ 12:11 | 
        пытаюсь подключится по сети к базе:
 ПутьИБ = "\\192.168.60.10\ProdInKom$\"; тПользователь = "Робот"; тПароль = "робот"; БД = СоздатьОбъект("OLEDBData"); Соединение = "Provider=VFPOLEDB.1;Data Source=" + ПутьИБ + ";Mode=ReadWrite;Deleted=Yes;" + "Collating Sequence=RUSSIAN;" + "User ID=" + тПользователь + ";Password=" + тПароль; Рез = БД.Соединение(Соединение); БД.ПрисоединитьИБ(ПутьИБ, Соединение); Запрос = БД.СоздатьКоманду(); на строке БД.ПрисоединитьИБ(ПутьИБ, Соединение) - выдает ошибку: {Обработка.РеестрОтгрузок.Форма.Модуль(136)}: FAILED! IDataInitialize::GetDataSource(): Произошли ошибки во время выполнения многошаговой операции OLE DB. По возможности, проверьте значения всех состояний OLE DB. Работа не выполнена. пробовал как в букваре: БД.ПрисоединитьИБ(ПутьИБ, "Provider=VFPOLEDB.1;Deleted=Yes;Mode=ReadWrite;Collating Sequence=MACHINE;Data Source=%1"); - такая же ошибка. что я не так делаю? вообще, по ПрисоединитьИБ() для ДБФ информации как то не удалось найти, может кто-то поделится рабочими примерами? ЗЫ: для SQL базы у меня подобная связка работает на-ура(естественно параметры отличаются) | |||
| 1
    
        СвинТуз 11.07.25✎ 09:07 | 
        ДБФ = СоздатьОбъект("XBASE"); 
 ДБФ.КодоваяСтраница(0); // Windows ДБФ.ОткрытьФайл("c:\export.dbf"); Если ДБФ.Открыта()=0 Тогда Сообщить("Файл DBF не открыт !","!"); Возврат; КонецЕсли; КолСтр = ДБФ.КоличествоЗаписей(); н= 0; ДБФ.Первая(); ПризнакГруппы = ДБФ.IsGroup; ТекУровень = ДБФ.Level; ТекКодРодителя = ДБФ.ParentCode; ТекКод = ДБФ.Code; ТекНаименоване = ДБФ.Descr; н = н+1; Состояние("В файле прочитано записей "+н+" из "+КолСтр); Пока ДБФ.Следующая()=1 Цикл ПризнакГруппы = ДБФ.IsGroup; ТекУровень = ДБФ.Level; ТекКодРодителя = ДБФ.ParentCode; ТекКод = ДБФ.Code; ТекНаименоване = ДБФ.Descr; н = н+1; Состояние("В файле прочитано записей "+н+" из "+КолСтр); КонецЦикла; ДБФ.ЗакрытьФайл(); | |||
| 2
    
        uno-group 11.07.25✎ 09:09 | 
        Попытка
 ЗагрузитьВнешнююКомпоненту("1cpp.dll"); Сообщить("Компонента 1С++ загружена!"); Исключение Сообщить("Пытались, но не загрузили компоненту 1С++ :("); КонецПопытки; Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ() + ";Exclusive=Yes;Mode=ReadWrite;Collating Sequence=MACHINE"; ДБ = СоздатьОбъект("OLEDBData"); Рез = ДБ.Соединение(Соединение); | |||
| 3
    
        Chameleon1980 11.07.25✎ 09:09 | 
        (1) что  к чему?     | |||
| 4
    
        uno-group 11.07.25✎ 09:11 | 
        +(2) Не в монопольном режиме само собой.     | |||
| 5
    
        СвинТуз 11.07.25✎ 09:13 | 
        (3)
 Есть встроенный в платформу функционал. Пример использования. | |||
| 6
    
        СвинТуз 11.07.25✎ 09:14 | 
        ДБФ простой формат.
 Можно открыть как текст и читать. Если знать как. | |||
| 7
    
        СвинТуз 11.07.25✎ 09:16 | 
        Насколько помню встроенный функционал позволяет использовать индексы.     | |||
| 8
    
        Chameleon1980 11.07.25✎ 09:18 | 
        (5) человеку нужно понять почему VFPOLEDB не алё.
 а не иди лучше минеральной воды возьми. | |||
| 9
    
        СвинТуз 11.07.25✎ 09:22 | 
        (8)
 Там должно быть просто. ясно. Помучатся значит. https://help.foxclub.ru/html/7d6c2f1e-1426-4072-bacd-e834d800a366.htm Дрова, доступ. Само подключение примитивно. | |||
| 10
    
        СвинТуз 11.07.25✎ 09:23 | 
        Видимо есть причина при наличии встроенного функционала
 строить сложные выражения самостоятельно. Тогда должен уметь искать ошибки. | |||
| 11
    
        СвинТуз 11.07.25✎ 09:24 | 
        Дрова обнови.     | |||
| 12
    
        СвинТуз 11.07.25✎ 09:24 | 
        Подключение из Excel тоже глючит?     | |||
| 13
    
        bigdenis22 11.07.25✎ 09:26 | 
        (1) спасибо конечно, но мне нужно выполнять запросы из одной семерки в другой... 
 (2) эта часть и у меня работает, мне нужно ПрисоединитьИБ() - подключиться к метаданным, чтоб работала типизация в запросах...(не силен я в переводе имен 1с в истинные имена таблиц и полей) | |||
| 14
    
        СвинТуз 11.07.25✎ 09:29 | 
        описание таблиц идет в отдельном файле
 раньше шло | |||
| 15
    
        Chameleon1980 11.07.25✎ 09:30 | 
        (13) на строке БД.ПрисоединитьИБ(ПутьИБ, Соединение) - выдает ошибку: 
 а еще у нас это не работает вы начали с одного и переехали на типизация в запросах какая проблема в итоге? 1cpp | |||
| 16
    
        bigdenis22 11.07.25✎ 09:35 | 
        (9) на сколько я понимаю, метод ПрисоединитьИБ() - это из 1С++, метод класса OLEDBData выполняет подключение к метаданным именно в контексте 1с. К самому FoxPro мало имеет отношения.
 ну и попутно вопрос: есть какие-то "удобные" методы переводить мета-имена 1с в реальные имена таблиц и полей? и обратно? или только поиск по DD файлу? | |||
| 17
    
        bigdenis22 11.07.25✎ 09:40 | 
        (15) мне нужно подключиться к БД и запросами получать данные.
 если убрать БД.ПрисоединитьИБ() - выполнение доходит до запроса и ругается на имена данных. Запросы я пишу именами 1С, вида: 	|SELECT Журнал.DOCNO Документ_ном
	| 	, Журнал.DATE as Дата
	|	, ТМЦ.DESCR Товар
	|	, $ТМЦ.КодТрейд КодТрейд
	|	, $РасходнаяНакладнаяСтроки.Кво Количество
	|	, ROUND($РасходнаяНакладнаяСтроки.ЦенаБезНДС/5*6, 2) Цена
	|	, $РасходнаяНакладнаяСтроки.СуммаСНДС Сумма
	|	, РасходнаяНакладная.IDDOC DOC
	|FROM 1SJOURN AS Журнал
	| INNER JOIN $Документ.РасходнаяНакладная AS РасходнаяНакладная ON Журнал.IDDOC = РасходнаяНакладная.IDDOC
	| INNER JOIN $ДокументСтроки.РасходнаяНакладная AS РасходнаяНакладнаяСтроки ON Журнал.IDDOC = РасходнаяНакладнаяСтроки.IDDOC
	| INNER JOIN $Справочник.ТМЦ AS ТМЦ ON $РасходнаяНакладнаяСтроки.ТМЦ = ТМЦ.ID
	|WHERE (" + Условие + ")
	|"; | |||
| 18
    
        bigdenis22 11.07.25✎ 09:43 | 
        (17) + этот запрос отлажен и работает в БД источнике данных через консоль запросов (ну естественно условие иначе выглядит : WHERE (Журнал.$ОбщийРеквизит.Примечание LIKE :Док1 OR Журнал.$ОбщийРеквизит.Примечание LIKE :Док2))     | |||
| 19
    
        Chameleon1980 11.07.25✎ 10:02 | ||||
| 20
    
        Chameleon1980 11.07.25✎ 10:02 | ||||
| 21
    
        trad 11.07.25✎ 10:05 | 
        Для начала соединение к БД проверь
 БД = СоздатьОбъект("OLEDBData"); Рез = БД.Соединение("Provider=VFPOLEDB.1;Deleted=Yes;Data Source=" + ПутьИБ + ";Mode=ReadWrite;Mask Password=False;Collating Sequence=MACHINE;"); Сообщить(Рез); | |||
| 22
    
        uno-group 11.07.25✎ 10:20 | 
        (13) дык в 1с++ вроде как и не надо. чтото вроде
 Для к=1 По КР Цикл ИмяРесурса = Метаданные.Регистр(Имя).Ресурс(к).Идентификатор; ТекстЗапроса = ТекстЗапроса+" |$РегистрИтоги."+Имя+"."+ИмяРесурса+" =0 and |"; КонецЦикла; | |||
| 23
    
        bigdenis22 11.07.25✎ 13:08 | 
        (21) Рез=1
 (22) не понял, к чему это? - У меня код выполняется в БД "получатель данных" (где свои метаимена, таблицы и поля), запрос через драйвер отправляется(и должен выполнится) к другой БД "источник данных" (где уже ДРУГИЕ метаимена, таблицы, и поля)! Метаданные инициатора как помогут в определении полей источника? | |||
| 24
    
        Chameleon1980 11.07.25✎ 13:07 | 
        значит нужно знать, зачем ты приехал в Тулу со своим пряником     | |||
| 25
    
        bigdenis22 11.07.25✎ 11:35 | 
        БД.ПрисоединитьИБ() для ДБФ - вопрос открытый и не решенный
 Нашел выход из ситуации, вроде работает: глМД = СоздатьОбъект("MetaDataWork"); глМД.ПрисоединитьМД(ПутьИБ+"1Cv7.md"); НовТекст = глМД.ОбрМетаСКЛ(ТекстЗап); Запрос.ВыполнитьИнструкцию(НовТекст,ТЗ); глМД.ОбрМетаСКЛ(ТекстЗап) - преобразует метаимена в тексте запроса в вид: SELECT Журнал.DOCNO Документ_ном , Журнал.DATE as Дата , ТМЦ.DESCR Товар , ТМЦ.sp14604 КодТрейд , Журнал.sp960 , РасходнаяНакладнаяСтроки.sp1033 Количество , ROUND(РасходнаяНакладнаяСтроки.sp1036/5*6, 2) Цена , РасходнаяНакладнаяСтроки.sp1040 Сумма , РасходнаяНакладная.IDDOC DOC FROM 1SJOURN AS Журнал INNER JOIN dh1011 AS РасходнаяНакладная ON Журнал.IDDOC = РасходнаяНакладная.IDDOC INNER JOIN dt1011 AS РасходнаяНакладнаяСтроки ON Журнал.IDDOC = РасходнаяНакладнаяСтроки.IDDOC INNER JOIN sc148 AS ТМЦ ON РасходнаяНакладнаяСтроки.sp1031 = ТМЦ.ID WHERE (Журнал.sp960 LIKE '%РасходнаяНакладная № 15294 от 03.07.25%') запрос работает и возвращает данные. ЗЫ: только как-то медленно - 2-3 секунды... в аналогичной ситуации запрос с подключение к SQL - доли секунды. ЗЫЗЫ: может кому будет полезно, для ODBC SQL строку в условие "LIKE %РасходнаяНакладная № 15294 от 03.07.25%" надо передавать без одинарных кавычек, а для OLEDB DBF - с одинарными кавычками "LIKE '%РасходнаяНакладная № 15294 от 03.07.25%'" | |||
| 26
    
        trad 11.07.25✎ 11:40 | 
        (25)
 БД = СоздатьОбъект("OLEDBData"); БД.ПрисоединитьИБ(ПутьИБ); так тоже ошибка? Внутри ПрисоединитьИБ(ПутьИБ) - это: ПрисоединитьМД(ПутьИБ+"1Cv7.md") + (21) | |||
| 27
    
        bigdenis22 11.07.25✎ 12:10 | 
        (26) посыпаю голову пеплом... 
 БД = СоздатьОбъект("OLEDBData"); БД.ПрисоединитьИБ(ПутьИБ, Соединение); - работает... выскакивала ошибка синтаксиса(из-за отсутствия одинарных кавычек у параметров) - вчера из-за усталости и аналогии с подключением ODBC SQL(где нужно и Соединение() и ПрисоединитьИБ()) - решил что также не подключает ИБ... это сейчас уже после (25) поправил синтаксис параметров - и взлетело... а по началу упорно пыталься: СоздатьОбъект - Соединить - ПрисоединитьИБ наверно, вопрос можно считать решенным и закрытым. Спасибо всем за участие. | |||
| 28
    
        uno-group 11.07.25✎ 13:08 | 
        (23) дык что мешает сформировать этот запрос в удаленной базе получить текст запроса уже с полями и таблицами и т.п. и вставить этот текст в нужную базу.     | |||
| 29
    
        uno-group 11.07.25✎ 14:01 | 
        (25) Если бы SQL не давал прироста скорости, то не было бы смысла его использовать. Работай с дбф другим инструментом, но чудес не бывает.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |