|
|
|
Создание ODBC DSN источников - как правильно ?
|
|||
|---|---|---|---|
|
#18+
Создаю DSN с помощью след функции : Код: 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. По шагам в Debug mode все работает идеально! Но вот проблема в том, что в runtime - не успевает сразу после создания DSN использовать TestCnn.Open и без придуманного цикла программа вываливается с ообщением об ошибке - пришлось организовать цикл с TestCnn.Open StrCnn .... Resume. Как сделать красивее ? Т.е. хотелось бы не тестировать с помощью открытия TestCnn, а проверять - создан ли уже DSN или нет ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2008, 11:55 |
|
||
|
Создание ODBC DSN источников - как правильно ?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2008, 13:21 |
|
||
|
Создание ODBC DSN источников - как правильно ?
|
|||
|---|---|---|---|
|
#18+
А лучше поставь DoEvents перед Open. А еще вместо OnError Goto 1 - Resume Next. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2008, 13:22 |
|
||
|
Создание ODBC DSN источников - как правильно ?
|
|||
|---|---|---|---|
|
#18+
2 Antonariy А лучше поставь DoEvents перед Open. А еще вместо OnError Goto 1 - Resume Next. > За DoEvents спасибо, что вспомнил, а Resume Next не позволит мне после ошибки использовать Resume, т.к. Resume не в блоке обработки ошибок игнорируется.Но это к слову, хотелось-то другое - не тестировать с помощью открытия TestCnn, а проверять - создан ли уже DSN или нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2008, 14:25 |
|
||
|
Создание ODBC DSN источников - как правильно ?
|
|||
|---|---|---|---|
|
#18+
> Автор: kefi > 2 Antonariy > А лучше поставь DoEvents перед Open. А еще вместо OnError Goto 1 - > Resume Next. > > > За DoEvents спасибо, что вспомнил, а Resume Next не позволит мне > после ошибки использовать Resume, т.к. Resume не в блоке обработки ошибок > игнорируется.Но это к слову, хотелось-то другое - > не тестировать с помощью открытия TestCnn, а проверять - создан ли > уже DSN или нет Практически из МСДН код. можно проверить на созданость этих ключей или просто этим создавать Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2008, 14:45 |
|
||
|
Создание ODBC DSN источников - как правильно ?
|
|||
|---|---|---|---|
|
#18+
kefiа Resume Next не позволит мне после ошибки использовать Resume, т.к. Resume не в блоке обработки ошибок игнорируется.Я имел ввиду On Error Resume NExt ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2008, 15:01 |
|
||
|
Создание ODBC DSN источников - как правильно ?
|
|||
|---|---|---|---|
|
#18+
[quot Игорь Горбонос ] Практически из МСДН код. можно проверить на созданость этих ключей или просто этим создавать [/quot] спасибо, да это может подойти - проверять с помощью регистра. 2 Antonariy > а Resume Next не позволит мне после ошибки использовать Resume, т.к. Resume не в блоке обработки ошибок игнорируется. Я имел ввиду On Error Resume NExt я понял. я именно на это и ответил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2008, 15:26 |
|
||
|
Создание ODBC DSN источников - как правильно ?
|
|||
|---|---|---|---|
|
#18+
Во первых, вот эти две строки зачем? вот так не проще будет? Код: plaintext 1. Код: plaintext Дальше идет вообще совершенно не нужный кусок кода: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. kefiПо шагам в Debug mode все работает идеально! Но вот проблема в том, что в runtime - не успевает сразу после создания DSN использовать TestCnn.Open и без придуманного цикла программа вываливается с ообщением об ошибке Ошибку ты нам сообщишь? А вообще-то такого не может быть. Там нету нигде многопотоковости и все вызовы самого ODBC интерфейса всегда синхронные. У тебя ошибка где-то в другом месте. kefiКак сделать красивее ? Т.е. хотелось бы не тестировать с помощью открытия TestCnn, а проверять - создан ли уже DSN или нет ?Проверить существование DSN можно через функцию SQLDataSources() (правда сложное имя для угадывания?) Она тебе вернет список всех доступных данному юзеру dsn'ов системных, пользовательских или файловых. Во вторых, в чем вообще смысл создавание dsn'ов? Если твоя программа сама знает всю строку коннекта, то dsn вообще нафиг не нужен. Отдавай строку в SQLDriverConnect() и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2008, 16:45 |
|
||
|
Создание ODBC DSN источников - как правильно ?
|
|||
|---|---|---|---|
|
#18+
Прошу прощения, что удалось ответить только сейчас White OwlВо первых, вот эти две строки зачем? вот так не проще будет? ... конечно, проще, но суть не в этом, а ...- см. ниже Ошибки создания DSN надо читать через SQLInstallerError() НЕТ ошибок-то, - DSN создается успешно . [/quot] Дальше идет вообще совершенно не нужный кусок кода: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Кусок совершенно нужный, т.к. он показывает ,что в этом коде после создания, причем УСПЕШНОГО DSN'а коннект сразу не установить - придется сделать несколько сотен попыток. Но это было из первого поста неочевидно, (см. ниже тест) функцию SQLDataSources() (правда сложное имя для угадывания?) Для угадывания любой слово сложное. За наводку спасибо. Во вторых, в чем вообще смысл создавание dsn'ов? Если твоя программа сама знает всю строку коннекта, то dsn вообще нафиг не нужен. Отдавай строку в SQLDriverConnect() и все. Программа строку знает, только на случай несуществования DSN (т.е. в случае, елси он нес существует, то - будет создан по этой строке). А зачем DSN сам по себе, - так это уже вопрос за рамками темы, да и не суть это. Ошибку ты нам сообщишь? А вообще-то такого не может быть. Там нету нигде многопотоковости и все вызовы самого ODBC интерфейса всегда синхронные. У тебя ошибка где-то в другом месте. Вот здесь ключ к разгадке. В программе моей, купюру из кооторой я привел в перволм посте, действительно ошибка, а может быть и нет - хотелось бы понять. Короче, вот программка-тест в законченном варианте : Код: 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. Суть оказалась в выделенном тексте - кто-то может объяснить - почему же так? НУ была неудачная попытка использования DSN, еще ДО его создания, - ну и что , зачем Nothing в этот нейдачный Connection Cnn класть для того, чтобы следующий совершенно отдельный Connection TestCnn мог выполнить с первого раза после создания DSN удачную попытку коннекта ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2008, 16:23 |
|
||
|
Создание ODBC DSN источников - как правильно ?
|
|||
|---|---|---|---|
|
#18+
Черт, текст в коде не выделился с сутью-то ;) ... Вот он ' Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2008, 16:24 |
|
||
|
Создание ODBC DSN источников - как правильно ?
|
|||
|---|---|---|---|
|
#18+
Ну и еще раз уже вопрос : Суть оказалась в выделенном тексте - кто-то может объяснить - почему же так? НУ была неудачная попытка использования DSN, еще ДО его создания, - ну и что , зачем Nothing в этот неудачный Connection Cnn класть для того, чтобы следующий совершенно отдельный Connection TestCnn мог выполнить с первого раза после создания DSN удачную попытку коннекта ? Т.е. м.б. многопотоковости и нет при создании DSN, но как все-же объяснить феномен ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2008, 16:29 |
|
||
|
Создание ODBC DSN источников - как правильно ?
|
|||
|---|---|---|---|
|
#18+
Убери из strConn указание драйвера: StrCnn = "DSN=TestExcel;Dbq=C:\1\Книга1.XLS;" И вообще никогда не указывай вместе DSN и DRIVER в одной строке коннекта. Либо то, либо другое. Но никогда вместе. Во первых, это бессмысленно - DSN хранит имя драйвера внутри себя в любом случае. Во вторых, сам себя запутаешь - какой драйвер в реальности будет использован? В третьих, на некоторых версиях драйвера можем получить наблюдаемую тобой картинку (там еще сборщик мусора мешается и общая загадочность экселевских драйверов). Единственный случай когда DSN и DRIVER должны появляться вместе это в момент создания DSN и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2008, 17:56 |
|
||
|
Создание ODBC DSN источников - как правильно ?
|
|||
|---|---|---|---|
|
#18+
White OwlУбери из strConn указание драйвера: StrCnn = "DSN=TestExcel;Dbq=C:\1\Книга1.XLS;" И вообще никогда не указывай вместе DSN и DRIVER в одной строке коннекта. Либо то, либо другое. Но никогда вместе. Во первых, это бессмысленно - DSN хранит имя драйвера внутри себя в любом случае. Во вторых, сам себя запутаешь - какой драйвер в реальности будет использован? В третьих, на некоторых версиях драйвера можем получить наблюдаемую тобой картинку (там еще сборщик мусора мешается и общая загадочность экселевских драйверов). Единственный случай когда DSN и DRIVER должны появляться вместе это в момент создания DSN и все. Да , вроде так все, спасибо. Только это не только с Excel'ским драйвером наблюдалось. А как несчет ";DriverId=790" - это тоже нужно выкинуть при коннекте, а при создании DSN оставить ? PS. Кстати, насчет того - зачем DSN - вот только что обнвружил фишку, когда ODBC DSN и ODBC DSN-Less Connections работают совершенно по разному. по одному и тому же запросу (- тот же Excel) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2008, 18:46 |
|
||
|
Создание ODBC DSN источников - как правильно ?
|
|||
|---|---|---|---|
|
#18+
> Автор: kefi > PS. Кстати, насчет того - зачем DSN - вот только что обнвружил фишку, > когда ODBC DSN и ODBC DSN-Less Connections работают совершенно по разному. > по одному и тому же запросу (- тот же Excel) Т.е. ты хочешь сказать что select * from sheet_name вернет разные данные? =-O Не верю! (С) Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2008, 19:00 |
|
||
|
Создание ODBC DSN источников - как правильно ?
|
|||
|---|---|---|---|
|
#18+
авторЕдинственный случай когда DSN и DRIVER должны появляться вместе это в момент создания DSN и все. Так и там тоже вроде как необязательно, Там же отдельным параметром драйвер передается -sDriver в моем примере Игорь Горбонос > Автор: kefi > PS. Кстати, насчет того - зачем DSN - вот только что обнвружил фишку, > когда ODBC DSN и ODBC DSN-Less Connections работают совершенно по разному. > по одному и тому же запросу (- тот же Excel) Т.е. ты хочешь сказать что select * from sheet_name вернет разные данные? =-O Не верю! (С) я тоже по поводу этог запроса не сомневаюсь , почти а вот UPDATE в одном случае сработает, а в другом выдаст ошибку - обнаружилось , когда обновлял я таким образом одну из двух связаных таблиц-именованнызх диапазонов в Excel. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2008, 19:17 |
|
||
|
Создание ODBC DSN источников - как правильно ?
|
|||
|---|---|---|---|
|
#18+
kefiТолько это не только с Excel'ским драйвером наблюдалось.Экселевский драйвер не единственный драйвер с повышеной глюкавостью :) kefiА как несчет ";DriverId=790" - это тоже нужно выкинуть при коннекте, а при создании DSN оставить ?А это по желанию.... Либо там, либо там. Если оно и сохранено в DSN и указано в строке коннекта - указаное в строке имеет приоритет. Если в строке указать какой-то ключ дважды - играть будет первый, последующие будут проигнорированны. kefiPS. Кстати, насчет того - зачем DSN - вот только что обнвружил фишку, когда ODBC DSN и ODBC DSN-Less Connections работают совершенно по разному. по одному и тому же запросу (- тот же Excel)Этого не может быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2008, 19:30 |
|
||
|
Создание ODBC DSN источников - как правильно ?
|
|||
|---|---|---|---|
|
#18+
kefi авторЕдинственный случай когда DSN и DRIVER должны появляться вместе это в момент создания DSN и все. Так и там тоже вроде как необязательно, Там же отдельным параметром драйвер передается -sDriver в моем примереНу да, верно. В четвертом параметр SQLConfigDataSource указывать не нужно. Он все равно использует имя драйвера из третьего параметра. Но они ж "в одной команде" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2008, 19:33 |
|
||
|
Создание ODBC DSN источников - как правильно ?
|
|||
|---|---|---|---|
|
#18+
White OwlЭтого не может быть. НУ пришлось привести Доказательства - см в приложении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2008, 20:11 |
|
||
|
Создание ODBC DSN источников - как правильно ?
|
|||
|---|---|---|---|
|
#18+
kefi White OwlЭтого не может быть. НУ пришлось привести Доказательства - см в приложении.Ты не книгу показывай, ты показывай полную строку коннекта для обоих случаев и полностью весь DSN. Не забывай, что у драйвера есть много разных параметров которые определяют его работу. Если этот параметр не задать - драйвер использует значение по умолчанию (это обычно и происходит в dsn-less работе). А при создании DSN'а ты все эти параметры можешь подправить и сохранить... и не всегда правка правильная :) DSN это всего лишь метод сохранения параметров подключения к базе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2008, 21:19 |
|
||
|
Создание ODBC DSN источников - как правильно ?
|
|||
|---|---|---|---|
|
#18+
White Owl kefi White OwlЭтого не может быть. НУ пришлось привести Доказательства - см в приложении.Ты не книгу показывай, ты показывай полную строку коннекта для обоих случаев и полностью весь DSN. Не понял?! Все макросы и строки коннекта см в книге, ты что решил, что решил продемонстрировать свое умение создавать Excel'ские книжки ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2008, 00:09 |
|
||
|
Создание ODBC DSN источников - как правильно ?
|
|||
|---|---|---|---|
|
#18+
Что касается отличия свойств Cnn.Properties , то отличия DSN (Cnn) от DSN-LESS (Cnn2) у меня оказались следующие : Properties (N,Name,Value): 9 Data Source Name TestExcel 86 Extended Properties DSN=TestExcel;DBQ=C:\Documents and Settings\kefi\Мои документы\Книга1.xls;Driver={Microsoft Excel Driver (*.xls)};DriverId=790;MaxBufferSize=2048;PageTimeout=5; DBQ=C:\Documents and Settings\kefi\Мои документы\Книга1.xls;Driver={Microsoft Excel Driver (*.xls)};DriverId=790;MaxBufferSize=2048;PageTimeout=5; Cnn.Properties.Count = Cnn2.Properties.Count =92 Т.е. ничего влияющего на различие, а различие-то таково, что при DSN-LESS говорит, что запрос необновляемый, в отличие от DSN. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2008, 01:21 |
|
||
|
Создание ODBC DSN источников - как правильно ?
|
|||
|---|---|---|---|
|
#18+
kefi White Owl kefi White OwlЭтого не может быть. НУ пришлось привести Доказательства - см в приложении.Ты не книгу показывай, ты показывай полную строку коннекта для обоих случаев и полностью весь DSN. Не понял?! Все макросы и строки коннекта см в книге, ты что решил, что решил продемонстрировать свое умение создавать Excel'ские книжки ?Нет, просто разбираться в макросах совершенно не привлекает :) К тому же, комментарии в модулях написанные по русски не читаются на нерусских виндах/офисе и очень раздражают. kefi Properties (N,Name,Value): 9 Data Source Name TestExcel 86 Extended Properties DSN=TestExcel;DBQ=C:\Documents and Settings\kefi\Мои документы\Книга1.xls;Driver={Microsoft Excel Driver (*.xls)};DriverId=790;MaxBufferSize=2048;PageTimeout=5; DBQ=C:\Documents and Settings\kefi\Мои документы\Книга1.xls;Driver={Microsoft Excel Driver (*.xls)};DriverId=790;MaxBufferSize=2048;PageTimeout=5;ээээ??? Расшифруй. Можешь написать вот так: для dsn-less строка коннекта = "...." Для dsn строка коннекта = "..." и отдельно содержимое dsn если выгрузить его из регистри через regedit? Вот тогда можно будет разобраться в чем же там отличие... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2008, 17:52 |
|
||
|
Создание ODBC DSN источников - как правильно ?
|
|||
|---|---|---|---|
|
#18+
White Owl> Нет, просто разбираться в макросах совершенно не привлекает :) К тому же, комментарии в модулях написанные по русски не читаются на нерусских виндах/офисе и очень раздражают. > А если скопировать в редактор Far'а ? Впрочем , если дело только в комментариях. вот пожалуйста, что в этих макросах. Код: 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. Я сравнил Properties для одного коннекта с DSN (Cnn ) и другого без DSN (Cnn2) и получил различие всего в двух местах с Index=9 и Index=86 : Нижн приведены Index, Name и VAlue свойства Properties для Cnn и Cnn2 Index Name Value VAlueCnn2 : 9 Data Source Name TestExcel <ЗдесьПустодляCnn2> 86 Extended Properties DSN=TestExcel;DBQ=C:\Documents and Settings\kefi\Мои документы\Книга1.xls;Driver={Microsoft Excel Driver (*.xls)};DriverId=790;MaxBufferSize=2048;PageTimeout=5; Для Cnn2: DBQ=C:\Documents and Settings\kefi\Мои документы\Книга1.xls;Driver={Microsoft Excel Driver (*.xls)};DriverId=790;MaxBufferSize=2048;PageTimeout=5; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2008, 19:32 |
|
||
|
Создание ODBC DSN источников - как правильно ?
|
|||
|---|---|---|---|
|
#18+
ну и : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2008, 19:36 |
|
||
|
Создание ODBC DSN источников - как правильно ?
|
|||
|---|---|---|---|
|
#18+
kefiну и : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Видишь тут куча параметров дополнительных есть: SafeTransactions, Threads, FirstRowHasNames? А в dsn-less ты их не упоминаешь, зато указываешь лишние MaxBufferSize и PageTimeout... Чтобы коннект через dsn и dsn-less был совсем одинаковым, надо в dsn-less упомянуть ВСЕ параметры выставленные в DSN. Пойми, что DSN это всего-лишь разбитая на пары и сохраненная в регистри dsn-less строка. Самый простой способ сформировать правильную dsn-less строку коннекта это мышкой создать FileDSN, получишь тот же самый визард что и при создании системного или пользовательского dsn'а. Там надо повторить свой оригинальный DSN вплоть до каждого "самого незначительного" поля. Потом пойти в каталог где хранятся эти файловые dsn, и открыть его как обычный текстовый файл. Там будут пары ключ-значение на каждой строке. Склей все строки в одну разделяя пары через точку с запятой и получишь искомое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2008, 20:09 |
|
||
|
|

start [/forum/topic.php?fid=60&fpage=195&tid=2162458]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
18ms |
get forum data: |
3ms |
get page messages: |
132ms |
get tp. blocked users: |
2ms |
| others: | 233ms |
| total: | 470ms |

| 0 / 0 |
