Имя: Пароль:
1C
 
Запрос к SQL через ADO возвращает пустой Recordset
0 Sane
 
31.10.08
12:09
Из 1С читаю таблицы SQL:

SQLConnection = Новый COMObject("ADODB.Connection");
SQLConnection.Open("Provider=SQLOLEDB.1;Password=PASSWORD;Persist Security Info=True;User ID=sa;Initial Catalog=DBNAME;Data Source=SERVERNAME");
Recordset = Новый COMObject("ADODB.Recordset");
Recordset.ActiveConnection = SQLConnection;
Recordset.Open(СтрокаSQL);

Проблема в том, что в Recordset есть все колонки, но нет строк.
Пробовал на разных машинах, со всеми возможными поставщиками OLE, к разным базам, к серверам SQL Server 2000 и 2005.
1 ДенисЧ
 
31.10.08
12:10
сообщить(СтрокаSQL) ?
2 Sane
 
31.10.08
12:12
Ну, например,

SELECT * FROM _Reference15569

(база 1С8 УПП, справочник РегистрацияВИФНС).
3 shuhard
 
31.10.08
12:13
(0)  найди отличия:
MyCon = Новый COMОбъект ("ADODB.Connection");
           MyCon.Open ("Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=...");
           MyRst = Новый COMОбъект ("ADODB.Recordset");
           MyStr = "...";
           MyRst.Open (MyStr, MyCon, 2, 3);//adOpenDynamic, adLockOptimistic
4 Sane
 
31.10.08
12:21
(3) Ну, провайдер Microsoft.Jet.OLEDB.4.0 - он для Access, а дополнительные параметры метода Open ничего не дали.
5 shuhard
 
31.10.08
12:23
(4) код покажи
6 Sane
 
31.10.08
12:26
SQLConnection = Новый COMObject("ADODB.Connection");
SQLConnection.Open("Provider=SQLOLEDB.1;Password=PASSWORD;Persist Security Info=True;User ID=sa;Initial Catalog=DBNAME;Data Source=SERVERNAME");        
Recordset = Новый COMObject("ADODB.Recordset");
Recordset.Open(СтрокаSQL,SQLConnection,2,3);

ТЗРезультат = Новый ТаблицаЗначений;
Для н=1 По КолвоСтолбцов Цикл
   ТЗРезультат.Колонки.Добавить( Recordset.Fields(н-1).Name );
КонецЦикла;
Recordset.MoveFirst();
Пока Recordset.EOF()<>0 Цикл
   Стр = ТЗРезультат.Добавить();
   Для н=1 По КолвоСтолбцов Цикл
       Стр.Установить(н-1, Recordset.Fields(н-1).Value);
   КонецЦикла;        
   Recordset.MoveNext();
КонецЦикла;
ТЗРезультат.ВыбратьСтроку();
7 ДенисЧ
 
31.10.08
12:27
Пока НЕ Recordset.EOF() Цикл
8 ДенисЧ
 
31.10.08
12:27
и без скобок
9 Sane
 
31.10.08
12:27
(6) тьфу, 2 строки пропустил:

КолвоСтрок = Recordset.RecordCount();
КолвоСтолбцов = Recordset.Fields().Count;
   
ТЗРезультат = Новый ТаблицаЗначений;
10 Sane
 
31.10.08
12:28
(8) Работает. Спасибо, добрый человек.