Boa tarde, não querendo estar ao nível dos mestres.
Gostaria de mostrar um exemplo:
Para o relatório criei uma tabela local com os campos:
Cmp_Cod
Cmp_Desc
cat_desc
cmp_estfinal
ngalpao
e_nome
fil_nome
todos em formato de texto.
A idéia era de popular a tabela local e abrir o relatório diretamente no banco de dados,
como no interior do Piauí a internet não é muito boa agilizou bastante a abertura do relatório.
Código usado no relatório:
Private Sub Report_Close()
DoCmd.SetWarnings False
CurrentDb.Execute "DELETE * FROM rpt_listalotes;"
DoCmd.SetWarnings True
End Sub
Private Sub Report_Open(Cancel As Integer)
DoCmd.SetWarnings False
CurrentDb.Execute "DELETE * FROM rpt_listalotes;"
DoCmd.SetWarnings True
Call Povoar
DoCmd.MoveSize 2000, 400
End Sub
Private Sub Povoar()
DoCmd.Hourglass True
Dim strCon As String
'esta é a string de conexao
'devera conter a informacao sobre o provedor e o
'caminho do banco de dados
Dim strProv As String
'guarda o nome do provedor
Dim strDtSource As String
'guarda a fonte de dados
Dim strDtBaseName As String
'nome do banco de dados
Dim user_id As String ' identificacao do usuario para o banco de dados
Dim password As String ' a senha (se tiver) para o banco de dados
Dim IP2 As String ' o endereco ip da maquina na qual esta o mySql
IP2 = DLookup("[Valor]", "_Parametros", "[ID]=8") 'Servidor Web
user_id = DLookup("[Valor]", "_Parametros", "[ID]=10") 'Usuário do banco de dados
password = DLookup("[Valor]", "_Parametros", "[ID]=11") 'Senha do banco de dados
strDtBaseName = DLookup("[Valor]", "_Parametros", "[ID]=12") 'Database
' string de conexao
strCon = "driver={MySQL ODBC 5.1 Driver};server=" & IP2 & ";uid=" & user_id & ";pwd=" & password & ";database=" & strDtBaseName
Set adoDtConn = New ADODB.Connection
'preparando o objeto connection
adoDtConn.CursorLocation = adUseClient
'usamos um cursor do lado do cliente pois os dados
'serao acessados na maquina do cliente e nao de um servidor
adoDtConn.Open strCon
'Abreo o objeto connection
Set Rs1 = New ADODB.Recordset
'Prepara o recordset
Rs1.CursorType = adOpenStatic
'Este é o unico tipo de cursor a ser usado
'com um cursor localizado no lado do cliente
Rs1.CursorLocation = adUseClient
'estamos usando o cursor no cliente
Rs1.LockType = adLockPessimistic
'Isto garente que o registros que esta sendo editado
'pode ser salvo
Rs1.Source = "SELECT db_Cmp.CMP_ID, db_Empresa.E_NOME, db_Empresa.E_CNPJ, " & _
"db_Filial.FIL_NOME, db_Filial.FIL_CNPJ, db_Cmp.CMP_COD, " & _
"db_Galpao.NGalpao, db_Cmp.CMP_DESC, db_Categoria.Cat_Desc, " & _
"db_Cmp.CMP_EST_INI, db_Cmp.CMP_E_NASC, db_Cmp.CMP_E_COMPRA, " & _
"db_Cmp.CMP_S_MORTE, db_Cmp.CMP_S_CONSUMO, db_Cmp.CMP_S_VENDA, " & _
"db_Cmp.CMP_EST_FINAL, db_Cmp.CMP_DT_CAD, db_Cmp.USUARIO, " & _
"db_Cmp.DTMOV, db_Cmp.EstGeral, db_Cmp.Cmp_Descont " & _
"FROM " & _
"db_Cmp INNER JOIN " & _
"db_Empresa ON db_Cmp.EMPRESA_ID = db_Empresa.E_ID INNER JOIN " & _
"db_Filial ON db_Cmp.FILIAL_ID = db_Filial.FIL_ID AND " & _
"db_Filial.EMPRESA_ID = db_Empresa.E_ID INNER JOIN " & _
"db_Galpao ON db_Cmp.Cmp_Galpao_Id = db_Galpao.Id INNER JOIN " & _
"db_Categoria ON db_Cmp.CMP_CAT_ID = db_Categoria.Cat_Id " & _
"WHERE " & _
" db_Cmp.Cmp_Descont = 'S' " & _
" and db_Cmp.CMP_DT_CAD >'" & Forms!frmRelListaLotesDesc!DataMov1.Value & _
"' and db_Cmp.CMP_DT_CAD <'" & Forms!frmRelListaLotesDesc!DataMov2.Value & _
"' ORDER BY db_Cmp.CMP_COD;"
'a fonte de dados usamos uma instrucal SQL
Rs1.ActiveConnection = adoDtConn
'O recordset precisa saber qual a conexao em uso
Rs1.Open
'abre o recordset com isto o evento MoveComplete sera disparado
Dim rs4 As DAO.Recordset
Set rs4 = CurrentDb.OpenRecordset("rpt_listalotes")
While (Not Rs1.EOF)
With rs4
.AddNew
![Cmp_Cod] = Rs1![Cmp_Cod]
![Cmp_Desc] = Rs1![Cmp_Desc]
![cat_desc] = Rs1![cat_desc]
![cmp_estfinal] = Rs1![Cmp_Est_Final]
![ngalpao] = Rs1![ngalpao]
![e_nome] = Rs1![e_nome]
![fil_nome] = Rs1![fil_nome]
.Update
Rs1.MoveNext
End With
Wend
'Me.nregistros.Caption = "Nº de registros: " & Rs1.RecordCount
Rs1.Close
adoDtConn.Close
me.Requery
DoCmd.Hourglass False
End Sub