Всем привет.
Я не знаток ActiveX и VB, но мне пришлось переносить одну программу с Windows XP на Windows 7.
Программа написана на Visual Basic 6, она коннектится к удаленной базе данных (MS Access) с помощью ADODB: используется msado27.tlb
Dim conX As New ADODB.Connection
conX.Open conSQL 'in this line I got error "-2147217843:Login failed for user "Test""
conSQL это тоже ADODB.Connection и он инициализируется и используется где-то ранее (используется без проблем и видимых ошибок).
При попытке открыть коннект я получаю ошибку: "-2147217843:Login failed for user "Test"
Ошибку я получаю только на Windows 7! На Win XP все отлично. Все данные для логина, вообще все данные, все строки и поведение на обоих платформах одинаковы ! До момента conX.Open conSQL
В чем может быть проблема? Я пока не могу найти вменяемого объяснения. Собирал я приложение на Windows XP. Сейчас пробую собрать на Windows 7, но есть сомнения, что это поможет. Запускал под учеткой администратора (не run as.. ). Стоит Service Pack 1.
Надеюсь, что кто-нибудь мне подскажет хотя бы куда копать.
Заранее спасибо.
Здравствуйте, Sarevok, Вы писали:
S>Всем привет. S>Я не знаток ActiveX и VB, но мне пришлось переносить одну программу с Windows XP на Windows 7. S>Программа написана на Visual Basic 6, она коннектится к удаленной базе данных (MS Access) с помощью ADODB: используется msado27.tlb S>
S>Dim conX As New ADODB.Connection
S>conX.Open conSQL 'in this line I got error "-2147217843:Login failed for user "Test""
S>
S> conSQL это тоже ADODB.Connection и он инициализируется и используется где-то ранее (используется без проблем и видимых ошибок).
S>При попытке открыть коннект я получаю ошибку: "-2147217843:Login failed for user "Test" S>Ошибку я получаю только на Windows 7! На Win XP все отлично. Все данные для логина, вообще все данные, все строки и поведение на обоих платформах одинаковы ! До момента conX.Open conSQL
S>В чем может быть проблема? Я пока не могу найти вменяемого объяснения. Собирал я приложение на Windows XP. Сейчас пробую собрать на Windows 7, но есть сомнения, что это поможет. Запускал под учеткой администратора (не run as.. ). Стоит Service Pack 1. S>Надеюсь, что кто-нибудь мне подскажет хотя бы куда копать. S>Заранее спасибо.
Это известная багофича. В Windows 7 SP1, не знаю, случайно или намеренно, поменяли GUIDы компонентов ADO . Получается, вы скомпилировали программу в расчете на одни номера, а на семерке за этими номерами — фактически другие компоненты. Самое простое решение — пересобрать под семеркой. (Но тогда, подозреваю, обратно на XP работать не будет). Кажется, по этому случаю выпускали фикс, так что попробуйте обновить вашу семерку.
Здравствуйте, dmitry_npi, Вы писали:
_>Это известная багофича. В Windows 7 SP1, не знаю, случайно или намеренно, поменяли GUIDы компонентов ADO . Получается, вы скомпилировали программу в расчете на одни номера, а на семерке за этими номерами — фактически другие компоненты. Самое простое решение — пересобрать под семеркой. (Но тогда, подозреваю, обратно на XP работать не будет). Кажется, по этому случаю выпускали фикс, так что попробуйте обновить вашу семерку.
Я с базами данных не работал, но может этот код подвигнет на поиски верного решения. Ну и со своей стороны замечу, что в Win7 проверка прав доступа осуществляется строже чем на XP.
Здравствуйте, dmitry_npi, Вы писали:
_>Здравствуйте, Sarevok, Вы писали:
S>>Всем привет. S>>Я не знаток ActiveX и VB, но мне пришлось переносить одну программу с Windows XP на Windows 7. S>>Программа написана на Visual Basic 6, она коннектится к удаленной базе данных (MS Access) с помощью ADODB: используется msado27.tlb S>>
S>>Dim conX As New ADODB.Connection
S>>conX.Open conSQL 'in this line I got error "-2147217843:Login failed for user "Test""
S>>
S>> conSQL это тоже ADODB.Connection и он инициализируется и используется где-то ранее (используется без проблем и видимых ошибок).
S>>При попытке открыть коннект я получаю ошибку: "-2147217843:Login failed for user "Test" S>>Ошибку я получаю только на Windows 7! На Win XP все отлично. Все данные для логина, вообще все данные, все строки и поведение на обоих платформах одинаковы ! До момента conX.Open conSQL
S>>В чем может быть проблема? Я пока не могу найти вменяемого объяснения. Собирал я приложение на Windows XP. Сейчас пробую собрать на Windows 7, но есть сомнения, что это поможет. Запускал под учеткой администратора (не run as.. ). Стоит Service Pack 1. S>>Надеюсь, что кто-нибудь мне подскажет хотя бы куда копать. S>>Заранее спасибо.
_>Это известная багофича. В Windows 7 SP1, не знаю, случайно или намеренно, поменяли GUIDы компонентов ADO . Получается, вы скомпилировали программу в расчете на одни номера, а на семерке за этими номерами — фактически другие компоненты. Самое простое решение — пересобрать под семеркой. (Но тогда, подозреваю, обратно на XP работать не будет). Кажется, по этому случаю выпускали фикс, так что попробуйте обновить вашу семерку.
_>Рекомендую также погуглить, проблема известна. Например: _>http://support.microsoft.com/kb/2640696/en-us _>http://www.codeproject.com/Articles/225491/Your-ADO-is-broken _>http://blogs.msdn.com/b/psssql/archive/2011/10/03/yes-we-made-a-mistake-and-are-finally-going-to-fix-it.aspx
Пересобрал приложение и его библиотеки по Windows 7. К сожалению проблема не исчезла и даже никак не изменилось поведение. Попробовал версии msado2.6 — 2.8. Грустно Если есть какие идеи — пишите, буду рад
S>conX.Open conSQL 'in this line I got error "-2147217843:Login failed for user "Test""
S>
S> conSQL это тоже ADODB.Connection и он инициализируется и используется где-то ранее (используется без проблем и видимых ошибок).
стоп-стоп. Connection.Open же строчку принимает в качестве параметра?
т.е. второй conX.Open просто берет connectionString первого (проперти по умолчанию). Пароль перестал возвращаться в параметрах.
Может тебе тупо username/password передать, ы?
ConX.Open conSQL, username, password
Или добавь в свой исходный ConnectionString
"Persist Security Info=true"
здесь объяснение — дефолтное значение для "Persist Security Info" было установлено в False для улучшения безопасности (раньше было True)
Здравствуйте, bnk, Вы писали:
bnk>Здравствуйте, Sarevok, Вы писали:
S>>
S>>conX.Open conSQL 'in this line I got error "-2147217843:Login failed for user "Test""
S>>
S>> conSQL это тоже ADODB.Connection и он инициализируется и используется где-то ранее (используется без проблем и видимых ошибок).
bnk>стоп-стоп. Connection.Open же строчку принимает в качестве параметра? bnk>т.е. второй conX.Open просто берет connectionString первого (проперти по умолчанию). Пароль перестал возвращаться в параметрах.
bnk>Может тебе тупо username/password передать, ы? bnk>
bnk>ConX.Open conSQL, username, password
bnk>
bnk>Или добавь в свой исходный ConnectionString bnk>"Persist Security Info=true"
bnk>здесь объяснение — дефолтное значение для "Persist Security Info" было установлено в False для улучшения безопасности (раньше было True)
Совершенно верно, т.к. я не особо знаком со всем этим, то долго не мог понять причину.
После .Open у коннекта в свойствах и в Connection String пропадает пароль! И соответственно второй коннект, который берет данные первого уже не может приконнектится.
Хоть бы блин было это где-то в явном виде написано