CRIAR ODBC VIA CODIGO

JCARLOS 09/10/2013 09:28:15
#429728
Bom dia.
Tenho o código que cria odbc 32 bits para o vb6.
Funciona bem até o Windows Vista. Às vezes funciona no 7, no W8 também não funciona.
Alguém sabe como resolver este problema?
Abraços.
LLAIA 09/10/2013 09:47:28
#429730
Como assim cria? Vc fala de realizar conexão?

Seria bom vc informar o erro.
JCARLOS 09/10/2013 10:08:07
#429733
Pra eu fazer a chamada de um Crystalreport, preciso passar a conexão via odbc para o report.
Para isso é necessário existir criada uma fonte de dados odbc 32 bits, isso pode ser feito pelo código ou à mão pelo windows(Ferramentas Administrativas/ODBC 32 bits).
Para não ter de criar à mão no usuário, uso uma rotina de criação pelo código vb6, porém em ambientes w7 e w8 não criam e também não causam nenhum erro no momento da criação.
O que quero é saber se alguém usa este método e se está funcionando em ambientes w7 e w8.
SINCLAIR 09/10/2013 15:42:58
#429768
Amigo...

Eu crio o ODBC pelo código, na verdade o código cria um .BAT e executa este arquivo .BAT que cria o ODBC.

Como eu nunca sei se a máquina terá Windows de 32 bits ou 64 bits, então eu na verdade crio 2 arquivos .BAT para executar, sendo um que cria dentro \windows\system32 (se for 32 bits vai funcionar e se for 64 bits dá erro e não cria, mas sem problemas, porque o outro .BAT cria lá) e um outro .BAT que cria em \windows\syswow64 (se for 64 bits, tudo certo, se for 32 bits dará erro, mas sem problemas, porque o .BAT anterior já teria criado em \windows\system32).

Gambiarra generalizada, é verdade... mas como na época eu não tinha tempo para fazer algo mais profissional, fiz assim e funciona até hoje, em todos os sistemas que instalo, incluindo Windows 7, Windows 8, Windows Server 2008 e qualquer outro Windows, até XP já teve. Como é rápido e funciona, nunca mexi nisto para [Ô]profissionalizar[Ô]. Como sempre falamos na faculdade de Análise de Sistemas (quando eu cursava, lá nos idos da descoberta do Brasil)... [Ô]solução momentaneamente permanente[Ô].

Tudo de bom.
JCARLOS 09/10/2013 16:58:18
#429787
Zeuzebio, o que tenho aqui é uma função ou uma sub, ató o win Vista funciona, porém, em w7(ás vezes dá certo depende do ambiente) e w8 não funciona.
Gostaria se possível que me mandasse este .bat, pois não sei como criar desta forma.
A Rotina que tenho é esta abaixo:

Private Const REG_SZ = 1 [ô]Constant for a string variable type.
Private Const HKEY_LOCAL_MACHINE = &H80000002

Private Declare Function RegCreateKey Lib [Ô]advapi32.dll[Ô] Alias _
[Ô]RegCreateKeyA[Ô] (ByVal hKey As Long, ByVal lpSubKey As String, _
phkResult As Long) As Long

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

Private Declare Function RegCloseKey Lib [Ô]advapi32.dll[Ô] _
(ByVal hKey As Long) As Long
Dim LastUser As String

Private Sub Cria_DSN()
Dim DataSourceName As String
Dim DatabaseName As String
Dim Description As String
Dim DriverPath As String
Dim DriverName As String
Dim Regional As String
Dim Server As String

Dim lResult As Long
Dim hKeyHandle As Long

[ô]Specify the DSN parameters.

DataSourceName = [Ô]NomedaFonte[Ô]
DatabaseName = [Ô]NomedoBD[Ô]
Description = [Ô]Orçamento/Compras/Contabilidade[Ô]
DriverPath = [Ô]C:\Windows\System32[Ô]
LastUser = [Ô]sa[Ô]
Server = 999.99.99.99
DriverName = [Ô]SQL Server[Ô]

[ô]Create the new DSN key.

lResult = RegCreateKey(HKEY_LOCAL_MACHINE, [Ô]SOFTWARE\ODBC\ODBC.INI\[Ô] & _
DataSourceName, hKeyHandle)

[ô]Set the values of the new DSN key.

lResult = RegSetValueEx(hKeyHandle, [Ô]Database[Ô], 0&, REG_SZ, _
ByVal DatabaseName, Len(DatabaseName))
lResult = RegSetValueEx(hKeyHandle, [Ô]Description[Ô], 0&, REG_SZ, _
ByVal Description, Len(Description))
lResult = RegSetValueEx(hKeyHandle, [Ô]Driver[Ô], 0&, REG_SZ, _
ByVal DriverPath, Len(DriverPath))
lResult = RegSetValueEx(hKeyHandle, [Ô]LastUser[Ô], 0&, REG_SZ, _
ByVal LastUser, Len(LastUser))
lResult = RegSetValueEx(hKeyHandle, [Ô]Server[Ô], 0&, REG_SZ, _
ByVal Server, Len(Server))

lResult = RegCloseKey(hKeyHandle)

lResult = RegCreateKey(HKEY_LOCAL_MACHINE, _
[Ô]SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources[Ô], hKeyHandle)
lResult = RegSetValueEx(hKeyHandle, DataSourceName, 0&, REG_SZ, _
ByVal DriverName, Len(DriverName))
lResult = RegCloseKey(hKeyHandle)
End Sub

Tópico encerrado , respostas não são mais permitidas