CRIA?ÃO ODBC VIA CÓDIGO NÃO FUNCIONA NO WIN8 E 10

JCARLOS 07/03/2017 11:01:09
#472243
Alguém está conseguindo criar OBDC via código que funcione nos ambientes Windows 8 e 10. Nos SO anteriores funcionava.
Agradeço por alguma colaboração.
KERPLUNK 08/03/2017 14:38:42
#472282
Não entendi bem o que você está querendo fazer. Mas até onde sei, ODBC possui sim suporte. O que está tentando fazer? Qual o banco que está tentando conectar?
JCARLOS 08/03/2017 15:30:32
#472286
Olá Kerplunk, tenho sistema em VB6 que usa Crystal 8.5 cujo qual acessa dados (base SQL Server) via ODBC.
A Rotina que tenho, checa se a fonte existe, senão a cria via código VB. Até o Win7 funciona ok, mas quando o ambiente é win8 ou 10, tenho de criar na unha porque não cria mais nestes ambientes.
Obs. Acabei de executar o sistema num Win10 e gerou a odbc normalmente. A coisa está intermitente!


Rotina:
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 = [Ô]MinaODBC[Ô]
DatabaseName = [Ô]MeuBD[Ô]
Description = [Ô]Orcamento/Compras/Contabilidade[Ô]
DriverPath = [Ô]C:\Windows\System32[Ô]
Server = gLocalBD
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))

[ô]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, _
[Ô]SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources[Ô], hKeyHandle)
lResult = RegSetValueEx(hKeyHandle, DataSourceName, 0&, REG_SZ, _
ByVal DriverName, Len(DriverName))
lResult = RegCloseKey(hKeyHandle)
End Sub

KERPLUNK 08/03/2017 15:57:12
#472288
E tem alguma necessidade específica para o uso de uma DSN? E porque usar ODBC para conectar com SQL Server e não OleDB?
MESTRE 09/03/2017 09:08:10
#472318
Eu tambem estou sofrendo com esse problema.. só quem em .NET
porém preciso disso e pode ser em vb6, .bat , C#, .net qualquer coisa..
SINCLAIR 09/03/2017 12:33:46
#472322
Bem, colegas...

O Ideal é por OleDB, mas se desejam criar por .bat, pode ser assim:

strLinhaDeComando = [Ô]%windir%\system32\odbcconf.exe /a {CONFIGSYSDSN [Ô] & [Ô][Ô][Ô][Ô] & [Ô]PostgreSQL Unicode[Ô] & [Ô][Ô][Ô][Ô] & [Ô] [Ô] & [Ô][Ô][Ô][Ô] & [Ô]DSN=NomeDaBaseDados & [Ô]|Description=ConexaoComodoro|SERVERNAME=[Ô] & fnc_IP_do_Servidor_Local & [Ô]|PORT=5432|DATABASE=[Ô] & NomeDaBaseDados & [Ô]|UID=[Ô] & UsuarioDoBancoDeDados & [Ô]|PWD=[Ô] & SenhaDoBancoDeDados & [Ô][Ô][Ô][Ô] & [Ô]}[Ô]

No exemplo acima é para PostGreSQL. Basta substituir para o nome do driver do banco de dados usado, logo após o CONFIGSYSDSN.

Se for para criar em ambientes 64 bits, o comando é o mesmo, apenas trocando \system32 por \syswow64.

