Имя: Пароль:
1C
1C 7.7
v7: Запрос к 2-м dbf файлам
,
0 MobilSoyuz
 
31.05.13
17:39
Появилась сложность:
Процедура Сформировать()  
   Папка    = КаталогИБ() + "Обмен\SEB\";    
   DBConn = CreateObject("ADODB.Connection");
   DBConn.Open("Provider=Microsoft.Jet.OLEDB.4.0;" +
   "Data Source=" + Папка + ";" +
   "Extended Properties=""DBASE IV;"";");          
   Результат = DBConn.Execute("Select * from [gsfact.DBF] a, [gsrest.DBF] b where a.code = b.code and ((a.DBF.quantity > b.DBF.out_qty) or (a.DBF.quantity > b.DBF.in_qty))");
 
   Пока Результат.EOF=0 Цикл //Цикл по записям  
           ТЗ.НоваяСтрока();
           ТЗ.код    = Результат.Fields("Code").Value;
           Возврат;
     Результат.MoveNext(); //Переходим к след. записи DBF
   КонецЦикла;
 DBConn.Close(); //Закрываем соединение
КонецПроцедуры

Сложность в правильности синтаксиса запроса!
Подскажите синтаксис...если так вообще можно обращаться, как в примере?
Заранее благодарен за ответ!
1 Ёпрст
 
31.05.13
17:41
вообще, лучше не использовать старый формат записи, а явно указывать что это Иннер Джоиин
2 Ёпрст
 
31.05.13
17:42
ну и.. проще в тексте запроса писать полный путь к табличкам
3 MobilSoyuz
 
31.05.13
17:43
(1) а по подробнее ?
4 MobilSoyuz
 
31.05.13
17:44
(1) типа
SELECT MyFile.*, MyFile1.SUMMA FROM MyFile INNER JOIN MyFile1 ON MyFile.ID = MyFile1.ParentID IN 'C:\DBF' [dbase 5.0;];
5 Ёпрст
 
31.05.13
17:45
(3)

select *
from D:\вася.dbf as a
inner join E:\федя.dbf as b on a.code = b.code and ((a.DBF.quantity > b.DBF.out_qty) or (a.DBF.quantity > b.DBF.in_qty))
6 MobilSoyuz
 
31.05.13
17:54
(5) ТЗ.код    = Результат.Fields("Code").Value;
{D:\СЕРГЕЙ\ПРОВЕРКАDBF.ERT(12)}: ADODB.Recordset: Item cannot be found in the collection corresponding to the requested name or ordinal.
7 ДенисЧ
 
31.05.13
17:56
(6) у тебя нет Code в результате
8 Ёпрст
 
31.05.13
17:57
(6) ну нету у тя code в табличке.. или запрос пустой.

Вообще, делай через оледб и 1cpp, если религия позволяет:

   ОлеДБ = СоздатьОбъект("OLEDBData");
   Соединение = "Provider=VFPOLEDB.1;Data Source=" + СокрЛП(Путь)+ ";Mode=ReadWrite;Collating Sequence=MACHINE";

   Рез = ОлеДБ.Соединение(Соединение);
   Запрос = ОлеДБ.СоздатьКоманду();
   Запрос.Выполнить("EXECSCRIPT('SET ANSI OFF')");  
   Запрос.Выполнить("EXECSCRIPT('SET REPROCESS TO 60 SECONDS')");
   Запрос.Выполнить("Exec('SET TABLEVALIDATE TO 0')");

   Запрос = ОлеДБ.СоздатьКоманду();

   //сюда воткнешь свой текст запроса
       ТекстЗапроса = "
   |Select *
   |From "+СокрЛП(ИмяФайла);
   
   ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
   ТЗ.ВыбратьСтроку();
9 MobilSoyuz
 
31.05.13
17:58
(7) это я перевел )
10 MobilSoyuz
 
31.05.13
18:04
(8) Соединение = "Provider=VFPOLEDB.1;Data Source=" + СокрЛП(Путь)+ ";Mode=ReadWrite;Collating Sequence=MACHINE";

Путь - это путь куда?
11 MobilSoyuz
 
31.05.13
18:05
(8) орет
Рез = ОлеДБ.Соединение(Соединение);
{D:\СЕРГЕЙ\ПРОВЕРКАDBF.ERT(7)}: FAILED! IDataInitialize::GetDataSource(): Class not registered
12 MobilSoyuz
 
31.05.13
18:06
(8) видимо религия
13 Ёпрст
 
31.05.13
18:10
(10) можешь КаталогИБ() заместо путь воткнуть..
(11) нужно vfpoledb провайдер установить
14 Ёпрст
 
31.05.13
18:11
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.