VB6 E CRYSTAL REPORTS

ANDRU 03/05/2013 19:08:49
#422924
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
PROFESSOR 04/05/2013 16:24:57
#422942
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.
ANDRU 06/05/2013 06:46:27
#422982
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 !
PROFESSOR 06/05/2013 10:52:16
#422992
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:

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.
ANDRU 06/05/2013 12:16:32
#422999
Valeu PROFESSOR .

Vou seguir o seu conselho e estudar melho o Crystal Reports Através do material que me endicou.

Ate a Próxima .
ANDRU 10/05/2013 12:34:01
#423275
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
Faça seu login para responder