7.7 не подключится к базе "Microsoft Visual FoxPro Driver"
ЗагрузитьВнешнююКомпоненту(КаталогИБ()+"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
Число
БазаДанных = СоздатьОбъект("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
Число
Найденные решения
(6)Для дбф другая строка подключения, нужен vfpoledb
ЗЫ:
или писать запрос через 1sqlite, например так
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. Наслаждайся
Показать2.убрать провайдер от ужаста, если нужны запросы в монопольке, использовать это:
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. чтобы запрос быстро отрабатывал, читаем тут
5. Наслаждайся
ЗЫ:
или писать запрос через 1sqlite, например так
Попытка
база = СоздатьОбъект("SQLiteBase");
Исключение
ЗагрузитьВнешнююКомпоненту("1sqlite.dll");
база = СоздатьОбъект("SQLiteBase");
КонецПопытки;
база.Открыть(":memory:");
запрос = база.НовыйЗапрос();
запрос.ВыполнитьЗапрос("sel ect * fr om [Журнал]").ВыбратьСтроку();
база = СоздатьОбъект("SQLiteBase");
Исключение
ЗагрузитьВнешнююКомпоненту("1sqlite.dll");
база = СоздатьОбъект("SQLiteBase");
КонецПопытки;
база.Открыть(":memory:");
запрос = база.НовыйЗапрос();
запрос.ВыполнитьЗапрос("sel ect * fr om [Журнал]").ВыбратьСтроку();
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
ИБ=СоздатьОбъект("ODBCDataBase");
ИБ.ПрисоединитьИБ("\\server\КаталогИБ\");
рс=СоздатьОбъект("ODBCRecordset");
рс.УстБД(ИБ);
Результат=рс.ВыполнитьИнструкцию(ТекстЗапроса);
данный вариант валит в ошибку
State IM001, native 0, message [Microsoft][Диспетчер драйверов ODBC] Драйвер не поддерживает данную функцию
ИБ.ПрисоединитьИБ("\\server\КаталогИБ\");
рс=СоздатьОбъект("ODBCRecordset");
рс.УстБД(ИБ);
Результат=рс.ВыполнитьИнструкцию(ТекстЗапроса);
данный вариант валит в ошибку
State IM001, native 0, message [Microsoft][Диспетчер драйверов ODBC] Драйвер не поддерживает данную функцию
(6)Для дбф другая строка подключения, нужен vfpoledb
ЗЫ:
или писать запрос через 1sqlite, например так
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. Наслаждайся
Показать2.убрать провайдер от ужаста, если нужны запросы в монопольке, использовать это:
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. чтобы запрос быстро отрабатывал, читаем тут
5. Наслаждайся
ЗЫ:
или писать запрос через 1sqlite, например так
Попытка
база = СоздатьОбъект("SQLiteBase");
Исключение
ЗагрузитьВнешнююКомпоненту("1sqlite.dll");
база = СоздатьОбъект("SQLiteBase");
КонецПопытки;
база.Открыть(":memory:");
запрос = база.НовыйЗапрос();
запрос.ВыполнитьЗапрос("sel ect * fr om [Журнал]").ВыбратьСтроку();
база = СоздатьОбъект("SQLiteBase");
Исключение
ЗагрузитьВнешнююКомпоненту("1sqlite.dll");
база = СоздатьОбъект("SQLiteBase");
КонецПопытки;
база.Открыть(":memory:");
запрос = база.НовыйЗапрос();
запрос.ВыполнитьЗапрос("sel ect * fr om [Журнал]").ВыбратьСтроку();
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 Спр";
ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
Сообщить(ТипЗначенияСтр(ТЗ));
Сообщить(ТЗ);
ТЗ.ВыбратьСтроку();
ну и далее 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 Спр";
ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
Сообщить(ТипЗначенияСтр(ТЗ));
Сообщить(ТЗ);
ТЗ.ВыбратьСтроку();
Не могу только теперь добавить фильтр по номенклатуре
|SELECT
//| $Рег.Склад as [Склад $Справочник.Склады],
| $Рег.Номенклатура as [Номенклатура $Справочник.Номенклатура],
| $Рег.Количество as Количество
|FROM
| $Регистр.ОстаткиТМЦ as Рег
|WHERE
| $Рег.Номенклатура = ?";
Запрос.ДобПараметр (1, 14, 9, 0);
Запрос.УстановитьПараметр(1, Ном.ТекущийЭлемент());
Отсутствует значение для одного или нескольких требуемых параметров.
|SELECT
//| $Рег.Склад as [Склад $Справочник.Склады],
| $Рег.Номенклатура as [Номенклатура $Справочник.Номенклатура],
| $Рег.Количество as Количество
|FROM
| $Регистр.ОстаткиТМЦ as Рег
|WHERE
| $Рег.Номенклатура = ?";
Запрос.ДобПараметр (1, 14, 9, 0);
Запрос.УстановитьПараметр(1, Ном.ТекущийЭлемент());
Отсутствует значение для одного или нескольких требуемых параметров.
ВОТ ПОЛНОСТЬЮ РАБОЧИЙ КОД
по скорости всего в 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() ;
Сообщить(Конец-Старт);
Сообщить(ТЗ);
Сообщить(типЗначенияСтр(ТЗ));
КонецПроцедуры
по скорости всего в 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() ;
Сообщить(Конец-Старт);
Сообщить(ТЗ);
Сообщить(типЗначенияСтр(ТЗ));
КонецПроцедуры
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот