0 / 0 / 0
Регистрация: 29.10.2007
Сообщений: 108

Как программно создать DSN?

27.11.2007, 11:44. Показов 1991. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Или подскажите как быть после того, как я создам дистрибутив, мне что DSN вручную прописывать на каждом компе?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.11.2007, 11:44
Ответы с готовыми решениями:

Как программно создать DSN для ODBC?
Как программно создать DSN для ODBC?

Как создать System-DSN из программы VB ?
Как создать System-DSN из программы VB ?

Пример создания dsn программно
О почтенный народ, не выручите ли примерчиком кода? Имеется: параметры для создания системного odbc Нужно 2 фрагмента: 1) проверка...

9
0 / 0 / 0
Регистрация: 17.10.2007
Сообщений: 84
27.11.2007, 15:31
Не думал что в наше время еще кто-то dsn пользуется
Я когда-то, давно, накидал модуль для проверки есть ли такая запись dsn, если нет, то создать. Делал я это под mdb и Sybase Sql Anywhere, но переделать можно под что угодно. Только код не очень чисто отлажен, неохота тогда было долго возиться.
----------------------------------------------------
Option Explicit

'îïðåäå& euml;åíèå îïåð.ñ&egrav e;ñòåì&ucirc ;
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type

Private Const VER_PLATFORM_WIN32s = 0
Private Const VER_PLATFORM_WIN32_WINDOWS = 1
Private Const VER_PLATFORM_WIN32_NT = 2
Private Declare Function GetVersionEx Lib 'kernel32' Alias 'GetVersionExA' (lpVersionInformation As OSVERSIONINFO) As Long

Private Const REG_SZ = 1 'Constant for a string variable type.
Private Const REG_BINARY = 3 'Constant for Binary
Private Const REG_DWORD = 4 '32-bit number
Private Const KEY_QUERY_VALUE = &H1
Private Const ERROR_SUCCESS = 0&
Private Const HKEY_LOCAL_MACHINE = &H80000002

