7.7 не подключится к базе "Microsoft Visual FoxPro Driver"

1. zoeh 31 24.01.22 16:36 Сейчас в теме
ЗагрузитьВнешнююКомпоненту(КаталогИБ()+"1cpp.dll");
БазаДанных = СоздатьОбъект("ODBCDataBase");
БазаДанных.Соединение("
|DRIVER=Microsoft Visual FoxPro Driver;
|Deleted=No;
|Null=No;
|Collate=RUSSIAN;
|BackgroundFetch=No;
|Exclusive=No;
|SourceType=DBF;
|SourceDB=" + КаталогИБ());
РекордСет=СоздатьОбъект("ODBCRecordset");
РекордСет.УстБД(БазаДанных);


.........

РекордСет.УстБД1С();
ТекстЗапроса = "
|SELECT
| Спр.Code as Код,
| Спр.Descr as Наименование
|FROM
| $Справочник.Номенклатура as Спр";

ТЗДолгов = РекордСет.ВыполнитьИнструкцию(ТекстЗапроса);

Сообщить(ТЗДолгов);
Сообщить(типЗначенияСтр(ТЗДолгов));


=
0
Число
Вознаграждение за ответ
Показать полностью
Найденные решения
7. user1203706 15 24.01.22 22:15 Сейчас в теме +0.5 $m
(6)Для дбф другая строка подключения, нужен vfpoledb

1. поставить православный vfp
http://www.microsoft.com/downloads/details.aspx?FamilyId=E1A87D8F-2D58-491F-A0FA-95A3289C5FD4&displaylang=en

2.убрать провайдер от ужаста, если нужны запросы в монопольке, использовать это:
http://infostart.ru/public/16268/

3. строка подключения должна быть такой :
ОлеДБ = СоздатьОбъект("OLEDBData");
Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ() + ";Mode=ReadWrite;Collating Sequence=MACHINE";
Рез = ОлеДБ.Соединение(Соединение);
Запрос = ОлеДБ.СоздатьКоманду();
Запрос.Выполнить("EXECSCRIPT('SET ANSI OFF')");
Запрос.Выполнить("EXECSCRIPT('SET REPROCESS TO 60 SECONDS')");
Запрос.Выполнить("EXECSCRIPT('SET REFRESH TO 0,-1')");
Запрос.Выполнить("Exec('SET TABLEVALIDATE TO 0')");
4. чтобы запрос быстро отрабатывал, читаем тут
http://www.1cpp.ru/forum/YaBB.pl?num=1184317705/30#31
http://www.1cpp.ru/forum/YaBB.pl?num=1184317705
5. Наслаждайся
Показать


ЗЫ:

или писать запрос через 1sqlite, например так

Попытка
база = СоздатьОбъект("SQLiteBase");
Исключение
ЗагрузитьВнешнююКомпоненту("1sqlite.dll");
база = СоздатьОбъект("SQLiteBase");
КонецПопытки;
база.Открыть(":memory:");
запрос = база.НовыйЗапрос();
запрос.ВыполнитьЗапрос("sel ect * fr om [Журнал]").ВыбратьСтроку();
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. zoeh 31 24.01.22 16:38 Сейчас в теме
ИБ=СоздатьОбъект("ODBCDataBase");
ИБ.ПрисоединитьИБ("\\server\КаталогИБ\");
рс=СоздатьОбъект("ODBCRecordset");
рс.УстБД(ИБ);
Результат=рс.ВыполнитьИнструкцию(ТекстЗапроса);

данный вариант валит в ошибку
State IM001, native 0, message [Microsoft][Диспетчер драйверов ODBC] Драйвер не поддерживает данную функцию
3. alex_bob 258 24.01.22 17:12 Сейчас в теме
КаталогИБ() пробелов внутри случайно не содержит?
4. ishelper 24.01.22 17:52 Сейчас в теме
А зачем вообще из DBF читать через FoxPro? Почему не открыть файл непосредственно из 1С, используя XBase?
5. user1203706 15 24.01.22 17:54 Сейчас в теме
(1) Для начала, формат базы какой ? ДБФ или SQL ?
6. zoeh 31 24.01.22 18:11 Сейчас в теме
7. user1203706 15 24.01.22 22:15 Сейчас в теме +0.5 $m
(6)Для дбф другая строка подключения, нужен vfpoledb

1. поставить православный vfp
http://www.microsoft.com/downloads/details.aspx?FamilyId=E1A87D8F-2D58-491F-A0FA-95A3289C5FD4&displaylang=en

2.убрать провайдер от ужаста, если нужны запросы в монопольке, использовать это:
http://infostart.ru/public/16268/

3. строка подключения должна быть такой :
ОлеДБ = СоздатьОбъект("OLEDBData");
Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ() + ";Mode=ReadWrite;Collating Sequence=MACHINE";
Рез = ОлеДБ.Соединение(Соединение);
Запрос = ОлеДБ.СоздатьКоманду();
Запрос.Выполнить("EXECSCRIPT('SET ANSI OFF')");
Запрос.Выполнить("EXECSCRIPT('SET REPROCESS TO 60 SECONDS')");
Запрос.Выполнить("EXECSCRIPT('SET REFRESH TO 0,-1')");
Запрос.Выполнить("Exec('SET TABLEVALIDATE TO 0')");
4. чтобы запрос быстро отрабатывал, читаем тут
http://www.1cpp.ru/forum/YaBB.pl?num=1184317705/30#31
http://www.1cpp.ru/forum/YaBB.pl?num=1184317705
5. Наслаждайся
Показать


ЗЫ:

или писать запрос через 1sqlite, например так

Попытка
база = СоздатьОбъект("SQLiteBase");
Исключение
ЗагрузитьВнешнююКомпоненту("1sqlite.dll");
база = СоздатьОбъект("SQLiteBase");
КонецПопытки;
база.Открыть(":memory:");
запрос = база.НовыйЗапрос();
запрос.ВыполнитьЗапрос("sel ect * fr om [Журнал]").ВыбратьСтроку();
8. zoeh 31 25.01.22 05:54 Сейчас в теме
Microsoft OLE DB Provider for Visual FoxPro 9.0 именно девятой (проверено на win10)
ну и далее 100% рабочий код
ЗагрузитьВнешнююКомпоненту(КаталогИБ()+"1cpp.dll");

ОлеДБ = СоздатьОбъект("OLEDBData");
Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ() + ";Mode=ReadWrite;Collating Sequence=MACHINE";
Рез = ОлеДБ.Соединение(Соединение);
Запрос = ОлеДБ.СоздатьКоманду();
Запрос.Выполнить("EXECSCRIPT('SET ANSI OFF')");
Запрос.Выполнить("EXECSCRIPT('SET REPROCESS TO 60 SECONDS')");
Запрос.Выполнить("EXECSCRIPT('SET REFRESH TO 0,-1')");
Запрос.Выполнить("Exec('SET TABLEVALIDATE TO 0')");
ТекстЗапроса = "
|SELECT
| Спр.Code as Код,
| Спр.Descr as Наименование
|FROM
| $Справочник.Номенклатура as Спр";

ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
Сообщить(ТипЗначенияСтр(ТЗ));
Сообщить(ТЗ);
ТЗ.ВыбратьСтроку();
9. zoeh 31 25.01.22 07:22 Сейчас в теме
Не могу только теперь добавить фильтр по номенклатуре
|SELECT

//| $Рег.Склад as [Склад $Справочник.Склады],

| $Рег.Номенклатура as [Номенклатура $Справочник.Номенклатура],

| $Рег.Количество as Количество

|FROM

| $Регистр.ОстаткиТМЦ as Рег

|WHERE

| $Рег.Номенклатура = ?";

Запрос.ДобПараметр (1, 14, 9, 0);

Запрос.УстановитьПараметр(1, Ном.ТекущийЭлемент());


Отсутствует значение для одного или нескольких требуемых параметров.
10. zoeh 31 25.01.22 07:37 Сейчас в теме
ВОТ ПОЛНОСТЬЮ РАБОЧИЙ КОД
по скорости всего в 2 раза быстрее чем СводныйОстаток, хотелось бы быстрее



Процедура ПриОткрытии()
ЗагрузитьВнешнююКомпоненту(КаталогИБ()+"1cpp.dll");

ОлеДБ = СоздатьОбъект("OLEDBData");
Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ() + ";Mode=ReadWrite;Collating Sequence=MACHINE";
Рез = ОлеДБ.Соединение(Соединение);
Запрос = ОлеДБ.СоздатьКоманду();
Запрос.Выполнить("EXECSCRIPT('SET ANSI OFF')");
Запрос.Выполнить("EXECSCRIPT('SET REPROCESS TO 60 SECONDS')");
Запрос.Выполнить("EXECSCRIPT('SET REFRESH TO 0,-1')");
Запрос.Выполнить("Exec('SET TABLEVALIDATE TO 0')");


КонецПроцедуры

//*******************************************
Процедура Сформировать()
Старт = _GetPerformanceCounter(); ;



ВрТаблГрупп="";
Запрос.УложитьСписокОбъектов(Ном.ТекущийЭлемент(), ВрТаблГрупп, "Номенклатура");
ТекстЗапроса = "
|SEL ECT

//| $Рег.Склад as [Склад $Справочник.Склады],

| $Рег.Номенклатура as [Номенклатура $Справочник.Номенклатура],

| $Рег.Количество as Количество

|FROM

| $Регистр.ОстаткиТМЦ as Рег

|WHERE

| $Рег.Номенклатура IN (SELECT Val FR OM " + ВрТаблГрупп + ")";


ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
Конец = _GetPerformanceCounter() ;
Сообщить(Конец-Старт);
Сообщить(ТЗ);
Сообщить(типЗначенияСтр(ТЗ));


КонецПроцедуры
11. zoeh 31 25.01.22 08:00 Сейчас в теме
Думаю дело в фильтре, можно как то добавить 1 объект? Без УложитьСписокОбъектов?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот