Мини faq по прямым запросам для ДБФ (через FoxPro)
1. Как правильно написать строку подключения?
http://www.1cpp.ru/forum/YaBB.pl?num=11941179462. Где взять драйвер vfpoledb.dll ?
http://www.microsoft.com/downloads/details.aspx?FamilyId=E1A87D8F-2D58-491F-A0FA...или поиск по ключевому слову VFPOLEDBSetup.msi
3. Можно ли использовать прямые запросы в модуле документа?
Как сделать, чтобы запросы не блокировали таблицы?
в строке подключения указать параметр
TABLEVALIDATE=0;
или после подключения выполнить команду
ОледбКоманда.Выполнить("Exec('SET TABLEVALIDATE TO 0')");
см подробнее
http://www.1cpp.ru/forum/YaBB.pl?num=1237895266/5 http://www.1cpp.ru/forum/YaBB.pl?num=12303613784. Где я могу почитать документацию по FoxPro ?
от разработчика
http://msdn2.microsoft.com/en-us/library/aa468129.aspx на русском
http://www.foxclub.ru/rhproject/project/ввиде chm
http://www.1cpp.ru/forum/YaBB.pl?num=11857835525. Можно ли использовать временные таблицы?
Что мне делать, если мне нужен запрос по складам – всем вошедшим в запрос,
ведь я заранее не знаю этот список складов?
http://www.1cpp.ru/forum/YaBB.pl?num=11886733186. Могу ли я использовать индексы в запросе ?
Я использую прямой запрос, но родной 1С метод СводныйОстаток() выполняется быстрее, что я делаю не так?
http://www.1cpp.ru/forum/YaBB.pl?num=1184317705/30#317. Могу ли я использовать Хранимые процедуры?
Как получить время из поля TIME журнала (ДБФ)?
http://www.1cpp.ru/forum/YaBB.pl?num=11806064478. Могу ля использовать представления (View) ?
http://www.1cpp.ru/forum/YaBB.pl?num=1183553285/25#25 (до конца не изучен)
9. Могу ли я использовать команды FoxPro или только запросы?
Пример
http://www.1cpp.ru/forum/YaBB.pl?num=1178779637/29#2910. Могу ли я писать запрос сразу к двум базам?
Я использую OLE-соединение, но это очень медленно, что можно сделать?
http://www.1cpp.ru/forum/YaBB.pl?num=1182497837/19#1911. Как задать константу в запросе?
'Моя строковая константа'
[Моя строковая константа]
{^2008-01-01} константа типа дата
12. А пустые значения?
$ПустойИД и т.п. – для документов и справочников
{^0000-00-00} – для дат
13. Как получить Id реквизита справочника (fieldid) ?
глМД = СоздатьОбъект("MetaDataWork");
ИДЮрАдрес = Прав(_IDToStr(глМД.ИДРеквизитаСправочника("ЮрЛица","ЮрАдрес")),4);
14. Как хранятся длинные строки, ведь в ДБФ нет BLOB полей?
В таблицах 1SBLOB и 1SCONST есть поле blockno – длинные строки разбиваются на строки одинаковой длины и в этом поле пишется номер блока. Первые 9 символов
нулевого блока задают длину строки.
15. Могу ли я отлаживать запросы?
Можно установить FoxPro и там отлаживать.
Предварительно запрос нужно преобразовать
глМД = СоздатьОбъект("MetaDataWork");
ТекстЗапросаДляFoxPro=глМД.ОбрМетаСКЛ(ТекстЗапроса);
Также FoxPro сообщит в отдельном окне о возжности оптимизации выполнения, варианты
FULL, None... Если None на небольшом наборе данных - это значит плохо составленный запрос.
16. Мне нужно выбрать документы только по определенный документ(На).
Получаем позицию стандартно :
ПозицияДок=ВыбДок.ПолучитьПозицию();
ПозицияДокСтр=Мд.ПолучитьДатуВремяИдДок(ПозицияДок);
Аналогом поля DATE_TIME_IDDOC в ДБФ является выражение DTOS(Жур.date)+Жур.time+Жур.iddoc где Жур - 1SJourn т.е. в запросе
WHERE DTOS(Жур.date)+Жур.time+Жур.iddoc<:ПозицияДокСтр
по выражению построен индекс , т.е. его использование достаточно эффективно. Аналогично в регистрах.
17. Какие основные отличия запросов SQL и ДБФ ?
а. Виртуальные таблицы не поддерживаются в ДБФ.
б. Некоторые таблицы в SQL варианте начинаются с «_» : 1SJourn и _1SJourn
в. Вместо поля DATE_TIME_IDDOC используется date в FoxPro
г. в ДБФ - РегКассаНач.period = :ПредМесяц~~, в SQL - РегКассаНач.period = :ПредМесяц
д. В Fox служебные слова нерегистрозависимы
е. Вместо CASE используется функция ICASE
ж. В Fox нет (NOLOCK) и GROUPING
з. Специфические функции Fox как правило не поддерживаются в SQL.
дополнительные сведения см. в документации(
http://www.1cpp.ru/forum/YaBB.pl?num=1185783552) к Fox раздел "Масштабирование Базы Данных Visual FoxPro в Базу Данных SQL Server"