DUVIDA CRYSTAL REPORTS X MYSQL

GFASSIO 26/01/2010 09:43:48
#332842
Olá gente, seguinte, estou migrando para mysql meus sistemas, mas tenho uma dúvida.

No meu sistema eu chamo a conexão por string de conexão:
DATABASE=xxx; SERVER=xxx; UID=xxx; PASSWORD=xxx

Mas o crystal, pelo que estou vendo só aceita chamar se eu colcoar esse linha:
CrystalReport1.LogOnServer [Ô]pdsodbc.dll[Ô], [Ô]TESTEODBC[Ô], [Ô]bd[Ô], [Ô]root[Ô], [Ô]123[Ô], onde TESTEODBC é um DSN.

A pergunta é a seguinte, eu consigo disparar o cystal sem pssar o DSN como parâmetro? porque se for assim, vou ter que criar o DSN em todas as máquinas e por string de conexão como faço no sistema eu num preciso criar DSN em todas as máquinas.

Estou errado ou tem outro jeito de disparar o crystal sem pasar DSN ? porque assim se tiver 100 máquinas vou ter que criar DSN em todas...

abraços e desde já agradecido.
FERRAZ 26/01/2010 10:16:15
#332849
GFASSIO, vc pode criar um ODBC, veja se lhe ajuda:

Como criar uma conexao com o crystal sem usar DNS:

http://www.vbmania.com.br/pages/index.php?varModulo=Forum&varMethod=abrir&varID=317410&varWorld=
GFASSIO 26/01/2010 10:26:05
#332850
Então, mas eu uso o crystal 4.6...
como que faço?

Quais as propriedades tenho que setar quando chamo o crystal?
eu uso:

1 - CrystalReport1.ReportFileName = [Ô]c:elatorio.rpt[Ô]
2 - CrystalReport1.LogOnServer [Ô]pdsodbc.dll[Ô], [Ô]TESTEODBC[Ô], [Ô]terminal[Ô], [Ô]root[Ô], [Ô]123[Ô]
3 - CrystalReport1.Action = 1

Eu nao queria er que usar a linha 2
abrigado pela ajuda!
FERRAZ 26/01/2010 10:52:20
#332855
Resposta escolhida
Hummm, bom, tenta assim que acho que vai na boa, veja:

Option Explicit
Dim Report As CrystalReport


Private Sub Form_Load()
CrystalRet.ReportFileName = [Ô]C:\seu caminho\seu report\[Ô]
End Sub


Aqui vamos derrubar a varialvel para evitar problemas com memoria.
Private Sub Form_Unload(Cancel As Integer)
Set Report = Nothing
End Sub


Tenta ae.
GFASSIO 26/01/2010 11:04:04
#332858
Obrigado pela ajuda Ferraz, mas eu não entedi.
Onde eu coloco os parêmetros/propriedades e onde eu coloco o metodo .action?

Muito obrigado pela atenção
FERRAZ 26/01/2010 13:58:19
#332878
GFASSIO, olha so, vc pode usar as propriedades nesta linha:
Private Sub Form_Load()
CrystalRet.ReportFileName = [Ô]C:\Seu caminho\Seu report[Ô]
CryatalRet.Report.WindowTitle = [Ô]Seu Titulo[Ô]
CrystalRet.CopiesToPrinter = 1
CrystalRet.Destination = crptToWindow
CrystalRet.SortFields(0) = [Ô]+{Campo especifico do report que queira}[Ô]
CrystalRet.Action = 1
End Sub


Na verdade, vc pode usar as propriedades da mesma forma que vc conhece, tenta ae.
GFASSIO 26/01/2010 15:16:24
#332881
Ferraz, se eu não colocar a propriedade
CrystalReport1.LogOnServer [Ô]pdsodbc.dll[Ô], [Ô]TESTEODBC[Ô], [Ô]terminal[Ô], [Ô]root[Ô], [Ô]123[Ô]

ele dá a mensagem:
[txt-color=#e80000][ô]Cannot open SQL Server[ô] [/txt-color], mas se eu coloco ele dá certo.

Tudo bem sendo assim é só eu colocar a linha mas ai no caso vou ter que criar o DSN TESTEODBC em TODAS as máquina da rede, exatamente o que eu num quero.

Tem algum jeito, API ou outra modo de criar um DSN via código? ai eu fazia o próprio sistema criar e pronto.

abraços e obrigado mais uma vez!
FERRAZ 26/01/2010 16:22:07
#332888
GFASSIO, olha, este exemplo aqui monta um DNS caso a maquina nao tenha, agora, nao testei, mais acredito que ira funcionar, veja:

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

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 MaxUser As String
Dim Regional As String
Dim Server As String
Dim lResult As Long
Dim hKeyHandle As Long
[ô]Specify the DSN parameters.
DataSourceName = [Ô]Aqui vc coloca o nome do seu DNS [Ô]
DatabaseName = [Ô]Seu BD[Ô]
Description = [Ô]Sua tabela/Sua tabela[Ô] [ô]se tiver mais de uma, vc coloca barra depois do nome e vai preenchendo.
DriverPath = [Ô]C:WindowsSystem32[Ô] [ô]Onde vc vai estalar o driver
MaxUser = [Ô]Repita o nome de seu DNS [Ô]
Server = 192.0.8.8 [ô]Ip do Servidor
DriverName = [Ô]SQL Server[Ô] [ô] Aqui vc vai colocar quem eh seu BD.
[ô]Create the new DSN key.
lResult = RegCreateKey(HKEY_LOCAL_MACHINE, [Ô]SOFTWAREODBCODBC.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, [Ô]MaxUser[Ô], 0&, REG_SZ, _
ByVal MaxUser, Len(MaxUser))
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, _
[Ô]SOFTWAREODBCODBC.INIODBC Data Sources[Ô], hKeyHandle)
lResult = RegSetValueEx(hKeyHandle, DataSourceName, 0&, REG_SZ, _
ByVal DriverName, Len(DriverName))
lResult = RegCloseKey(hKeyHandle)
End Sub


Veja se funciona como esperado, substitua certinho que acho que vai na boa.
GFASSIO 26/01/2010 17:31:52
#332898
Obrigado Ferraz, vou fazer isso mesmo quando eu entrar no sistema jám ando ele criar aozinho o DNS, ai pode ter 1 ou 1000 máquinas no cliente né

Obrigado pela atenção!
Abraços
Tópico encerrado , respostas não são mais permitidas