VB6 E CRYSTAL REPORTS
Ola Pessoal.
Estou tentando enviar dados de um listview para um field no crystal reports 8.0 desta forma
Dim i
For i = 1 To Menu.ListView1.ListItems.Count
Report.ParameterFields.Item([Ô]1[Ô]).AddCurrentValue (Menu.ListView1.ListItems(i).SubItems(1))
Next i
Mas so envia um item a não todos os itens
Alguem poderia me ajudar, desde ja agradeço
Estou tentando enviar dados de um listview para um field no crystal reports 8.0 desta forma
Dim i
For i = 1 To Menu.ListView1.ListItems.Count
Report.ParameterFields.Item([Ô]1[Ô]).AddCurrentValue (Menu.ListView1.ListItems(i).SubItems(1))
Next i
Mas so envia um item a não todos os itens
Alguem poderia me ajudar, desde ja agradeço
Bom, pelo seu código, você estará sempre enviando o subitem 1 como o parâmetro 1, uma vez que esses valores estão fixos.
Isso significa que estará [Ô]marcando[Ô] o parâmetro 1 sempre com o valor do subitem 1 do último item do listview.
Defina mais claramente o que você quer fazer, como, por exemplo, qual o objetivo prático, quantos parâmetros são esperados pelo report, quantos subitens há por item etc.
Isso significa que estará [Ô]marcando[Ô] o parâmetro 1 sempre com o valor do subitem 1 do último item do listview.
Defina mais claramente o que você quer fazer, como, por exemplo, qual o objetivo prático, quantos parâmetros são esperados pelo report, quantos subitens há por item etc.
OLA PROFESSOR
Quero enviar todos os itens do .ListItems(i) da coluna .SubItems(1))
Por exemplo uma ListView1 com 4 nomes so o ultimo esta sendo enviado para o crystal reports
FURADEIRA
SERRA MARMORE
LIXADEIRA
ESMERIL
So o ESMERIL Esta sendo enviado !
Quero enviar todos os itens do .ListItems(i) da coluna .SubItems(1))
Por exemplo uma ListView1 com 4 nomes so o ultimo esta sendo enviado para o crystal reports
FURADEIRA
SERRA MARMORE
LIXADEIRA
ESMERIL
So o ESMERIL Esta sendo enviado !
Sim, somente o ultimo é que será definido como valor corrente, após o loop, pois é isso o que seu código está orientando.
Se você quer enviar todos os itens em parâmetros distintos, verifique que o Ãndice do parâmetro (ou neste caso o nome [Ô]1[Ô]) também varie. Hoje você está utilizando assim:
Se por outro lado, o que você quer é coletar todos os valores, e depois passar tudo de uma só vez, como um só parâmetro (ou texto), a situação muda de figura, e ficaria mais parecido com algo como:
Mas no fim das contas, olhando as imagens que enviou, parece que o que você quer é passar os dados e não parâmetros, ou seja, os dados do relatório é que você está tentando transferir ao Report como parâmetros.
Neste caso, o que você está fazendo não é nem de longe o mais indicado. é muito mais prático e interessante criar o relatório (por meio do assistente, por exemplo) e enviar o conjunto de dados via Recordset, via DataTable, via XML etc., do que tentar enviá-los por uso de parâmetros, o que inclusive [Ô]mata[Ô] funcionalidades como ordenação e agrupamentos.
Neste caso eu sugiro que você conheça melhor o Crystal Reports e seu uso com VB6, e para isso, posso indicar este material, assim como os PDFs deste link.
Aqui no VBMania há vários exemplos de uso do Crystal Reports, entre artigos, códigos fonte e mesmo nos fóruns, de forma que aqui não há dificuldade em obter exemplos.
Com o José Carlos Macoratti, são dezenas de exemplos, como este ou este, e na minha opinião, todos podem ajudar você em conhecer melhor o Crystal Reports.
Se ainda assim persistirem as dúvidas, continue postando aqui.
Se você quer enviar todos os itens em parâmetros distintos, verifique que o Ãndice do parâmetro (ou neste caso o nome [Ô]1[Ô]) também varie. Hoje você está utilizando assim:
For i = 1 To Menu.ListView1.ListItems.Count
Report.ParameterFields.Item([Ô]1[Ô]).AddCurrentValue (Menu.ListView1.ListItems(i).SubItems(1))
Next i
, onde o ID do parâmetro é fixo.Se por outro lado, o que você quer é coletar todos os valores, e depois passar tudo de uma só vez, como um só parâmetro (ou texto), a situação muda de figura, e ficaria mais parecido com algo como:
Dim sPar As String
For i = 1 To Menu.ListView1.ListItems.Count
sPar = sPar & (Menu.ListView1.ListItems(i).SubItems(1)) & [Ô] [Ô]
Next i
Report.ParameterFields.Item([Ô]1[Ô]).AddCurrentValue(sPar)
Mas no fim das contas, olhando as imagens que enviou, parece que o que você quer é passar os dados e não parâmetros, ou seja, os dados do relatório é que você está tentando transferir ao Report como parâmetros.
Neste caso, o que você está fazendo não é nem de longe o mais indicado. é muito mais prático e interessante criar o relatório (por meio do assistente, por exemplo) e enviar o conjunto de dados via Recordset, via DataTable, via XML etc., do que tentar enviá-los por uso de parâmetros, o que inclusive [Ô]mata[Ô] funcionalidades como ordenação e agrupamentos.
Neste caso eu sugiro que você conheça melhor o Crystal Reports e seu uso com VB6, e para isso, posso indicar este material, assim como os PDFs deste link.
Aqui no VBMania há vários exemplos de uso do Crystal Reports, entre artigos, códigos fonte e mesmo nos fóruns, de forma que aqui não há dificuldade em obter exemplos.
Com o José Carlos Macoratti, são dezenas de exemplos, como este ou este, e na minha opinião, todos podem ajudar você em conhecer melhor o Crystal Reports.
Se ainda assim persistirem as dúvidas, continue postando aqui.
Valeu PROFESSOR .
Vou seguir o seu conselho e estudar melho o Crystal Reports Através do material que me endicou.
Ate a Próxima .
Vou seguir o seu conselho e estudar melho o Crystal Reports Através do material que me endicou.
Ate a Próxima .
OLA PROFESSOR.
Consegui enviar pelo DATA REPORT desta forma.
Dim oRS As New ADODB.Recordset
Dim i
[ô]Open recordset
With oRS
.Fields.Append [Ô]Number[Ô], adBSTR
.Fields.Append [Ô]Val1[Ô], adBSTR
.Fields.Append [Ô]Val2[Ô], adBSTR
.Fields.Append [Ô]Val3[Ô], adBSTR
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockOptimistic
.Open
End With
[ô]Assign to recordset
For i = 1 To ListView1.ListItems.Count
With oRS
.AddNew
.Fields([Ô]Number[Ô]).Value = ListView1.ListItems(i).SubItems(1)
.Fields([Ô]Val1[Ô]).Value = ListView1.ListItems(i).SubItems(3)
.Fields([Ô]Val3[Ô]).Value = ListView1.ListItems(i).SubItems(4)
.Fields([Ô]Val2[Ô]).Value = ListView1.ListItems(i).SubItems(5)
.Update
End With
Next i
[ô]Fill report
With DataReport1
Set .DataSource = Nothing
.DataMember = [Ô][Ô]
Set .DataSource = oRS
With .Sections([Ô]Section1[Ô]).Controls
.Item([Ô]txtNumber[Ô]).DataMember = [Ô][Ô]
.Item([Ô]txtNumber[Ô]).DataField = oRS.Fields([Ô]Number[Ô]).Name
.Item([Ô]txtVal1[Ô]).DataMember = [Ô][Ô]
.Item([Ô]txtVal1[Ô]).DataField = oRS.Fields([Ô]Val1[Ô]).Name
.Item([Ô]txtVal2[Ô]).DataMember = [Ô][Ô]
.Item([Ô]txtVal2[Ô]).DataField = oRS.Fields([Ô]Val2[Ô]).Name
.Item([Ô]txtVal3[Ô]).DataMember = [Ô][Ô]
.Item([Ô]txtVal3[Ô]).DataField = oRS.Fields([Ô]Val3[Ô]).Name
End With
.Show 1
End With
Set oRS = Nothing
Como enviar os dados do Lisview direto para o CRYSTAL REPORTS sem usar mdb .
Agradeço se puder me ajudar
Consegui enviar pelo DATA REPORT desta forma.
Dim oRS As New ADODB.Recordset
Dim i
[ô]Open recordset
With oRS
.Fields.Append [Ô]Number[Ô], adBSTR
.Fields.Append [Ô]Val1[Ô], adBSTR
.Fields.Append [Ô]Val2[Ô], adBSTR
.Fields.Append [Ô]Val3[Ô], adBSTR
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockOptimistic
.Open
End With
[ô]Assign to recordset
For i = 1 To ListView1.ListItems.Count
With oRS
.AddNew
.Fields([Ô]Number[Ô]).Value = ListView1.ListItems(i).SubItems(1)
.Fields([Ô]Val1[Ô]).Value = ListView1.ListItems(i).SubItems(3)
.Fields([Ô]Val3[Ô]).Value = ListView1.ListItems(i).SubItems(4)
.Fields([Ô]Val2[Ô]).Value = ListView1.ListItems(i).SubItems(5)
.Update
End With
Next i
[ô]Fill report
With DataReport1
Set .DataSource = Nothing
.DataMember = [Ô][Ô]
Set .DataSource = oRS
With .Sections([Ô]Section1[Ô]).Controls
.Item([Ô]txtNumber[Ô]).DataMember = [Ô][Ô]
.Item([Ô]txtNumber[Ô]).DataField = oRS.Fields([Ô]Number[Ô]).Name
.Item([Ô]txtVal1[Ô]).DataMember = [Ô][Ô]
.Item([Ô]txtVal1[Ô]).DataField = oRS.Fields([Ô]Val1[Ô]).Name
.Item([Ô]txtVal2[Ô]).DataMember = [Ô][Ô]
.Item([Ô]txtVal2[Ô]).DataField = oRS.Fields([Ô]Val2[Ô]).Name
.Item([Ô]txtVal3[Ô]).DataMember = [Ô][Ô]
.Item([Ô]txtVal3[Ô]).DataField = oRS.Fields([Ô]Val3[Ô]).Name
End With
.Show 1
End With
Set oRS = Nothing
Como enviar os dados do Lisview direto para o CRYSTAL REPORTS sem usar mdb .
Agradeço se puder me ajudar
Faça seu login para responder