SELECT FROM TABELA1, TABELA2 WHERE ..ORDER BY
preciso de ajuda...
eu tenho isto:
BD.RecOpen recDocs, [Ô]SELECT * FROM Fct, FctLn WHERE (Fct.FctData) >=#[Ô] & Format(DataIni.Value, [Ô]m/d/yyyy[Ô]) & _
[Ô]# And (Fct.FctData) <=#[Ô] & Format(DataFim.Value, [Ô]m/d/yyyy[Ô]) & _
[Ô]# Or (FctLn.FctLnData) >=#[Ô] & Format(DataIni.Value, [Ô]m/d/yyyy[Ô]) & _
[Ô]# And (FctLn.FctLnData) <=#[Ô] & Format(DataFim.Value, [Ô]m/d/yyyy[Ô]) & [Ô]# ORDER By Fct.FctNr [Ô]
fct é tabela1 e fctln é a tabela 2...
o meu problema é que supondo que tenho 2 linhas na tabela1 e 3 linhas na tabela2, ele esta-me a imprimir 3 vezes cada linha.
o código é este:
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[Ô]
[ô] 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[Ô]), [Ô],[Ô], [Ô][Ô]) & [Ô] [Ô] & [Ô]N[Ô] & [Ô]N[Ô]
[ô] 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
Sal:
PROXIMO:
Loop
BD.RecClose recDocs, True
eu tenho isto:
BD.RecOpen recDocs, [Ô]SELECT * FROM Fct, FctLn WHERE (Fct.FctData) >=#[Ô] & Format(DataIni.Value, [Ô]m/d/yyyy[Ô]) & _
[Ô]# And (Fct.FctData) <=#[Ô] & Format(DataFim.Value, [Ô]m/d/yyyy[Ô]) & _
[Ô]# Or (FctLn.FctLnData) >=#[Ô] & Format(DataIni.Value, [Ô]m/d/yyyy[Ô]) & _
[Ô]# And (FctLn.FctLnData) <=#[Ô] & Format(DataFim.Value, [Ô]m/d/yyyy[Ô]) & [Ô]# ORDER By Fct.FctNr [Ô]
fct é tabela1 e fctln é a tabela 2...
o meu problema é que supondo que tenho 2 linhas na tabela1 e 3 linhas na tabela2, ele esta-me a imprimir 3 vezes cada linha.
o código é este:
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[Ô]
[ô] 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[Ô]), [Ô],[Ô], [Ô][Ô]) & [Ô] [Ô] & [Ô]N[Ô] & [Ô]N[Ô]
[ô] 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
Sal:
PROXIMO:
Loop
BD.RecClose recDocs, True
preciso de ajuda urgente!!!
alguém me ajude
alguém me ajude
tente agrupar
BD.RecOpen recDocs, [Ô]SELECT DISTINCT * FROM Fct, FctLn WHERE (Fct.FctData) >=#[Ô] & Format(DataIni.Value, [Ô]m/d/yyyy[Ô]) & _
[Ô]# And (Fct.FctData) <=#[Ô] & Format(DataFim.Value, [Ô]m/d/yyyy[Ô]) & _
[Ô]# Or (FctLn.FctLnData) >=#[Ô] & Format(DataIni.Value, [Ô]m/d/yyyy[Ô]) & _
[Ô]# And (FctLn.FctLnData) <=#[Ô] & Format(DataFim.Value, [Ô]m/d/yyyy[Ô]) & [Ô]# ORDER By Fct.FctNr [Ô]
BD.RecOpen recDocs, [Ô]SELECT DISTINCT * FROM Fct, FctLn WHERE (Fct.FctData) >=#[Ô] & Format(DataIni.Value, [Ô]m/d/yyyy[Ô]) & _
[Ô]# And (Fct.FctData) <=#[Ô] & Format(DataFim.Value, [Ô]m/d/yyyy[Ô]) & _
[Ô]# Or (FctLn.FctLnData) >=#[Ô] & Format(DataIni.Value, [Ô]m/d/yyyy[Ô]) & _
[Ô]# And (FctLn.FctLnData) <=#[Ô] & Format(DataFim.Value, [Ô]m/d/yyyy[Ô]) & [Ô]# ORDER By Fct.FctNr [Ô]
alô Luizcomino
tentei mas sem sucesso.
tentei mas sem sucesso.
aquilo que eu vi foi, se colocar select * from tabela 1 where .......
ele imprime so 1 linha de cada vez da tabela 1
se colocar no select * from Tabela 1, tabela 2 where ....
ele imprime o nº das linhas da tabela 2 pelo nº de linhas da tabela1
ele imprime so 1 linha de cada vez da tabela 1
se colocar no select * from Tabela 1, tabela 2 where ....
ele imprime o nº das linhas da tabela 2 pelo nº de linhas da tabela1
FILIPA se as linhas estiverem com dados igual use o DISTINCT, só que com ele vc não pode colocar o *, terá que relacionar todas os campos, ficaria algo assim
Select distinct(campo1),campo2,campo3,campo4,campo5 from sua tabela
Testa ai qqer coisa posta novamente ok
Select distinct(campo1),campo2,campo3,campo4,campo5 from sua tabela
Testa ai qqer coisa posta novamente ok
Tentou usar o GROUP BY
outra coisa, reparei que dentro do laço tem
isso dentro do laço vai ser sempre 1 então se deseja manter sempre 1 ficaria mais fácil assim
agora se deseja criar uma numeração dentro do laço coloque [ContFct = 0] antes do [do until]
BD.RecOpen recDocs, [Ô]SELECT * FROM Fct, FctLn WHERE (Fct.FctData) >=#[Ô] & Format(DataIni.Value, [Ô]m/d/yyyy[Ô]) & _
[Ô]# And (Fct.FctData) <=#[Ô] & Format(DataFim.Value, [Ô]m/d/yyyy[Ô]) & _
[Ô]# Or (FctLn.FctLnData) >=#[Ô] & Format(DataIni.Value, [Ô]m/d/yyyy[Ô]) & _
[Ô]# And (FctLn.FctLnData) <=#[Ô] & Format(DataFim.Value, [Ô]m/d/yyyy[Ô]) & [Ô]# GRoUP BY Fct.FctNr ORDER By Fct.FctNr [Ô]
outra coisa, reparei que dentro do laço tem
ContFct = 0
ContFct = ContFct + 1
isso dentro do laço vai ser sempre 1 então se deseja manter sempre 1 ficaria mais fácil assim
ContFct = 1
agora se deseja criar uma numeração dentro do laço coloque [ContFct = 0] antes do [do until]
Tente usar o Group By
Mais você pode melhorar o seu SQL colocando BETWEEN e parenteses para separar a lógica do OR coloque assim:
Descreva a estrutura das tabelas para nós! assim podemos saber o que realmente precisa para que seja sanada sua duvida
Mais você pode melhorar o seu SQL colocando BETWEEN e parenteses para separar a lógica do OR coloque assim:
SQL = [Ô]SELECT * FROM Fct, FctLn WHERE ((Fct.FctData BETWEEN #[Ô] & Format(DataIni.Value, [Ô]m/d/yyyy[Ô]) & [Ô]# AND #[Ô] & Format(DataFim.Value, [Ô]m/d/yyyy[Ô]) & [Ô]#) [Ô]
SQL = SQL & [Ô]Or (FctLn.FctLnData BETWEEN #[Ô] & Format(DataIni.Value, [Ô]m/d/yyyy[Ô]) & [Ô]# AND #[Ô] & Format(DataFim.Value, [Ô]m/d/yyyy[Ô]) & [Ô]#)) ORDER By Fct.FctNr[Ô]
BD.RecOpen recDocs, SQL
Descreva a estrutura das tabelas para nós! assim podemos saber o que realmente precisa para que seja sanada sua duvida
Caras
estou agradecida, mas nao resolveu
estou agradecida, mas nao resolveu
a minha duvida e que ele esta me a imprimir o nº de linhas da 2tabela (fctln) por cada linha da tabela 1(fct)
supondo: tenho 2 linhas na tabela 1 (fct)
1ª linha - fatura 0001
2ª linha - fatura 0002
onde a fatura 0001 tem 2 produtos (2 linhas na base dados tabela 2)
e a fatura 0001 tem apenas 1 produto (1 linha)
eu usando o select * from FCT, FCTLN ....
imprime assim:
fatura 0001
fatura 0001
fatura 0001
fatura 0002
fatura 0002
fatura 0002
e eu queria apenas
fatura 0001
fatura 0002
mas no meu codigo tenho r1, r2 e r3.
isto é r1 para o cabeçalho da fatura
r2 para os produtos/artigos da fatura
r3 para o total de todos os produtos da fatura.
queria ainda que me ajudassm, enquanto houver varios produtos numa mesma fatura que imprima assim
r1 fatura 0001
r2 produto 1 1qtd .... 5€
r2 produto 2 25qtd... 1€
r3 fatura 0001 .... 30€
neste momento ao erro de cima ainda tenho este. que me imprime assim:
r1 fatura 0001
r2 produto 1 1qtd .... 5€
r3 fatura 0001 .... 30€
r1 fatura 0001
r2 produto 2 25qtd... 1€
r3 fatura 0001 .... 30€
supondo: tenho 2 linhas na tabela 1 (fct)
1ª linha - fatura 0001
2ª linha - fatura 0002
onde a fatura 0001 tem 2 produtos (2 linhas na base dados tabela 2)
e a fatura 0001 tem apenas 1 produto (1 linha)
eu usando o select * from FCT, FCTLN ....
imprime assim:
fatura 0001
fatura 0001
fatura 0001
fatura 0002
fatura 0002
fatura 0002
e eu queria apenas
fatura 0001
fatura 0002
mas no meu codigo tenho r1, r2 e r3.
isto é r1 para o cabeçalho da fatura
r2 para os produtos/artigos da fatura
r3 para o total de todos os produtos da fatura.
queria ainda que me ajudassm, enquanto houver varios produtos numa mesma fatura que imprima assim
r1 fatura 0001
r2 produto 1 1qtd .... 5€
r2 produto 2 25qtd... 1€
r3 fatura 0001 .... 30€
neste momento ao erro de cima ainda tenho este. que me imprime assim:
r1 fatura 0001
r2 produto 1 1qtd .... 5€
r3 fatura 0001 .... 30€
r1 fatura 0001
r2 produto 2 25qtd... 1€
r3 fatura 0001 .... 30€
já resolvi ;)
agora tenho um problema.
fatura 000001 tem o artigo 1
fatura 000002 tem 2 linhas de artigo 2 e o artigo 3
neste momento imprime, fatura 000001 com o artigo 3
agora tenho um problema.
fatura 000001 tem o artigo 1
fatura 000002 tem 2 linhas de artigo 2 e o artigo 3
neste momento imprime, fatura 000001 com o artigo 3
Tópico encerrado , respostas não são mais permitidas