OBJETO PRINT

JPAULO101 04/06/2010 11:46:03
#343878
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
MSMJUDAS 04/06/2010 11:56:32
#343880
é 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.
TECLA 04/06/2010 11:56:50
#343881
No tópico anterior, postei um exemplo fazendo uma junção das 2 TABELAS.
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.
JPAULO101 04/06/2010 12:06:28
#343882
OK TECLA FIZ COM SOLICITADO, MAIS NÃO ESTÁ IMPRIMINDO NADA.
JPAULO101 04/06/2010 18:00:55
#343912
Alguém.
LIZANDER 05/06/2010 10:41:25
#343955
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.


MSMJUDAS 05/06/2010 11:09:32
#343959
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.
TECLA 05/06/2010 11:12:52
#343960
Citação:

:
OK TECLA FIZ COM SOLICITADO, MAIS NÃO ESTÁ IMPRIMINDO NADA.


Traduza o que significa [Ô]MAIS NÃO ESTÁ IMPRIMINDO NADA[Ô].
NILTON.VIANNA 05/06/2010 16:55:27
#344000
Aquele Exemplo anterior que postei por SQL é impossivel não imprimir as dus tabelas
JPAULO101 07/06/2010 14:13:08
#344150
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
LIZANDER 07/06/2010 22:05:29
#344200
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?

Página 1 de 2 [17 registro(s)]
Tópico encerrado , respostas não são mais permitidas