OBJETO PRINT
Olá pessoal tenho banco com duas tabelas TBLPOCKET E TBLACESSORIO. Estou mantado um relatório da seguinte maneira. Só que dessa forma só consigo imprimir a TBLPOCKET do banco, como faço para imprimir a TBLACESSORIO também.
Private Sub cmdImprimir_Click()
Dim con As Object, rs As Object
Dim Linha As Integer [ô] varialvél para a contagem de linhas
Set con = CreateObject([Ô]ADODB.Connection[Ô])
Set rs = CreateObject([Ô]ADODB.Recordset[Ô])
con.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0; Data Source=[Ô] & App.Path & [Ô]\Banco\Pocket.mdb[Ô]
rs.Open [Ô]SELECT * FROM tblpocket ORDER BY codigo[Ô], con, adOpenKeyset, adLockOptimistic
If MsgBox([Ô]Inicia a Impressão?[Ô], 36, [Ô]Relação de Equipamento[Ô]) = 7 Then [ô]
Exit Sub
End If
Linha = 1
Printer.FontName = [Ô]Arial[Ô]
Printer.FontSize = 10
Printer.PaperSize = 9 [ô] modelo de papel folha = A4
Printer.Orientation = 2 [ô] Orientação do papel = paisagem
Do While Not rs.EOF
If Linha = 1 Then [ô]define linha 1 é cabeçalho
Cabeçalho
End If
[ô]campos a serem imprimidos
Printer.Print Tab(3); String(240, [Ô]-[Ô])
Printer.Print Tab(3); Format(rs([Ô]Codigo[Ô]), [Ô]00#[Ô]);
Printer.Print Tab(15); rs([Ô]SML[Ô]);
Printer.Print Tab(35); rs([Ô]ESCRITORIO[Ô]);
Printer.Print Tab(55); rs([Ô]APARELHO[Ô]);
Printer.Print Tab(70); rs([Ô]SN[Ô]);
Printer.Print Tab(90); rs([Ô]IMEI[Ô]);
Printer.Print Tab(112); rs([Ô]CHIPTIMNOVO[Ô]);
Printer.Print Tab(133); rs([Ô]RESPONSAVEL[Ô]);
Printer.Print Tab(153); rs([Ô]MANUTENCAO[Ô]);
Printer.Print Tab(172); rs([Ô]REPARO[Ô]);
Linha = Linha + 1 [ô] montando as linhas
rs.MoveNext [ô]proximo registro da tabela
If Linha >= 50 Then [ô] se tiver mais de 50 linhas iniciar uma nova pagina
Printer.NewPage
Linha = 1
End If
Loop
Printer.EndDoc [ô]finaliza a impressao
rs.Close [ô]fecha a tabela pocket
End Sub
Private Sub cmdImprimir_Click()
Dim con As Object, rs As Object
Dim Linha As Integer [ô] varialvél para a contagem de linhas
Set con = CreateObject([Ô]ADODB.Connection[Ô])
Set rs = CreateObject([Ô]ADODB.Recordset[Ô])
con.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0; Data Source=[Ô] & App.Path & [Ô]\Banco\Pocket.mdb[Ô]
rs.Open [Ô]SELECT * FROM tblpocket ORDER BY codigo[Ô], con, adOpenKeyset, adLockOptimistic
If MsgBox([Ô]Inicia a Impressão?[Ô], 36, [Ô]Relação de Equipamento[Ô]) = 7 Then [ô]
Exit Sub
End If
Linha = 1
Printer.FontName = [Ô]Arial[Ô]
Printer.FontSize = 10
Printer.PaperSize = 9 [ô] modelo de papel folha = A4
Printer.Orientation = 2 [ô] Orientação do papel = paisagem
Do While Not rs.EOF
If Linha = 1 Then [ô]define linha 1 é cabeçalho
Cabeçalho
End If
[ô]campos a serem imprimidos
Printer.Print Tab(3); String(240, [Ô]-[Ô])
Printer.Print Tab(3); Format(rs([Ô]Codigo[Ô]), [Ô]00#[Ô]);
Printer.Print Tab(15); rs([Ô]SML[Ô]);
Printer.Print Tab(35); rs([Ô]ESCRITORIO[Ô]);
Printer.Print Tab(55); rs([Ô]APARELHO[Ô]);
Printer.Print Tab(70); rs([Ô]SN[Ô]);
Printer.Print Tab(90); rs([Ô]IMEI[Ô]);
Printer.Print Tab(112); rs([Ô]CHIPTIMNOVO[Ô]);
Printer.Print Tab(133); rs([Ô]RESPONSAVEL[Ô]);
Printer.Print Tab(153); rs([Ô]MANUTENCAO[Ô]);
Printer.Print Tab(172); rs([Ô]REPARO[Ô]);
Linha = Linha + 1 [ô] montando as linhas
rs.MoveNext [ô]proximo registro da tabela
If Linha >= 50 Then [ô] se tiver mais de 50 linhas iniciar uma nova pagina
Printer.NewPage
Linha = 1
End If
Loop
Printer.EndDoc [ô]finaliza a impressao
rs.Close [ô]fecha a tabela pocket
End Sub
é só colocar o TBLACESSORIO no lugar do TBLPOCKET e mudar os campos no recordset
Existe ligação entre essas duas tabelas e vc quer mostrar os dados das duas tabelas? Se sim, aà é outra história.
Existe ligação entre essas duas tabelas e vc quer mostrar os dados das duas tabelas? Se sim, aà é outra história.
No tópico anterior, postei um exemplo fazendo uma junção das 2 TABELAS.
Altere a abertura do RECORDSET conforme as linhas abaixo:
Em seguida, quando for chamar a rotina de impressão (ex. [txt-color=#0000f0]Printer.Print Tab(153); rs([Ô]MANUTENCAO[Ô])[/txt-color];), invoque o campo da segunda tabela, pois o mesmo já estará disponÃvel.
Altere a abertura do RECORDSET conforme as linhas abaixo:
rs.Open [Ô]SELECT p.*, a.* [Ô] & _
[Ô]FROM (TblPocket p [Ô] & _
[Ô]INNER JOIN TblAcessorio a [Ô] & _
[Ô]ON p.Codigo = a.CodAcess) [Ô] & _
[Ô]WHERE p.Codigo=1[Ô], con, 1, 3
Em seguida, quando for chamar a rotina de impressão (ex. [txt-color=#0000f0]Printer.Print Tab(153); rs([Ô]MANUTENCAO[Ô])[/txt-color];), invoque o campo da segunda tabela, pois o mesmo já estará disponÃvel.
OK TECLA FIZ COM SOLICITADO, MAIS NÃO ESTà IMPRIMINDO NADA.
Alguém.
JPAULO...
Vc tentou o que o MSMJUDAS disse?
Porque no código postado só tem o acesso à primeira tabela ( na cláusula Select)...
Se o que vc quer são duas listagens diferentes, então o MSMJUDAS colocou o correto, ou seja, ao término do loop vc precisa abrir um novo select, dessa vez com a outra tabela e mudar os campos para os campos da outra tabela...
Agora se existe relação entre uma tabela e outra e vc quer dados de ambas, vc precisa mudar a clausula Select para selecionar as duas tabelas, especificando cada tabela com um alias, conforme o tecla postou.
Dependendo do caso, se for o que o tecla postou, poste como ficou sua cláusula Select para que possamos ver o que tem de errado nela.
Vc tentou o que o MSMJUDAS disse?
Porque no código postado só tem o acesso à primeira tabela ( na cláusula Select)...
Se o que vc quer são duas listagens diferentes, então o MSMJUDAS colocou o correto, ou seja, ao término do loop vc precisa abrir um novo select, dessa vez com a outra tabela e mudar os campos para os campos da outra tabela...
Agora se existe relação entre uma tabela e outra e vc quer dados de ambas, vc precisa mudar a clausula Select para selecionar as duas tabelas, especificando cada tabela com um alias, conforme o tecla postou.
Dependendo do caso, se for o que o tecla postou, poste como ficou sua cláusula Select para que possamos ver o que tem de errado nela.
JPAULO101,
O que vc REALMENTE precisa? Quais dados vc quer que apareca? Se possivel, envia o banco de dados ou poste a estrutura das tabelas.
Explique direito o que vc precisa.
O que vc REALMENTE precisa? Quais dados vc quer que apareca? Se possivel, envia o banco de dados ou poste a estrutura das tabelas.
Explique direito o que vc precisa.
Citação::
OK TECLA FIZ COM SOLICITADO, MAIS NÃO ESTà IMPRIMINDO NADA.
Traduza o que significa [Ô]MAIS NÃO ESTà IMPRIMINDO NADA[Ô].
Aquele Exemplo anterior que postei por SQL é impossivel não imprimir as dus tabelas
Fiz na seguinte forma usando o exemplo do Tecla, mais quando pesso para imprimir, não está jogando os dados para impressora.
De qualque forma estou enviando o banco de dados para vocês da uma analisada.
Agradeço ajuda de todos.
Private Sub cmdImprimir_Click()
Dim con As Object, rs As Object
Dim Linha As Integer [ô] varialvél para a contagem de linhas
Set con = CreateObject([Ô]ADODB.Connection[Ô])
Set rs = CreateObject([Ô]ADODB.Recordset[Ô])
con.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0; Data Source=[Ô] & App.Path & [Ô]\Banco\Pocket.mdb[Ô]
rs.Open [Ô]SELECT p.*, a.* [Ô] & _
[Ô]FROM (TblPocket p [Ô] & _
[Ô]INNER JOIN TblAcessorio a [Ô] & _
[Ô]ON p.Codigo = a.CodAcess) [Ô] & _
[Ô]WHERE p.Codigo=1[Ô], con, 1, 3
If MsgBox([Ô]Inicia a Impressão?[Ô], 36, [Ô]Relação de Equipamento[Ô]) = 7 Then [ô]
Exit Sub
End If
Linha = 1
Printer.FontName = [Ô]Arial[Ô]
Printer.FontSize = 10
Printer.PaperSize = 9 [ô] modelo de papel folha = A4
Printer.Orientation = 2 [ô] Orientação do papel = paisagem
Do While Not rs.EOF
If Linha = 1 Then [ô]define linha 1 é cabeçalho
Cabeçalho
End If
[ô]campos a serem imprimidos
Printer.Print Tab(3); String(240, [Ô]-[Ô])
Printer.Print Tab(3); Format(rs([Ô]Codigo[Ô]), [Ô]00#[Ô]);
Printer.Print Tab(15); rs([Ô]SML[Ô]);
Printer.Print Tab(35); rs([Ô]ESCRITORIO[Ô]);
Printer.Print Tab(55); rs([Ô]APARELHO[Ô]);
Printer.Print Tab(70); rs([Ô]SN[Ô]);
Printer.Print Tab(90); rs([Ô]IMEI[Ô]);
Printer.Print Tab(112); rs([Ô]CHIPTIMNOVO[Ô]);
Printer.Print Tab(133); rs([Ô]RESPONSAVEL[Ô]);
Printer.Print Tab(153); rs([Ô]MANUTENCAO[Ô]);
Printer.Print Tab(172); rs([Ô]REPARO[Ô]);
Printer.Print Tab(180); rs([Ô]TipoAcess[Ô]);
Printer.Print Tab(190); rs([Ô]Data[Ô]);
Printer.Print Tab(210); rs([Ô]Num[Ô]);
Linha = Linha + 1 [ô] montando as linhas
rs.MoveNext [ô]proximo registro da tabela
If Linha >= 50 Then [ô] se tiver mais de 50 linhas iniciar uma nova pagina
Printer.NewPage
Linha = 1
End If
Loop
Printer.EndDoc [ô]finaliza a impressao
rs.Close [ô]fecha a tabela pocket
End Sub
De qualque forma estou enviando o banco de dados para vocês da uma analisada.
Agradeço ajuda de todos.
Private Sub cmdImprimir_Click()
Dim con As Object, rs As Object
Dim Linha As Integer [ô] varialvél para a contagem de linhas
Set con = CreateObject([Ô]ADODB.Connection[Ô])
Set rs = CreateObject([Ô]ADODB.Recordset[Ô])
con.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0; Data Source=[Ô] & App.Path & [Ô]\Banco\Pocket.mdb[Ô]
rs.Open [Ô]SELECT p.*, a.* [Ô] & _
[Ô]FROM (TblPocket p [Ô] & _
[Ô]INNER JOIN TblAcessorio a [Ô] & _
[Ô]ON p.Codigo = a.CodAcess) [Ô] & _
[Ô]WHERE p.Codigo=1[Ô], con, 1, 3
If MsgBox([Ô]Inicia a Impressão?[Ô], 36, [Ô]Relação de Equipamento[Ô]) = 7 Then [ô]
Exit Sub
End If
Linha = 1
Printer.FontName = [Ô]Arial[Ô]
Printer.FontSize = 10
Printer.PaperSize = 9 [ô] modelo de papel folha = A4
Printer.Orientation = 2 [ô] Orientação do papel = paisagem
Do While Not rs.EOF
If Linha = 1 Then [ô]define linha 1 é cabeçalho
Cabeçalho
End If
[ô]campos a serem imprimidos
Printer.Print Tab(3); String(240, [Ô]-[Ô])
Printer.Print Tab(3); Format(rs([Ô]Codigo[Ô]), [Ô]00#[Ô]);
Printer.Print Tab(15); rs([Ô]SML[Ô]);
Printer.Print Tab(35); rs([Ô]ESCRITORIO[Ô]);
Printer.Print Tab(55); rs([Ô]APARELHO[Ô]);
Printer.Print Tab(70); rs([Ô]SN[Ô]);
Printer.Print Tab(90); rs([Ô]IMEI[Ô]);
Printer.Print Tab(112); rs([Ô]CHIPTIMNOVO[Ô]);
Printer.Print Tab(133); rs([Ô]RESPONSAVEL[Ô]);
Printer.Print Tab(153); rs([Ô]MANUTENCAO[Ô]);
Printer.Print Tab(172); rs([Ô]REPARO[Ô]);
Printer.Print Tab(180); rs([Ô]TipoAcess[Ô]);
Printer.Print Tab(190); rs([Ô]Data[Ô]);
Printer.Print Tab(210); rs([Ô]Num[Ô]);
Linha = Linha + 1 [ô] montando as linhas
rs.MoveNext [ô]proximo registro da tabela
If Linha >= 50 Then [ô] se tiver mais de 50 linhas iniciar uma nova pagina
Printer.NewPage
Linha = 1
End If
Loop
Printer.EndDoc [ô]finaliza a impressao
rs.Close [ô]fecha a tabela pocket
End Sub
O que eu vi de errado no código:
1- Não entendi o porquê da cláusula WHERE, restringindo somente o código = 1, isso restringiria a apenas o código 1 de ambas as tabelas... mas daà é a sua lógica...
2 - em Printer.Print Tab(3); Format(rs([Ô]Codigo[Ô]), [Ô]00#[Ô]); aqui tem erro!
Existe rs([Ô]Código[Ô]) e rs([Ô]CODIGO[Ô]), mas do jeito digitado não tem em nenhuma das duas tabelas! Logo não vai haver um campo desse no recordset criado.
Agora, acredito que se fosse esse o erro, vc teria um run-time... vc está tendo um run-time error?
1- Não entendi o porquê da cláusula WHERE, restringindo somente o código = 1, isso restringiria a apenas o código 1 de ambas as tabelas... mas daà é a sua lógica...
2 - em Printer.Print Tab(3); Format(rs([Ô]Codigo[Ô]), [Ô]00#[Ô]); aqui tem erro!
Existe rs([Ô]Código[Ô]) e rs([Ô]CODIGO[Ô]), mas do jeito digitado não tem em nenhuma das duas tabelas! Logo não vai haver um campo desse no recordset criado.
Agora, acredito que se fosse esse o erro, vc teria um run-time... vc está tendo um run-time error?
Tópico encerrado , respostas não são mais permitidas