Duvidas sobre o SetRelation
Publicado: Vie Mar 15, 2013 9:05 pm
Saudaçíµes!
Estou tentando fazer um cadastro de clientes onde será exibido em guias(utilizando o TFolder com 2 guias e em cada uma um TDBBrowser) o contas a pagar e contas a receber deste cliente.
O meu problema esta no uso do SetRelation que, não encontrei uma forma de utilizar como no harbour, onde existe um parí¢metro lScoped, que faz aparecerem apenas os registros relacionados e sempre que muda de registro da tabela principal é feito um Seek nas tabelas relacionadas e apresentado apenas os registros relacionados ao da tabela principal.
Estou enviando também um mine projeto com o cadastro de clientes com todos os arquivos necessários.
Mas em resumo eu tenho um TCdxDataSource e 4 TDbfDataset's(dbfArquivos, dbfCliente, dbfConrec e dbfConpag).
Na tabela dbfArquivos, eu tenho os indices de todas as tabelas do meu cadastro, então no envento FormInitialize do meu formulário, eu localizo o registro ref. a cada uma das tabelas e recrio os indices com o método, AddTag da TDbfDataSet, seleciono o índice com o OrdSetFocus e relaciono as tabelas dbfConrec e dbfConpag com a tabela cliente, através do campo CODIGO, utilizando SetRelation('CODIGO', ::dbfConrec, .t.) e SetRelation('CODIGO', ::dbfConpag, .t.).
Segue abaixo o código do FormInitialize:
METHOD FormInitialize( oSender ) CLASS TForm1
local cIdx := ''
local i
::dbfArquivos:lOpen = .t.
::dbfCliente:lOpen = .t.
::dbfConrec:lOpen = .t.
::dbfConpag:lOpen = .t.
if ::dbfArquivos:Locate('arquivo = "CLIENT"')
for i:= 1 to 6
cIdx = StrZero(i,1)
::dbfCliente:AddTag('client'+cIdx, ::dbfArquivos:FieldGetByName('CHV_'+cIdx))
next
endif
::dbfCliente:OrdSetFocus('client2')//Nome
::dbfCliente:goTop()
if ::dbfArquivos:Locate('arquivo = "CONREC"')
for i:= 1 to 3
cIdx = StrZero(i,1)
::dbfConrec:AddTag('conrec'+cIdx, ::dbfArquivos:FieldGetByName('CHV_'+cIdx))
next
endif
::dbfConrec:OrdSetFocus('conrec2')//Client+dtos(datvco)
::dbfCliente:SetRelation('CODIGO', ::dbfConrec, .t.)
if ::dbfArquivos:Locate('arquivo = "CONPAG"')
for i:= 6 to 8
cIdx = StrZero(i,1)
::dbfConpag:AddTag('conpag'+cIdx, ::dbfArquivos:FieldGetByName('CHV_'+cIdx))
next
endif
::dbfConpag:OrdSetFocus(1)//Client+dtos(datvco)
::dbfCliente:SetRelation('CODIGO', ::dbfConpag, .t.)
RETURN Nil
Bem, em anexo esta o projeto com as tabelas que utilizo.
Agradeço pela atenção de todos.
Ps: O projeto compactado ficou com maior que o comportado no forum. Estou mandando o link do 4Shared: http://www.4shared.com/rar/0g76aJY8/Xai ... ation.html?
Estou tentando fazer um cadastro de clientes onde será exibido em guias(utilizando o TFolder com 2 guias e em cada uma um TDBBrowser) o contas a pagar e contas a receber deste cliente.
O meu problema esta no uso do SetRelation que, não encontrei uma forma de utilizar como no harbour, onde existe um parí¢metro lScoped, que faz aparecerem apenas os registros relacionados e sempre que muda de registro da tabela principal é feito um Seek nas tabelas relacionadas e apresentado apenas os registros relacionados ao da tabela principal.
Estou enviando também um mine projeto com o cadastro de clientes com todos os arquivos necessários.
Mas em resumo eu tenho um TCdxDataSource e 4 TDbfDataset's(dbfArquivos, dbfCliente, dbfConrec e dbfConpag).
Na tabela dbfArquivos, eu tenho os indices de todas as tabelas do meu cadastro, então no envento FormInitialize do meu formulário, eu localizo o registro ref. a cada uma das tabelas e recrio os indices com o método, AddTag da TDbfDataSet, seleciono o índice com o OrdSetFocus e relaciono as tabelas dbfConrec e dbfConpag com a tabela cliente, através do campo CODIGO, utilizando SetRelation('CODIGO', ::dbfConrec, .t.) e SetRelation('CODIGO', ::dbfConpag, .t.).
Segue abaixo o código do FormInitialize:
METHOD FormInitialize( oSender ) CLASS TForm1
local cIdx := ''
local i
::dbfArquivos:lOpen = .t.
::dbfCliente:lOpen = .t.
::dbfConrec:lOpen = .t.
::dbfConpag:lOpen = .t.
if ::dbfArquivos:Locate('arquivo = "CLIENT"')
for i:= 1 to 6
cIdx = StrZero(i,1)
::dbfCliente:AddTag('client'+cIdx, ::dbfArquivos:FieldGetByName('CHV_'+cIdx))
next
endif
::dbfCliente:OrdSetFocus('client2')//Nome
::dbfCliente:goTop()
if ::dbfArquivos:Locate('arquivo = "CONREC"')
for i:= 1 to 3
cIdx = StrZero(i,1)
::dbfConrec:AddTag('conrec'+cIdx, ::dbfArquivos:FieldGetByName('CHV_'+cIdx))
next
endif
::dbfConrec:OrdSetFocus('conrec2')//Client+dtos(datvco)
::dbfCliente:SetRelation('CODIGO', ::dbfConrec, .t.)
if ::dbfArquivos:Locate('arquivo = "CONPAG"')
for i:= 6 to 8
cIdx = StrZero(i,1)
::dbfConpag:AddTag('conpag'+cIdx, ::dbfArquivos:FieldGetByName('CHV_'+cIdx))
next
endif
::dbfConpag:OrdSetFocus(1)//Client+dtos(datvco)
::dbfCliente:SetRelation('CODIGO', ::dbfConpag, .t.)
RETURN Nil
Bem, em anexo esta o projeto com as tabelas que utilizo.
Agradeço pela atenção de todos.
Ps: O projeto compactado ficou com maior que o comportado no forum. Estou mandando o link do 4Shared: http://www.4shared.com/rar/0g76aJY8/Xai ... ation.html?