'Creates a Key In Registry
Private Declare Function RegCreateKey Lib 'advapi32.dll' Alias 'RegCreateKeyA' (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
'API FOR STRING
Private Declare Function RegSetValueEx Lib 'advapi32.dll' Alias 'RegSetValueExA' (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
'API FOR DWORD
Private Declare Function RegSetValueExA Lib 'advapi32.dll' (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByRef lpData As Long, ByVal cbData As Long) As Long
'API FOR BINARY
Private Declare Function RegSetValueExB Lib 'advapi32.dll' Alias 'RegSetValueExA' (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByRef lpData As Byte, ByVal cbData As Long) As Long
'API for closing the Registry Key
Private Declare Function RegCloseKey Lib 'advapi32.dll' (ByVal hKey As Long) As Long

Private Declare Function GetWindowsDirectory Lib 'kernel32' Alias 'GetWindowsDirectoryA' (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Declare Function RegOpenKeyEx Lib 'advapi32.dll' Alias 'RegOpenKeyExA' (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib 'advapi32.dll' Alias 'RegQueryValueExA' (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long ' Note that If you declare the lpData parameter as String, you must pass it By Value

Public Function CheckAndCreateDSN()
Dim DataSourceName As String
Dim DatabaseName As String
Dim Description As String
Dim DriverPath As String
Dim DriverName As String
Dim LastUser As String
Dim Regional As String
Dim Server As String

Dim lResult As Long
Dim hKeyHandle erSize
lResult = RegSetValueExA(hKeyHandle, 'MaxBufferSize', 0, REG_DWORD, MaxBufferSize, 4) 'write the value
'PageTimeOut
lResult = RegSetValueExA(hKeyHandle, 'PageTimeOut', 0, REG_DWORD, PageTimeOut, 4) 'write the value
'Threads
lResult = RegSetValueExA(hKeyHandle, 'Threads', 0, REG_DWORD, Threads, 4) 'write the value
'UserCommitSync
lResult = RegSetValueEx(hKeyHandle, 'UserCommitSync', 0&, REG_SZ, _
ByVal UserCommitSync, Len(UserCommitSync))

'Close the new DSN key.
lResult = RegCloseKey(hKeyHandle)

'Open ODBC Data Sources key to list the new DSN in the ODBC Manager.
'Specify the new value.
'Close the key.

lResult = RegCreateKey(HKEY_LOCAL_MACHINE, _
'SOFTWAREODBCODBC.INIODBC Data Sources', hKeyHandle)
lResult = RegSetValueEx(hKeyHandle, DataSourceName, 0&, REG_SZ, _
ByVal DriverName, Len(DriverName))
lResult = RegCloseKey(hKeyHandle)
Exit Function

ErrorHandler:
ErrorLog ('Îøèáê à ñîçäà&ia cute;èÿ DSN')
End Function

Private Function isSZKeyExist(szKeyPath As String, _
szKeyName As String, _
ByRef szKeyValue As String) As Boolean
Dim bRes As Boolean
Dim lRes As Long
Dim hKey As Long
lRes = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _
szKeyPath, _
0&, _
KEY_QUERY_VALUE, _
hKey)

If lRes <> ERROR_SUCCESS Then
isSZKeyExist = False
Exit Function
End If
lRes = RegQueryValueEx(hKey, _
szKeyName, _
0&, _
REG_SZ, _
ByVal szKeyValue, _
Len(szKeyValue))
RegCloseKey (hKey)

If lRes <> ERROR_SUCCESS Then
isSZKeyExist = False
Exit Function
End If
isSZKeyExist = True
End Function

Private Function checkWantedAccessDSN(szWantedDSN As String) As Boolean
Dim szKeyPath As String
Dim szKeyName As String
Dim szKeyValue As String
Dim bRes As Boolean

szKeyPath = 'SOFTWAREODBCODBC.INIODBC Data Sources'
szKeyName = szWantedDSN
szKeyValue = String(255, Chr(32))

If isSZKeyExist(szKeyPath, szKeyName, szKeyValue) Then
bRes = True
Else
bRes = False
End If

checkWantedAccessDSN = bRes
End Function

'&ocirc;&oacute;&iacute;&ecirc;&ouml;&eg rave;&yuml; &icirc;&iuml;&eth;&aring;&auml;&aring;&e uml;&aring;&iacute;&egrave;&yuml; &ecirc;&agrave;&ograve;&agrave;&euml;&ic irc;&atilde;&agrave; Windows system
' in: none
' out: &ccedil;&agrave;&iacute;&agrave;&divide; &aring;&iacute;&egrave;&aring; &acirc;&icirc;&ccedil;&acirc;&eth;&agrav e;&ugrave;&agrave;&aring;&ograve;&ntilde ;&yuml;
Private Function WindowsDirectory() As String
Dim sDir As String, sTemp As String * 256, nSize As Long
nSize = GetWindowsDirectory(sTemp, 255): sDir = Left(sTemp, nSize)
' sDir = 'C:WINDOWS'
WindowsDirectory = UCase$(sDir)
End Function

Private Function IsWindowsNT() As Boolean
Dim osvi As OSVERSIONINFO
osvi.dwOSVersionInfoSize = Len(osvi)
GetVersionEx osvi
IsWindowsNT = (osvi.dwPlatformId = VER_PLATFORM_WIN32_NT)
End Function

Private Function IsWindows98() As Boolean
Dim osvi As OSVERSIONINFO
osvi.dwOSVersionInfoSize = Len(osvi)
GetVersionEx osvi
IsWindows98 = (osvi.dwPlatformId = VER_
0
0 / 0 / 0
Регистрация: 17.10.2007
Сообщений: 84
27.11.2007, 15:38
Что-то русские буквы в коентариях у меня не захотели передаваться...
Если что непонятно, поясню.....
0
0 / 0 / 0
Регистрация: 29.10.2007
Сообщений: 108
27.11.2007, 17:44  [ТС]
мммда, а как-то попроцше нельзя?
0
2 / 2 / 1
Регистрация: 19.07.2007
Сообщений: 737
28.11.2007, 09:48
Смотри примеры в разделе Базы Данных - туда недавно кидал модуль.
0
0 / 0 / 0
Регистрация: 17.10.2007
Сообщений: 84
28.11.2007, 10:27
На самом деле код прост, если внимательно присмотреться. Премущество его в универсальности. Лишние навороты типа определение ОС и ее версии можно выкинуть. Можно, конечно, в пять строчек создать dsn-запись через метод RegisterDatabase объекта DBEngine, но как-то,imho, неочень это...и не все источники так регистрятся.
Счастливо.
0
1 / 1 / 0
Регистрация: 09.10.2007
Сообщений: 596
28.11.2007, 13:17
A funkziju SQLConfigDataSource popolzovat lomit?
0
0 / 0 / 0
Регистрация: 29.10.2007
Сообщений: 108
28.11.2007, 13:38  [ТС]
Честно говоря я и не знал о существовании такой функции, но вот проблема, посмотрел в MSDN, а там есть пример как создать DSN с Excelem, а с Access'om нет, с Excelem такой код:

SQLConfigDataSource(NULL,ODBC_ADD_DSN, 'Excel Files (*.xls)',
'DSN=New Excel Data Source*'
'Description=New Excel Data Source*'
'FileType=Excel*'
'DataDirectory=C:\EXCELDIR*'
'MaxScanRows=20*');
а ведь с Аццессом надо еще драйвер и тд и тп указывать, помогите кто может, плс...
0
1 / 1 / 0
Регистрация: 09.10.2007
Сообщений: 596
28.11.2007, 13:52
Nu a v chom problema? Na to i ODBC - EDINII dostup ko vsemu!

Vmesto Excel - Access i vseh problem.
Na ASP - Forume est primer sozdanija DSN pod Access.
I voobshe tut more primerov.
Vopros o progr. sozdanii DSN - odin iz popularneishih.
0
0 / 0 / 0
Регистрация: 23.12.2007
Сообщений: 17
23.12.2007, 13:20
Можно обойтись без DSN, проблема у меня была в том, что клиенты не хотели их использовать, а я не знал, как при открытии коннекшена АДО правильно составить строку. Ответ прост: посмотри, какие параметры (со значениями) прописываются в регистри при создании DSN, их и используй при открытии коннекшена, DSN будет тебе не нужен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.12.2007, 13:20
Помогаю со студенческими работами здесь

Надо создать System-DSN из программы VB.
Надо создать System-DSN из программы VB. Есть функция: Success=SQLConfigDataSource(Null,ODBS_ADD_SYS_DSN,Driver,Attributes) на...

Как программно создать 10 лабелов?
как программно создать 10 лабелов...?

Как программно создать обьект в VB?
Как програмно создать обьект в VB,например Label?

Как программно создать таймер?
Перепробовал уже много всяких вариантов (с New и без New) и никак не получается :( В интернете постоянно подсовывают варианты из VB.NET. ...

Как программно создать файл .xls???
Можт кто знает как из VB создать *.xls??? черканите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru