FOR - WHILE - DO UNTIL

FILIPA 11/10/2012 08:58:15
#411791
OLÁ;)


TENHO UM PROBLEMAZINHO.....

Citação:

If BD.GetFieldValue(recDocs, [Ô]FCT[Ô]) <> 0 Then
ContFct = 1
Do Until recDocs.EOF
ContFct = 1
ContFct = ContFct + 1
recDocs.MoveNext

Print #f, [Ô]R1[Ô] [ô].....

If BD.GetFieldValue(recDocs, [Ô]FCTln[Ô]) <> 0 Then
DO WHILE BD.GETFIELDVALUE(RECDOCS, [Ô]FCT.FCTID[Ô]) = BD.GETFIELDVALUE(RECDOCS, [Ô]FCT.FCTID[Ô])

Print #f, [Ô]R2[Ô]

recDocs.MoveNext
Loop
End If

Print #f, [Ô]R3[Ô]
recDocs.MoveNext
Loop
End If



OU SEJA ELE AGORA IMPRIME O 1º R1, DE SEGUIDA TODOS OS R2 E O R3 NÃO, BLOQUEIA. OS DADOS VEM DE 2 TABELAS DA BASE DADOS. E SO SEI QUAL LINHA PERTENCE A QUAL COM O FCTID, MAS DE TABELAS DIFERENTES, FCTLN E FCT

PRECISO DE AJUDA





GOODSPEAKERS 11/10/2012 09:19:44
#411797
Cara esses [Ô]if's[Ô] estão errados e o loop tb - manda ai o comando completo que vc usa
FILIPA 11/10/2012 10:06:01
#411805
Citação:

If objSQLacs.Provider = 1 Or objSQLacs.Provider = 2 Then

BD.RecOpen recDocs, [Ô]SELECT * FROM Fct INNER JOIN FCTLN ON (FCT.FCTID = FCTLN.FCTID) WHERE (Fct.FctData) >=#[Ô] & Format(DataIni.Value, [Ô]m/d/yyyy[Ô]) & _
[Ô]# And (Fct.FctData) <=#[Ô] & Format(DataFim.Value, [Ô]m/d/yyyy[Ô]) & _
[Ô]# And (FctLn.FctLnData) >=#[Ô] & Format(DataIni.Value, [Ô]m/d/yyyy[Ô]) & _
[Ô]# And (FctLn.FctLnData) <=#[Ô] & Format(DataFim.Value, [Ô]m/d/yyyy[Ô]) & [Ô]# ORDER By Fct.FctId, FctLn.FctId, Fct.FctNr, Fct.FctData, FctLn.FctLnData [Ô]


ElseIf objSQLacs.Provider = 3 Then
[ô]SQL...
End If


If BD.RecEmpty(recDocs) = False Then

If BD.GetFieldValue(recDocs, [Ô]FCT[Ô]) <> 0 Then

ContFct = 0
Do Until recDocs.EOF
ContFct = 0

ContFct = ContFct + 1


[ô] isto é o cabeçalho que se imprime no ficheiro txt,
[ô]r1
Print #f, [Ô]R1[Ô] & Format(BD.GetFieldValue(recDocs, [Ô]FctData[Ô]), [Ô]yyyy[Ô]) & Format(BD.GetFieldValue(recDocs, [Ô]FctData[Ô]), [Ô]mm[Ô]) & Format(BD.GetFieldValue(recDocs, [Ô]FctData[Ô]), [Ô]dd[Ô]) _
& [Ô]0010[Ô] & [Ô]F-[Ô] & Format(CStr(BD.GetFieldValue(recDocs, [Ô]FctNr[Ô])), [Ô]000000[Ô]) & [Ô]00[Ô] _
& Format(BD.GetFieldValue(recDocs, [Ô]FctEntCd[Ô]), [Ô]000000[Ô]) & [Ô]0000[Ô] & [Ô]0000[Ô] & [Ô]0000[Ô] & [Ô]0010[Ô] _
& [Ô]EUR[Ô] & [Ô]0000[Ô] & [Ô]G-000000[Ô] & [Ô]00000000[Ô] & Space(106) & [Ô]N[Ô]

If BD.GetFieldValue(recDocs, [Ô]FCTln[Ô]) <> 0 Then
ContaLinha = 0

Do While BD.GetFieldValue(recDocs, [Ô]fct.fctid [Ô]) = BD.GetFieldValue(recDocs, [Ô]FCTLN.FCTID[Ô])
ContaLinha = ContaLinha + 1

[ô] R2
[ô] este é o r2 que é o [Ô]meio [Ô] todas as linhas de artigos são representadas aki
Print #f, [Ô]R2[Ô] & Format(BD.GetFieldValue(recDocs, [Ô]FctData[Ô]), [Ô]yyyy[Ô]) & Format(BD.GetFieldValue(recDocs, [Ô]FctData[Ô]), [Ô]mm[Ô]) & Format(BD.GetFieldValue(recDocs, [Ô]FctData[Ô]), [Ô]dd[Ô]) _
& [Ô]0010[Ô] & [Ô]F-[Ô] & Format(CStr(BD.GetFieldValue(recDocs, [Ô]FctNr[Ô])), [Ô]000000[Ô]) _
& Replace(Format(CStr(BD.GetFieldValue(recDocs, [Ô]FctLnCD[Ô])), [Ô]000000000000000[Ô]), [Ô],[Ô], [Ô][Ô]) & [Ô]00000000[Ô] & [Ô]00000000[Ô] & [Ô]00000000[Ô] & [Ô]UN[Ô] & [Ô]0001[Ô] _
& Format(BD.GetFieldValue(recDocs, [Ô]FctLnTxIva[Ô]), [Ô]00[Ô]) & [Ô]00[Ô] & Replace(Format(CStr(BD.GetFieldValue(recDocs, [Ô]FctLnQtd[Ô])), [Ô]00000000.000[Ô]), [Ô],[Ô], [Ô][Ô]) _
& [Ô] [Ô] & Format(BD.GetFieldValue(recDocs, [Ô]FctLnTxDesc[Ô]), [Ô]00[Ô]) & [Ô]00[Ô] & [Ô]0000[Ô] & [Ô]0000[Ô] & [Ô]U[Ô] & Replace(Format(CStr(BD.GetFieldValue(recDocs, [Ô]FctLnVlrDef[Ô])), [Ô]00000000.000[Ô]), [Ô],[Ô], [Ô][Ô]) & [Ô] [Ô] _
& Replace(Format(CStr(BD.GetFieldValue(recDocs, [Ô]FctLnDesc[Ô])), [Ô]00000000.00[Ô]), [Ô],[Ô], [Ô][Ô]) & [Ô] [Ô] & [Ô]0000000000[Ô] & [Ô] [Ô] _
& Replace(Format(CStr(BD.GetFieldValue(recDocs, [Ô]FctLnVlr[Ô])), [Ô]00000000.00[Ô]), [Ô],[Ô], [Ô][Ô]) & [Ô] [Ô] & Replace(Format(CStr(BD.GetFieldValue(recDocs, [Ô]FctLnValorCIva[Ô])), [Ô]00000000.00[Ô]), [Ô],[Ô], [Ô][Ô]) & [Ô] [Ô] _
& Replace(Format(CStr(BD.GetFieldValue(recDocs, [Ô]FctLnIva[Ô])), [Ô]00000000.00[Ô]), [Ô],[Ô], [Ô][Ô]) & [Ô] [Ô] & Replace(Format(CStr(BD.GetFieldValue(recDocs, [Ô]FctLnValorCIva[Ô])), [Ô]00000000.00[Ô]), [Ô],[Ô], [Ô][Ô]) & [Ô] [Ô] & Replace(Replace(Format(CStr(BD.GetFieldValue(recDocs, [Ô]FctLnIvaInc[Ô])), [Ô]0[Ô]), [Ô]0[Ô], [Ô]N[Ô]), [Ô]-1[Ô], [Ô]S[Ô]) & [Ô]N[Ô]

recDocs.MoveNext
Loop

End If



[ô] R3
[ô]r3 é os totais da fatura
Print #f, [Ô]R3[Ô] & Format(BD.GetFieldValue(recDocs, [Ô]FctData[Ô]), [Ô]yyyy[Ô]) & Format(BD.GetFieldValue(recDocs, [Ô]FctData[Ô]), [Ô]mm[Ô]) & Format(BD.GetFieldValue(recDocs, [Ô]FctData[Ô]), [Ô]dd[Ô]) _
& [Ô]0010[Ô] & [Ô]F-[Ô] & Format(CStr(BD.GetFieldValue(recDocs, [Ô]FctNr[Ô])), [Ô]000000[Ô]) _
& Replace(Format(CStr(BD.GetFieldValue(recDocs, [Ô]FctTotalDesc[Ô])), [Ô]00000000.00[Ô]), [Ô],[Ô], [Ô][Ô]) & [Ô] [Ô] & [Ô]0000000000[Ô] & [Ô] [Ô] _
& Replace(Format(CStr(BD.GetFieldValue(recDocs, [Ô]FctTotalSIVA[Ô])), [Ô]00000000.00[Ô]), [Ô],[Ô], [Ô][Ô]) & [Ô] [Ô] & Replace(Format(CStr(BD.GetFieldValue(recDocs, [Ô]FctTotal[Ô])), [Ô]00000000.00[Ô]), [Ô],[Ô], [Ô][Ô]) & [Ô] [Ô] _
& Replace(Format(CStr(BD.GetFieldValue(recDocs, [Ô]FctTotalIVA[Ô])), [Ô]00000000.00[Ô]), [Ô],[Ô], [Ô][Ô]) & [Ô] [Ô] & [Ô]0000000000[Ô] & [Ô] [Ô] & Replace(Format(CStr(BD.GetFieldValue(recDocs, [Ô]FctTotal[Ô])), [Ô]00000000.00[Ô]), [Ô],[Ô], [Ô][Ô]) & [Ô] [Ô] & Space(76) & [Ô]N[Ô]


recDocs.MoveNext

Loop
End If

Sal:
PROXIMO:

BD.RecClose recDocs, True
End If





ajude-me
MARCELO.TREZE 11/10/2012 10:07:13
#411807
Filipa to começando a achar que você entrou com o pé esquerdo neste programa, são muitas duvidas, e sou sincero até agora não entendi nenhuma delas, pois são loop's, diversas tabelas dados cruzados, etc... e isso fica mais fácil quando estamos trabalhando no projeto desde o começo.

bom derrepente você não esta sabendo fazer a pergunta. mas existe algumas coisas que você deve se atentar, exemplo:

em outro tópico disee pra você tomar cuidado com isso

f BD.GetFieldValue(recDocs, [Ô]FCT[Ô]) <> 0 Then
ContFct = 1
Do Until recDocs.EOF
[txt-color=#e80000]ContFct = 1[/txt-color] <--- esta linha não pode existir
ContFct = ContFct + 1
[txt-color=#e80000]recDocs.MoveNext[/txt-color] <--- e esta linha tem que estar por ultimo antes do loop


porém você repete o movenext em todo codigo, isso vira uma lambança


FILIPA 11/10/2012 10:14:18
#411808
ja retirei isso . e nao para de imprimir o print f# r2
MARCELO.TREZE 11/10/2012 10:19:54
#411809
Vou tentar explicar de maneira resumida, veja como deve funcionar

ContFct = 0
Do Until recDocs.EOF
ContFct = ContFct + 1

If x=y then
seu print
end if

if x=y then
seu print
end if

recDocs.MoveNext <--- e esta linha tem que estar por ultimo antes do loop
Loop
FILIPA 11/10/2012 10:31:39
#411810
esqueçam.

eu safo me a minha maneira.
FILIPA 11/10/2012 12:21:35
#411826
é que estou pegando num projecto que tem 15 modulos e cada modulo tem muito mais que 10.000 linhas de codigo
GOODSPEAKERS 11/10/2012 14:39:33
#411855
Ja que vc deseja assim... feche o topico ... valeu
Tópico encerrado , respostas não são mais permitidas