Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Почему Recordset.Save сохраняет только схему, а в данных пусто?  [new]
debutant
Member

Откуда:
Сообщений: 18
Уже и не знаю, в какой форум писать!!!
Но, может быть, здесь есть асы по ADO?

Суть проблемы: скрипт (vbs), выполняющийся по расписанию, должен выполнять запрос к базе Access 97 и сохранять результаты в xml-файл. Запрос - SHAPE с глубиной до 5-и уровней. Выполняю на рабочей машине - нет проблем. ADO-библиотеки представлены, начиная с версии 2.0 и далее до 2.6 Естественно, что OLE DB для JET проинсталлирован. Скрипт запускается, работает 5 минут и выдает файл с нужными данными. Повторяю эту же конфигурацию на целевой машине. Запускаю скрипт. Работает примерно вдвое быстрее (там и памяти больше и проц. помощнее), выдает файл. Но в файле присутствует только SCHEMA, а DATA отсутствует напрочь! То есть пустой Recordset. Причем на обеих машинах доступ через SYSTEM DSN.
При помощи Process Viewer'а делал снимки системы при работе скрипта на обеих машинах - идентичные вызовы! Те же самые версии подгружаемых DLL'ок!
Вначале работают Cursor Engine, Data Shape Provider, OLE DB Provider for ODBC Drivers и т.д. Потом, при сохранении, вызывается Persistence Services. Все работает. Но целевая машина после отработки Persistence Services упорно сохраняет пустой recordset!

Помогите!!!
15 апр 03, 22:05    [175569]     Ответить | Цитировать Сообщить модератору
 Re: Почему Recordset.Save сохраняет только схему, а в данных пусто?  [new]
jimmers
Member

Откуда: Санкт-Петербург - New York City
Сообщений: 5069
Ну а сам скрипт можно увидеть? И базу (mdb) тоже неплохо бы (почтой).
16 апр 03, 00:34    [175601]     Ответить | Цитировать Сообщить модератору
 Re: Почему Recordset.Save сохраняет только схему, а в данных пусто?  [new]
Senin Viktor
Member

Откуда: Подмосковье
Сообщений: 5006
>Потом, при сохранении, вызывается Persistence Services.

Попробую дать закончить операцию сохранения (типа DoEvents или Sleep). Просто у меня такое бывает часто. Некие команды Винда (или VB?) делают асинхронно. Запустила асинхронно сохранение, и тут же (еще ничего не сохранилось) пытаеться прочетсь - результат =Null/
16 апр 03, 09:51    [175782]     Ответить | Цитировать Сообщить модератору
 Re: Почему Recordset.Save сохраняет только схему, а в данных пусто?  [new]
debutant
Member

Откуда:
Сообщений: 18
Огромное спасибо, что откликнулись!
Путем долгих и упорных набивок головы обнаружился источник проблемы - строка подключения.

Я добился того, что и на рабочей машине создается пустой набор записей - ничего, кроме схемы.

Вот строка подключения, котроая на рабочей машине дает правильный набор записей

Set conn = CreateObject("ADODB.Connection")
conn.open "Provider=MSDataShape;DSN=MYDATABASE;USER ID=admin;Password=pas;"

Вот строка подключения, которая на рабочей машине дает пустой набор записей

Set conn = CreateObject("ADODB.Connection")
conn.open "Provider=MSDataShape;Data Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\project\database.mdb;USER ID=admin;Password=pas;jet oledb:system database=c:\project\secdb.mdw;"

Переношу "правильную" версию строки подключения на целевую машину - пустота! Переношу неправильную - такая же пустота!

DSN на обеих машинах SYSTEM и полностью идентичен
Может быть на целевой машине что-то произошло с OLE DB for ODBC Provider'ом? До недавнего времени там стоял NET Framework 1.0, потом я его снес. Но что с ним, что без него - один результат. Целевая машина - W98SE (не смейтесь - обслуживает подразделение и не глючит)

2Senin Viktor: Надо попробовать, может быть действительно какое-нибудь из 1000 свойств OLEDB провайдера и отвечает за этот sleep... Спасибо!

P.S. Выслать базу не могу - огромна и состоит из кучи прилинкованных баз. Скрипт проверен и выполняется без проблем, но опять же на рабочей машине.

Еще раз спасибо!
16 апр 03, 22:52    [177007]     Ответить | Цитировать Сообщить модератору
 Re: Почему Recordset.Save сохраняет только схему, а в данных пусто?  [new]
B0rG
Member

Откуда: столичный город кудаблин
Сообщений: 619
разницы между этим

Set conn = CreateObject("ADODB.Connection") 

conn.open "Provider=MSDataShape;DSN=MYDATABASE;USER ID=admin;Password=pas;"


и этим

Set conn = CreateObject("ADODB.Connection") 

conn.open "Provider=MSDataShape;Data Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\project\database.mdb;USER ID=admin;Password=pas;jet oledb:system database=c:\project\secdb.mdw;"


очень мало... кроме того. что мы не знаем, кто такой MYDATABASE...
открой его как файл должен быть где то около Program Files -> common FIles -> OBDC и посмотри чем оно отличается.

можно попробовать работать через System DSN, лежещей на машине с базой.

еще нужно посмотреть что там твориться в conn.Errors.

Если записывается только schema, значит рекордсет пустой. Ответя на вопрос почему он пустой, скорее всего решишь проблему.

Еще нужно просто открыть базу и попробовать SELECT * FROM ...

Все ADO библиотеки ставить не надо. достаточно только одной - последней. у нас 2.7.

Положи базу на продакшн машину, перенастрой DSN и посмотри что будет.

В конце концов из VBS файла можно сделать VB программку и дебаггером с ней покопаться.

Уфф...
17 апр 03, 13:34    [177485]     Ответить | Цитировать Сообщить модератору
 Re: Почему Recordset.Save сохраняет только схему, а в данных пусто?  [new]
debutant
Member

Откуда:
Сообщений: 18
Все перепробовал...
Вешаться пора, наверное...

2B0rG:
1. MYDATABASE - system DSN
2. Conn.Errors - пусто
3. SELECT * FROM table - работает и сохраняет
4. Стоит ADO 2.6
5. Ложил на продакшн, перенастраивал DSN - один ...
6. Делал программу, проходил дебаггером. Пустой набор...

А разница между строками подключения есть, так как при работе в VB6.0 через DataEnvironment с этими разными строками подключения не все объекты БД показываются: то запрос исчезнет, тто другой появится...
22 апр 03, 17:10    [181368]     Ответить | Цитировать Сообщить модератору
 Re: Почему Recordset.Save сохраняет только схему, а в данных пусто?  [new]
debutant
Member

Откуда:
Сообщений: 18
Если у кого-нибудь возникнет такая же проблема...
Задача разрешилась после установки MDAC 2.5 SP3.
До этого на машине стояла куча версий MDAC (от безысходности ставил по одной- а вдруг заработает?), но "перехват" вела библиотека ADO 2.6.
После того, как поставил MDAC 2.5 SP3, "перехват" пошел по правильному пути. Вот вам наглядный пример "кошмара DLL" :-)

Всем удачи!
1 июл 03, 15:19    [247401]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить