LOOP COM SELECT

VILANOVA 02/07/2011 14:23:16
#378302
pessoal boa tarde, estou tentando fazer um loop aqui mas nao to conseguindo de forma alguma, tenho um grid que ele tem uma coluna que tem como checar as caixinhas para o mesmo ser executado, entao vamos supor, eu quero imprimir os relatorios apenas das id(s) 1,3, e 5, eu checo essas caixas o sistema executa o select e imprime o relatorio em crystal report, so que nao to conseguindo fazer isso funcionar, abaixo o codigo que estou tentando, estou jogando o que esta checado para outro grid para o mesmo receber quais foram checados e executar a query so que nao to conseguindo fazer de jeito algum..

   
Private Sub Inclus()
Dim iL As Integer
Set clsCnn = New TS_AcessoBD
Set Report = Crystal.OpenReport([Ô]c:\RELTESTE.rpt[Ô])

strSQL = [Ô][Ô] & [Ô]select a.*, b.*,c.*,d.*,e.*,f.*,g.* [Ô]
strSQL = strSQL & [Ô] from movimentoocorrencias a,cadpessoasendereco b,cadocorrencias c,cadcat d,cadpessoascontato e,cadpessoas f,cadusuarios g [Ô]
strSQL = strSQL & [Ô] where f.pesscodigo=e.pesscodigo and f.pesscodigo=b.pesscodigo and [Ô]
strSQL = strSQL & [Ô] a.movclicodigo=f.pesscodigo and a.movfilial=d.id and [Ô]
strSQL = strSQL & [Ô] a.movocorrencia=c.idocorr and a.movidcolaborador=g.userid and [Ô]
strSQL = strSQL & [Ô] e.contprincipal=[ô]1[ô] and b.endprincipal=[ô]1[ô] [Ô]
Set MyRS = clsCnn.ExecutaSQL(strSQL)

[ô]primeiro loop jogando para o grid 2 as informacoes
VSFlexGrid1.Clear
For i = 1 To TDBGrid1.Rows - 1
If TDBGrid1.TextMatrix(i, 11) = strChecked Then
VSFlexGrid1.AddItem TDBGrid1.TextMatrix(i, 0)
End If
Next i

For iL = 1 To VSFlexGrid1.Rows - 1
VSFlexGrid1.Row = iL

strSQL = strSQL & [Ô] and a.idmov=[ô][Ô] & VSFlexGrid1.TextMatrix(VSFlexGrid1.Row, 0) & [Ô][ô][Ô]
Set MyRS = clsCnn.ExecutaSQL(strSQL)
Report.Database.SetDataSource MyRS
Next iL
With frm_REL_Relatorios
.CrV.DisplayGroupTree = False
.CrV.ReportSource = Report
.CrV.ViewReport
.CrV.Refresh
.Show
End With
End Sub




EDERMIR 03/07/2011 17:41:02
#378365
Mude assim:

For iL = 1 To VSFlexGrid1.Rows - 1
VSFlexGrid1.Row = iL
strSQL2 = [Ô] and a.idmov=[ô][Ô] & VSFlexGrid1.TextMatrix(VSFlexGrid1.Row, 0) & [Ô][ô][Ô]
Set MyRS = clsCnn.ExecutaSQL(strSQL & strSQL2)
Report.Database.SetDataSource MyRS
Next iL
VILANOVA 05/07/2011 15:03:16
#378530
boa tarde Edemir, fiz da forma que vc colocou, mas mesmo assim, ele imprime apenas a ultima que foi selecionada, ous eja, ele nao [Ô]coleciona[Ô] as que tem que imprimir .. entendeu? veja como modifiquei..

  
Private Sub ImprimirOS()
Dim sCriterio As String
Set clsCnn = New TS_AcessoBD
Set Report = Crystal.OpenReport([Ô]c:\RELTESTE.rpt[Ô])
Report.DiscardSavedData
strSQL = [Ô]select a.*, b.*,c.*,d.*,e.*,f.*,g.* [Ô]
strSQL = strSQL & [Ô] from movimentoocorrencias a,cadpessoasendereco b,cadocorrencias c,cadcat d,cadpessoascontato e,cadpessoas f,cadusuarios g [Ô]
strSQL = strSQL & [Ô] where f.pesscodigo=e.pesscodigo and f.pesscodigo=b.pesscodigo and [Ô]
strSQL = strSQL & [Ô] a.movclicodigo=f.pesscodigo and a.movfilial=d.id and [Ô]
strSQL = strSQL & [Ô] a.movocorrencia=c.idocorr and a.movidcolaborador=g.userid and [Ô]
strSQL = strSQL & [Ô] e.contprincipal=[ô]1[ô] and b.endprincipal=[ô]1[ô] [Ô]
Set MyRS = clsCnn.ExecutaSQL(strSQL)

For i = 1 To TDBGrid1.Rows - 1
TDBGrid1.Row = i
If TDBGrid1.TextMatrix(i, 11) = strChecked Then
strSQL2 = [Ô] and a.idmov=[ô][Ô] & TDBGrid1.TextMatrix(i, 0) & [Ô][ô][Ô]
End If
Set MyRS = clsCnn.ExecutaSQL(strSQL & strSQL2)
Report.Database.SetDataSource MyRS
Next

With frm_REL_Relatorios

.CrV.DisplayGroupTree = False
.CrV.ReportSource = Report
.CrV.ViewReport
.CrV.Refresh
.Show
End With
Set clsCnn = Nothing
Set Report = Nothing

End Sub
LLAIA 05/07/2011 18:54:11
#378547
Veja se funciona agora

Private Sub Inclus()
Dim iL As Integer
Dim sidMovs as String

Set clsCnn = New TS_AcessoBD
Set Report = Crystal.OpenReport([Ô]c:\RELTESTE.rpt[Ô])

[ô]primeiro loop jogando para a variável sidMovs as informacoes

For i = 1 To TDBGrid1.Rows - 1
If TDBGrid1.TextMatrix(i, 11) = strChecked Then
sidMovs = sidMovs & TDBGrid1.TextMatrix(i, 0) & IIf((i=TDBGrid1.Rows - 1),[Ô][Ô],[Ô],[Ô]) [ô] aqui estou considerando o campo idMov como inteiro
End If
Next i


strSQL = [Ô][Ô] & [Ô]select a.*, b.*,c.*,d.*,e.*,f.*,g.* [Ô]
strSQL = strSQL & [Ô] from movimentoocorrencias a,cadpessoasendereco b,cadocorrencias c,cadcat d,cadpessoascontato e,cadpessoas f,cadusuarios g [Ô]
strSQL = strSQL & [Ô] where f.pesscodigo=e.pesscodigo and f.pesscodigo=b.pesscodigo and [Ô]
strSQL = strSQL & [Ô] a.movclicodigo=f.pesscodigo and a.movfilial=d.id and [Ô]
strSQL = strSQL & [Ô] a.movocorrencia=c.idocorr and a.movidcolaborador=g.userid and [Ô]
strSQL = strSQL & [Ô] e.contprincipal=[ô]1[ô] and b.endprincipal=[ô]1[ô] and a.idmov in([Ô] & sidMovs & [Ô])[Ô]

Set MyRS = clsCnn.ExecutaSQL(strSQL)


Report.Database.SetDataSource MyRS

With frm_REL_Relatorios
.CrV.DisplayGroupTree = False
.CrV.ReportSource = Report
.CrV.ViewReport
.CrV.Refresh
.Show
End With

End Sub
EDERMIR 05/07/2011 20:46:05
#378548
OOOOPS !!! Mais uma mudança:

strSQL2 = [Ô][Ô]
For i = 1 To TDBGrid1.Rows - 1
TDBGrid1.Row = i
If TDBGrid1.TextMatrix(i, 11) = strChecked Then
strSQL2 = strSQL2 & iif(len(strSQL2) = 0;[Ô] and ([Ô];[Ô] or [Ô]) & [Ô]a.idmov=[ô][Ô] & TDBGrid1.TextMatrix(i, 0) & [Ô][ô][Ô]
End If
Next
strSQL2 = iif(len(strSQL2) <> 0;[Ô])[Ô];[Ô][Ô])
Set MyRS = clsCnn.ExecutaSQL(strSQL & strSQL2)
Report.Database.SetDataSource MyRS
XXXANGELSXXX 05/07/2011 20:51:08
#378549
Resposta escolhida
Amigo, a forma que nosso amigo leandro passou esta correta, so faria uma pequena alteração, o sistema vai identificar ali embaixo uma virgula a mais quando fazer a seleçao... entao faça um replace depois do seu ultimo strsql assim :

strSQL = strSQL & [Ô] e.contprincipal=[ô]1[ô] and b.endprincipal=[ô]1[ô] and a.idmov in([Ô] & sidMovs & [Ô])[Ô]
strSQL = Replace(strSQL, [Ô],)[Ô], [Ô])[Ô])
ai ele vai passar a string sem a utlima virgula.
Tópico encerrado , respostas não são mais permitidas