|
|
|
ODBC-логин?
|
|||
|---|---|---|---|
|
#18+
есть база mdb, которая работает с Oracle Server через ODBC и ADO соответственно, пользователю приходится логиниться один раз в ODBC (при первом обращении к таблицам) и еще раз в ADO при выполнении кода Как объединить? Свою формочку логина на запуск базы сделаю, ADO через переменные передам Как ODBC подсунуть данные из формочки?!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2004, 16:01:09 |
|
||
|
ODBC-логин?
|
|||
|---|---|---|---|
|
#18+
все знатоки ушли на фронт?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2004, 16:41:32 |
|
||
|
ODBC-логин?
|
|||
|---|---|---|---|
|
#18+
Запомнить необходимые данные в переменных и потом подсовывать в строке подключения. А разве Оракл не позволяет NT-аутетификация? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2004, 17:15:36 |
|
||
|
ODBC-логин?
|
|||
|---|---|---|---|
|
#18+
в строке подключения ADO так и делаю как подсунуть в строку подключения ODBC-таблицы?!! и что такое NT-аутенти? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2004, 18:00:48 |
|
||
|
ODBC-логин?
|
|||
|---|---|---|---|
|
#18+
Alexus12в строке подключения ADO так и делаю как подсунуть в строку подключения ODBC-таблицы?!! Вот из хелпа скачал: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Alexus12и что такое NT-аутенти? Пользователь домена NT. В данном случае, если Оракл конечно настроен, то он может распознавать пользователей по учетным записям домена NT, т.е. войдя в сеть пользователю не нужно дополнительно логинится к серверу БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2004, 19:04:35 |
|
||
|
ODBC-логин?
|
|||
|---|---|---|---|
|
#18+
ваш пример - про ADO, именно так и пользуюсь, а вопрос про ODBC, есть _линкованная ODBC-таблица_ (на вкладке "таблицы" значок: стрелочка и глобус) - как, получив от юзера логин/пароль в своей форме, затолкать их в ODBC-таблицу, чтобы она не просила еще одного логина при первом открытии? NT-auth не пройдет - не-NT система и auth externally запрещен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2004, 09:20:30 |
|
||
|
ODBC-логин?
|
|||
|---|---|---|---|
|
#18+
Прошу прощения ... А разве не возможно таким же образом подключиться к таблице в программе, а не использовать готовые связи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2004, 09:34:49 |
|
||
|
ODBC-логин?
|
|||
|---|---|---|---|
|
#18+
Работающий пример. При подключении к БД, переписываем все строки подключения для таблиц и запросов к серверу. strCnn - строка подключения к БД. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2004, 10:09:21 |
|
||
|
ODBC-логин?
|
|||
|---|---|---|---|
|
#18+
при этом варианте логин-пароль будут записаны в строку подключения всех таблиц, так? И после закрытия базы они не испарятся - заходи кто хочешь под чужим логином и радуйся 8( Опасно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2004, 13:59:47 |
|
||
|
ODBC-логин?
|
|||
|---|---|---|---|
|
#18+
Alexus12при этом варианте логин-пароль будут записаны в строку подключения всех таблиц, так? И после закрытия базы они не испарятся - заходи кто хочешь под чужим логином и радуйся 8( Опасно... В таблицу MSysConf строку Config=101, NValue=0 добавил? А чтоб аксесс с лишним логином не приставал, я программно линкую любую таблицу, потом линк удаляю. Соединение кешируется до следующего старта. Примерно так: Код: plaintext 1. 2. 3. 4. Но это в общем. В реальности надо, конечно, всяких проверок и обработок ошибок навтыкать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2004, 14:16:37 |
|
||
|
ODBC-логин?
|
|||
|---|---|---|---|
|
#18+
Спасибо Проблема обойдена так: /http://www.sql.ru/forum/actualthread.aspx?tid=125029 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2004, 14:50:41 |
|
||
|
ODBC-логин?
|
|||
|---|---|---|---|
|
#18+
Alexus12Спасибо Проблема обойдена так: /http://www.sql.ru/forum/actualthread.aspx?tid=125029 и, правильно, пусть сервак свой процессор нагружает :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2004, 15:18:14 |
|
||
|
ODBC-логин?
|
|||
|---|---|---|---|
|
#18+
Сервер и раньше выполнял, тока команда шла через ADO: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. а ей нужно было передать логин-пароль ЕЩЕ раз ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2004, 17:14:26 |
|
||
|
ODBC-логин?
|
|||
|---|---|---|---|
|
#18+
Alexus12при этом варианте логин-пароль будут записаны в строку подключения всех таблиц, так? И после закрытия базы они не испарятся - заходи кто хочешь под чужим логином и радуйся 8( Опасно... А вы пробовали? если нет пустого аккаунта, то во при следуюшем входе до таблиц достучаться нельзя. Пароль слетает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2004, 18:16:15 |
|
||
|
ODBC-логин?
|
|||
|---|---|---|---|
|
#18+
AllTis ==> Set db = CurrentDb For Each td In db.TableDefs If td.Connect <> "" Then DoCmd.RunSQL "DROP TABLE [" & td.name & "]" Next ;) Dim td As DAO.TableDef Dim MyConnectionString As String ..... ' Перелинковка связанных таблиц With CurrentDb For Each td In .TableDefs If td.Connect <> "" Then DoCmd.RunSQL "DROP TABLE [" & td.Name & "]" DoCmd.TransferDatabase acLink, "ODBC", _ MyConnectionString, acTable, td.SourceTableName, td.Name End If Next End With Это работает для таблиц, имеющих ключевое поле. В противном случае пользователь BadBoy почемывая репу думает, какое поле назначить индексным (аксесс выдаст окно дозапроса параметров). Но что делать с запросами к серверу? Новая строка присоединения заносится, но будет работать только после перезагрузки приложения. Пользователь MyFavoriteUser логинится, но запрос к серверу идет от "прежнего пользователя" BadBoy и только после перезагрузки приложения для MyFavoriteUser вызов ХП сработает... With CurrentDb j = .QueryDefs.Count For i = 0 To j - 1 If .QueryDefs(i).Type = dbQProcedure Then .QueryDefs(i).Connect = MyConnectionString End If Next i .QueryDefs.Refresh End With Что делать бум, господа эксперты??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2004, 15:02:48 |
|
||
|
ODBC-логин?
|
|||
|---|---|---|---|
|
#18+
2 Virtual Soldier, retired простите, а что смешного в моём коде? Мне не надо перебирать все прилинкованные табл, находящиеся в БД. БД постоянно растёт, что добавляется, что-то удаляется. Мне нужны именно те табл, котор. есть на сервере (в моём случае MySQL). автор Это работает для таблиц, имеющих ключевое поле. В противном случае пользователь BadBoy почемывая репу думает, какое поле назначить индексным (аксесс выдаст окно дозапроса параметров). при использовании конструкции Код: plaintext 1. 2. 3. 4. 5. авторНовая строка присоединения заносится, но будет работать только после перезагрузки приложения. тоже не наблюдал. Всё работает сразу при загрузке приложения. Если я правильно понимаю, то запрос к серверу обычный readonly ADO recordset, который в кач-ве connectionstring как раз и берёт строку подключения запроса к серверу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2004, 15:31:32 |
|
||
|
ODBC-логин?
|
|||
|---|---|---|---|
|
#18+
2ALTis в Вашем коде ничего смешного нет. то ли "не удел", то ли "битый", Virtual Soldier чаще смеется над своим кодом, который иногда не светлее "тёмных электрических сил". некоторое время я бьюсь над аналогичной проблемой. скопировал Ваш код и "потерял" линки - не хватало прав для прочтения первой же таблицы на сервере, как раз для пользователя BadBoy, под логином коего я коннектился к MS SQL БД ;) в моем случае использовать ADO нежелательно, так же, как и ADP. одно и то же клиентское место может быть использовано разными пользователями. Что с ними происходит я описал (после переопределения коннекшн стринг изменения вступают в силу при перезагрузке приложения, что есть нехорошо). на "чистую" MS Windows XP установлен "чистый" Office XP SP1 with FrontPage. Сервер - MS SQL 2000 SP2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2004, 17:44:05 |
|
||
|
ODBC-логин?
|
|||
|---|---|---|---|
|
#18+
Сделайте .QueryDefs(i).Connect без юзера и пароля (т.е. вообще не предо/переопределяйте) пусть запускаются под тем, чей сеанс. (кто первый открыл хоть что-то на сервере в этом сеансе). в .Execute (для исполнимых) (можете) передавайте и пароль и логин непосредственно при исполнении. + В текущем рабочем сеансе не должен меняться юзер. (логиниться к таблицам только при входе в приладу, больше приглашений не давать). Т.е. с того же места новый юзер должен открывать то же приложение еще раз. Иначе достаточно открыть любую таблицу как GoodMan и запрос, в строке которого еще до начала сеанса прописан BadBoy (и никто его не менял) откроется и не спросит пароля. (т.е. откроется из-под GoodMan) Или поясните свою мысль/проблему иначе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2004, 19:18:03 |
|
||
|
ODBC-логин?
|
|||
|---|---|---|---|
|
#18+
2BadBoy Ниже приведен код моей текущей "миссии" (my primary combat mission), в которой мне приказано добиться следующей цели: Предыдущий Пользователь входит под своим логином и безмятежно трудится. Другой Пользователь, возжелавший потрудиться на том же каунтупере (устройстве, притупляющем способность к устному счету или My IBM PC), договаривается с Предыдущим Пользователем о Возможности Завершения Приложения. Предыдущий пользователь Завершает Приложение и Другой Пользователь, щелкнув мышь, находясь на ярлычке приложения, единственный раз вводит свой логин и пароль, после чего "take a cup of coffeе and relax", пока каунтупер предсказывает светлое будущее. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. Вот то, что происходит в реальности: Другой Пользователь успешно вводит свой логин и пароль, но всё, как бы, напоминает День Сурка - хранимая процедура запускается от имени Предыдущего Пользователя, несмотря на то, что в строке подключения ХП сохранен правильный логи и пароль (это видно и в соответствующем свойстве и в служебных таблицах MSysObjects, MSysQueries). "take a cup of coffeе" не получается... Теребя мышиный хвост, Другой Пользователь выгружает приложение и снова щелкает по ярлычку. Вводит логин. Вводит пароль. И только после этой престидижитации "take a cup of coffeе and relax"... В форме, наименование которой установлено в параметрах запуска, размещен выпадающий список, его содержимое зависит от текущего пользователя, причем, источник строк упомянутого списка - ХП. Сейчас, BadBoy, я воплощаю в жисть Ваш совет. Сенкс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2004, 13:46:45 |
|
||
|
ODBC-логин?
|
|||
|---|---|---|---|
|
#18+
очепятка: DoCmd.TransferDatabase acQuery следует читать как DoCmd.TransferDatabase acLink ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2004, 15:15:38 |
|
||
|
ODBC-логин?
|
|||
|---|---|---|---|
|
#18+
3BadBoy Спасибо за мысль, BadBoy. Чокнуться можно: и Предыдущий Пользователь, и Другой Пользователь, и даже сам GoodWin "тэйк э кап оф коффи энд рилакс"... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. Перед закрытием приложения Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2004, 16:26:58 |
|
||
|
ODBC-логин?
|
|||
|---|---|---|---|
|
#18+
наверное это не совсем хорошо. Т.к. после аварийного завершения .QueryDefs(i).Connect <> "ODBC;" и, более того, коннекты запросов, кажется, содержат пароль и логин битым текстом (в отличии от таблодефов, если не указан параметр "хранить пароль"). Т.е. достаточно открыть приложение после падения (или подключиться к его файлу извне и просмотреть .QueryDefs(i).Connect), и пароль Гудвина и логин будет известен. С другой стороны, если во всех .QueryDefs(i).Connect прописаны те же самые "сервер" и "датабаза", что и в первом совершенном соединении (таблицы, запроса), осуществленного к базе, аксесс откроет эти запросы под тем юзером, под кем проходил ("первый") коннект. (Видимо это св-во аксеса. "право первой .кхм. связи". Если завершить приложение, но не выходить из аксесса, то, повторно открыв файл б.д приложения можно открыть любую таблицу или запрос, (к той же базе сервера), не указывая логина и пароля. Запрос происходит, похоже, только если строка подключения указывает на другой сервер или базу данных (про дсн врать не хочу - не пользуюсь). Держит ли аксесс какой -нить выделенный коннект до упора (или хранит только его параметры) - не понятно. Что происходит, когда в сеансе открывалось несколько баз (серверов) точно не исследовал (пользовался только в узко прикладных целях). Вообще-то я пользуюсь чуть модифицированным кодом от SSY (аналог ветки с DoCmd.TransferDatabase в вашем коде + таблица подключаемых таблиц/ключей - чтобы не терять таблицы при ошибках, + иметь квазиключи для таблиц без ключей (вью)), в который ввел разве что таблицу баз (для перелинковки с отладочной на работающую базы), и еще какие-то мелочи. Запросы програмно не линкую, а пользую строку подключения без юзера и пароля. (после процедуры логина они (как показывает практика) автоматом используют параметры подключившегося юзера). Но исполняемые запросы к серверу получают (на всякий случай) строку подключения при выполнении (.Execute ) вне зависимости, сохраненные они, или просто строка SQL. Примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2004, 19:09:49 |
|
||
|
ODBC-логин?
|
|||
|---|---|---|---|
|
#18+
автор Держит ли аксесс какой -нить выделенный коннект до упора посмотрел. Держит. Коннект пропадает только после закрытия самого Аксесса. Но вот в объектной модели Аксесса ничего, что звалось бы Воркспейсис(0).Коннекшнз не видно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2004, 19:14:54 |
|
||
|
ODBC-логин?
|
|||
|---|---|---|---|
|
#18+
Разделим процесс разработки приложения на тривиальные стадии: разработка и издание. Для «внутренней» версии 1.00 beta я, обычно, не разделяю проект на два файла (mdb-клиент и mdb-таблицы, включая связанные таблицы и запросы), поскольку GoodWin занят Страшилой, и его аппетит «приходит во время еды»… Другими словами, редкий Заказчик в состоянии с первой итерации формализовать свои Исходные Требования и в тесном контакте с Разработчиком, породить Техническое Задание, разработанное не как документ ради документа, а как документ, в котором оговорено всё, вплоть до «третьего стакана» (известный анекдот о программистах, где на ночь устанавливаются два стакана – один, если захочется пить, другой – если не захочется. Думаю, следует устанавливать три стакана – третий заполнен наполовину: если захочется чуть-чуть). Как только готова версия 1.00, появляется смысл разделить проект на две редакции – «для разработчика» и «для конечного пользователя», независимо от наличия в разделе ТЗ «Требования к исходным кодам» пункта «Приложение поставляется с исходным кодом». Исходный код «редакции для разработчика» содержит модуль с процедурой RebuildApplicationForEndUser. Эта процедура создает новый mdb файл; экспортирует в него всё содержимое проекта приложения (несколько модифицируя исходный код модулей); создает рабочую группу, включает пользователей, удаляет Admin аккаунт, задает права и т.п.; оптимизирует запросы (для оптимизации запроса его необходимо открыть и после этого сохранить, так написано в библии от Билли и это действительно так), словом, всё то, что надо сделать «вручную». Ручное или программное перемещение объектов в конечные файлы «для конечного пользователя» обусловлено отсутствием в Microsoft Access Object Library системной процедуры вида CleanUpSysTables… Это действие позволяет избежать наведенных проблем: беспричинное увеличение времени обращения как к встроенным таблицам, так и к присоединенным, мерцающие ошибки вида «передача управления на несуществующую закладку» (ну нет Bookmark в проекте), спонтанные потери линков, потери управления (нет неинициализированных ссылочных переменных, нет «магии» с хитрым переопределением указателей) и многое другое. Нехитрое действие возвращает веру в мощь Access в пределах назначения, оговоренного в документах от Билли, укрепляет уверенность в собственных силах, подтверждая факт того, что не столько важен язык программирования (на чем писать? Паскаль, Модула, Ада, Си, просто Васик?.. Так, чтоб один кнопель – BuildMyApp и вперед за убитыми енотами), как важна дисциплина ;))) В редакции для конечного пользователя .mde файл (клиент) и .mdb файл таблиц и запросов защищены на уровне групп пользователей. В этом случае никто не сможет открыть ни .mde, ни .mdb файл. Причем, если создавать короткий ID в мастере защиты, например, 4 литеры, скорость будет протрясающая, длинный ID несколько сбавит прыть, но юный хацкер удручен. Для старого хацкера можно упрятать приложение вместе с файлом рабочих групп на PGP диск или правильно проадминенный NTFS том, на который заходят проверенные пользователи правильно проадминенного домена (в нужные настройки даже продвинутые программисты да сисадмины редко лезут, благодаря очень качественной документации от Билли или тому, что убитых енотов за это – фигвам, либо, порой, некому оценить, либо безопасности уделяют мало внимания, закладывая риск в стоимость готовой продукции, например). Что-то я сильно отвлёкся. Конечно, следует добавить в ErrorHandler удаление информации о коннекте для фатальных ошибок. Сенкс, BadBoy. BadBoy >> «Запрос происходит, похоже, только если строка подключения указывает на другой сервер» – Да. Это всегда так происходит. BadBoy >> «Запросы програмно не линкую» – Я не линковал программно хп-запросы до тех пор, пока в стартовой форме frmMain не появился возвращающий записи хп-запрос, назначенный в качестве источника строк для frmMain!MyPickList… Дело в том, что MyPickList.OnLoad совершается до frmMain.OnLoad, другими словами, вход пользователя в SQL Server (т.е. обращение к OpenODBCDirectConnection из приведенного выше кода) происходит после события MyPickList.OnLoad. Поскольку сведения о подключении пользователя, завершившего работу с приложением (закрывшим mde файл) сохранены в mde, то… Вот тут-то я «неподецки» посмеялся. Так, пора к GoodWin – за свежими острыми мозгами… ;))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2004, 14:25:06 |
|
||
|
ODBC-логин?
|
|||
|---|---|---|---|
|
#18+
Кое-что из Справки MS Accesss Порядок событий в объектах базы данных Порядок событий элементов управления в формах События элемента управления возникают в форме при переводе фокуса на элемент управления и при изменении или обновлении данных в элементе управления. ...При переводе фокуса на элемент управления в форме — например, при открытии формы, содержащей один или несколько активных элементов управления, или при переходе на другой элемент управления в той же форме — возникают события Вход (Enter) и Получение фокуса (GotFocus): Вход -> Получение фокуса Когда пользователь открывает форму, эти события возникают после событий, связанных с открытием формы, таких как Открытие (Open), Включение (Activate) или Текущая запись (Current), в такой последовательности: Открытие (форма) -> Включение (форма) -> Текущая запись (форма) -> Вход (элемент) -> Получение фокуса (элемент)... Упомянутая мной выше форма frmMain содержала два свободных поля и, следующее за ними в порядке возрастания форм-индекса поле MyPickList, причем MyPickList.RowSource="MyStoredProc". В коде frmMain ставим точку прерывания на первом операторе обработчика frmMain.OnLoad. Принудительно рекомпилируем и сохраняем. Устанавливаем frmMain стартовой формой приложения. Удаляем содержимое строк подключения запросов к серверу и все прилинкованные таблицы. Закрываем Ms Access. Загружаем приложение. Получаем окно Select Data Source... Нет ни одной линкованной таблицы. Есть только одно поле MyPickList. Таким образом, событие MyPickList.OnLoad наступает раньше события frmMain.OnLoad, что не соответствует приведенной выдержке из MS Access Help System, а в точности соответствует порядку следования событий в формах, содержащих подчиненные формы: события в подчиненных формах происходят перед событиями мастер-формы. Впрочем, я еще не успел проапгрейдить свои мозги у GoodWin... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2004, 15:43:49 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32726833&tid=1671152]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
151ms |
get topic data: |
15ms |
get forum data: |
4ms |
get page messages: |
95ms |
get tp. blocked users: |
2ms |
| others: | 239ms |
| total: | 544ms |

| 0 / 0 |