Grave a linha acima em um .bat (algo como print #10, strLinhaDeComando) e executa o .bat com Shell.

O comando acima ainda é usado em uma aplicação VB6 legada. Funciona 100% em Windows 7, Windows 8, Windows 8.1 e Windows 10.

Tudo de bom.
MESTRE 09/03/2017 14:18:17
#472327
Citação:

:
Bem, colegas...

O Ideal é por OleDB, mas se desejam criar por .bat, pode ser assim:

strLinhaDeComando = [Ô]%windir%system32odbcconf.exe /a {CONFIGSYSDSN [Ô] & [Ô][Ô][Ô][Ô] & [Ô]PostgreSQL Unicode[Ô] & [Ô][Ô][Ô][Ô] & [Ô] [Ô] & [Ô][Ô][Ô][Ô] & [Ô]DSN=NomeDaBaseDados & [Ô]|Description=ConexaoComodoro|SERVERNAME=[Ô] & fnc_IP_do_Servidor_Local & [Ô]|PORT=5432|DATABASE=[Ô] & NomeDaBaseDados & [Ô]|UID=[Ô] & UsuarioDoBancoDeDados & [Ô]|PWD=[Ô] & SenhaDoBancoDeDados & [Ô][Ô][Ô][Ô] & [Ô]}[Ô]

No exemplo acima é para PostGreSQL. Basta substituir para o nome do driver do banco de dados usado, logo após o CONFIGSYSDSN.

Se for para criar em ambientes 64 bits, o comando é o mesmo, apenas trocando system32 por syswow64.

Grave a linha acima em um .bat (algo como print #10, strLinhaDeComando) e executa o .bat com Shell.

O comando acima ainda é usado em uma aplicação VB6 legada. Funciona 100% em Windows 7, Windows 8, Windows 8.1 e Windows 10.

Tudo de bom.



Não entendi é pra colocar isso num .bat e chamar por Shell o .bat?
  strLinhaDeComando = [Ô]%windir%\system32\odbcad32.exe /a {CONFIGSYSDSN [Ô] & [Ô][Ô][Ô][Ô] & [Ô]MySQL[Ô] & [Ô][Ô][Ô][Ô] & [Ô] [Ô] & [Ô][Ô][Ô][Ô] & [Ô]DSN=NomeDaBaseDados & [Ô]|Description=ConexaoComodoro|SERVERNAME=[Ô] & fnc_IP_do_Servidor_Local & [Ô]|PORT=5432|DATABASE=[Ô] & NomeDaBaseDados & [Ô]|UID=[Ô] & UsuarioDoBancoDeDados & [Ô]|PWD=[Ô] & SenhaDoBancoDeDados & [Ô][Ô][Ô][Ô] & [Ô]}[Ô]
SINCLAIR 09/03/2017 17:44:01
#472334
Colega MESTRE,

Sim, é para colocar em um .bat e chamar com shell.

Mas veja que a construção do .bat eu fiz dentro do próprio sistema, ou seja, coloquei em uma variável o comando completo a ser inserido dentro do .bat.
Na criação do comando coloquei o IP do servidor, nome do usuário, senha, etc,

Depois gravo o conteúdo da variável em algo como [Ô]odbc.bat[Ô] e executo com shell.

Tudo de bom.
KERPLUNK 09/03/2017 19:13:42
#472337
O caso é que uma DSN para isso é totalmente desnecessário. Mesmo o VB6 possui conexão nativa via OleDB para o SQL Server.
MESTRE 10/03/2017 07:47:01
#472343
Citação:

:
Colega MESTRE,

Sim, é para colocar em um .bat e chamar com shell.

Mas veja que a construção do .bat eu fiz dentro do próprio sistema, ou seja, coloquei em uma variável o comando completo a ser inserido dentro do .bat.
Na criação do comando coloquei o IP do servidor, nome do usuário, senha, etc,

Depois gravo o conteúdo da variável em algo como [Ô]odbc.bat[Ô] e executo com shell.

Tudo de bom.



Teria como me mandar o exemplo? eu tentei aqui porem acho que falta alguma [Ô]referencia[Ô] no Vb6 ou algo do tipo como (using C# , Imports VB.NET)...

SINCLAIR 10/03/2017 08:24:19
#472345
Colega KERPLUNK,

De fato, como eu mesmo tinha dito acima, o melhor é OleDB. Concordo contigo.

Colega MESTRE,

Código completo em VB6 (mas a lógica para criar o .bat seria a mesma no .Net, contudo, recomenda-se sempre o OleDB). Eu uso uma função chamada fnc_Pasta_Existe que verifica se uma pasta existe (system32, syswow64, etc), que você poderá criar ou retirar do código. O .bat estou gravando em uma subpasta chamada 99-Temp do aplicativo, mas você poderá mudar para a pasta que desejar. Estou usando para PostGreSQL. Mude [Ô]PostGreSQL Unicode[Ô] para o nome do seu driver (SQL Server ou qualquer outro. Veja manualmente na criação do ODBC qual é o nome correto do seu driver):

        [ô]--------------------------------
[ô] !
[ô] !
[ô] CRIAR ODBC !
[ô] !
[ô] !
[ô]--------------------------------


[ô]Formar nomes de comandos .bat

strNomeSysBat = [Ô]sys01.bat[Ô]
strNomeWowBat = [Ô]wow01.bat[Ô]

[ô]--------------------
[ô] !
[ô] ODBC SYSTEM32 !
[ô] !
[ô]--------------------

[ô]Somente se a pasta existir

If fnc_Pasta_Existe(Environ([Ô]SYSTEMROOT[Ô]) & [Ô]\system32\[Ô]) Then

[ô]Criar o .bat

Close #15
Open ion_Path_do_Aplicativo & [Ô]\99-Temp\[Ô] & strNomeSysBat For Output As #15

strLinhaDeComando = [Ô]%windir%\system32\odbcconf.exe /a {CONFIGSYSDSN [Ô] & [Ô][Ô][Ô][Ô] & [Ô]PostgreSQL Unicode[Ô] & [Ô][Ô][Ô][Ô] & [Ô] [Ô] & [Ô][Ô][Ô][Ô] & [Ô]DSN=NomeSeuDSN[Ô] & [Ô]|Description=ConexaoComodoro|SERVERNAME=[Ô] & IPdoSeuServidor & [Ô]|PORT=5432|DATABASE=[Ô] & NomeDoSeuBancoDeDados& [Ô]|UID=[Ô] & NomeDoUsuario & [Ô]|PWD=[Ô] & SenhaDoBancoDeDados & [Ô][Ô][Ô][Ô] & [Ô]}[Ô]

Print #15, strLinhaDeComando

Close #15

[ô]Executar os arquivos .bat

ChDir ion_Path_do_Aplicativo & [Ô]\99-Temp[Ô]
RetShell = Shell(ion_Path_do_Aplicativo & [Ô]\99-Temp\[Ô] & strNomeSysBat, vbHide)
ChDir ion_Path_do_Aplicativo

End If

[ô]--------------------
[ô] !
[ô] ODBC SYSWOW64 !
[ô] !
[ô]--------------------

[ô]Somente se a pasta existir

If fnc_Pasta_Existe(Environ([Ô]SYSTEMROOT[Ô]) & [Ô]\syswow64\[Ô]) Then

[ô]Criar o .bat

Close #15
Open ion_Path_do_Aplicativo & [Ô]\99-Temp\[Ô] & strNomeWowBat For Output As #15

strLinhaDeComando = [Ô]%windir%\syswow64\odbcconf.exe /a {CONFIGSYSDSN [Ô] & [Ô][Ô][Ô][Ô] & [Ô]PostgreSQL Unicode[Ô] & [Ô][Ô][Ô][Ô] & [Ô] [Ô] & [Ô][Ô][Ô][Ô] & [Ô]DSN=NomeSeuDSN[Ô] & [Ô]|Description=ConexaoComodoro|SERVERNAME=[Ô] & IPdoSeuServidor & [Ô]|PORT=5432|DATABASE=[Ô] & NomeDoSeuBancoDeDados & [Ô]|UID=[Ô] & NomeDoUsuario & [Ô]|PWD=[Ô] & SenhaDoBancoDeDados & [Ô][Ô][Ô][Ô] & [Ô]}[Ô]

Print #15, strLinhaDeComando

Close #15

[ô]Executar os arquivos .bat

ChDir ion_Path_do_Aplicativo & [Ô]\99-Temp[Ô]
RetShell = Shell(ion_Path_do_Aplicativo & [Ô]\99-Temp\[Ô] & strNomeWowBat, vbHide)
ChDir ion_Path_do_Aplicativo

End If


Tudo de bom.
Página 1 de 2 [13 registro(s)]
Faça seu login para responder