ruben Dario wrote:Giovany.
Saludos
Gracias por tu informacion, ya estoy entendiento la clase TAds, (Se abren la tablas y se navegan e insertan y modimican registro Excelente)
Te hago esta preguntas
Cuando usas este codigo
::oDs_CepSql := tAds():DsNew(1,1) // 1-Definir query com retorno de Cursors (Handle) / Usar conexão de numero 1
::oDs_CepSql:cQrySql := "Select {static} DISTINCT CIDADE, ESTADO from TB_CEP Order By CIDADE "
En el Select cual es la funcionalidad de USAR Select {static} DISTINCT .... Exactamento {static} , que pasa si se le Quita el {static}
MAnejar la clase Es Excelente.
Otra Duda, cuando se Maneja ADO (OBDC) Cuando se ingresan registros, los indices se actulizan, me parece que vi un documento que no.
Gracias
(A) - A regra para abrir as tabelas em ads tem varios termos: (Vamos fazer exemplos de abertura da tabela envolvendo apenas uma tabela)
1- Se voce abrir a tabela com RDD ex:
tAds:NewRdd("CLIENTES") > Toda a tabela e indices serão abertos igual a DBUSEAREA() de forma dinamica
2- Se voce abrir apenas uma tabela envolvida com sql ex:
- Code: Select all Expand view
::oDs_CepSql := tAds():DsNew(1,1)
::oDs_CepSql:cQrySql := "Select * from TB_CEP "
Este tipo de abertura retornara uma tabela dinamica, com indices tambem. neste tipo de tabela voce pode trocar a ordem das colunas como se fosse aberto por DBUSEAREA(), efetuar REPLACE,
APPEND, DELETE ETC.
3- Abrindo uma tabela envolvida somente com sql estatico
- Code: Select all Expand view
::oDs_CepSql := tAds():DsNew(1,1)
::oDs_CepSql:cQrySql := "Select {STATIC} * from TB_CEP "
Desta maneira o servidor cria uma tabela intermediaria (temp) de forma estatica. Esta tabela voce não pode efetuar REPLACE, APPEND, DELETE. Apenas consulta, mais com tAds voce podera criar
indices temporarios no resultado usando SetOrder() e depois efetuar
SEEK ou trocar de ordem com o mesmo resultado sem precisar disparar DsExecute novamente.
4- Abrindo uma tabela envolvida COM sql dinamico usando ORDER BY
- Code: Select all Expand view
::oDs_CepSql := tAds():DsNew(1,1)
::oDs_CepSql:cQrySql := "Select * from TB_CEP Order By CIDADE"
Neste Caso, a tabela será dinamica igual DBUSEAREA, mais somente o indice [b]CIDADE estara a disposição, se voce for trocar de ordem o erro aparece.
(B) - Agora abrindo tabelas envolvendo varias com os flags INNER JOIN, LEFT, RIGHT, WHILE ETC.
Quando se faz uma query e na consulta tem mais de uma tabela envolvida, voce não precisa informar o parametro
{STATIC}, isto porque se envolver qualquer outra tabela o sistema de advantage vai declarar a tabela como sendo estatica porque não tem como abrir dinamicamente varias consultas associadas a query ex:
1- Abrindo um resultado para tabela envolvendo 3 tabelas com inner join
- Code: Select all Expand view
::oDs_RecibosEventos := tAds():DsNew(1)
::oDs_RecibosEventos:cQrySql := "Select "+;
"Tb01.*, "+;
"Tb02.CODIGO AS EVENTOS_CODIGO, "+;
"Tb02.DESCRICAO AS EVENTOS_DESCRICAO, "+;
"Tb02.L_NaoFiscal AS EVENTOS_L_NaoFiscal, "+;
"Tb03.SEQUENCIA AS CAIXA_SETO_SEQUENCIA, "+;
"Tb03.SETOR AS CAIXA_SETO_SETOR "+;
"From RECIB_AV AS Tb01 "+;
"Full Join EVENTOS AS Tb02 ON Tb02.CODIGO = Tb01.N_EVENTO "+;
"Full Join CAIXA_SETO AS Tb03 ON Tb03.SEQUENCIA = Tb01.N_SETOR_CX "+;
"Where Tb01.DATA >= _DataInicio_ and Tb01.Data <= _DataFinal_ "+;
"and Tb02.L_NaoFiscal = False "+;
"Order By Tb01.DATA, Tb01.N_SETOR_CX ;"
::oDs_RecibosEventos:DsAddVar("_DataInicio_",Date())
::oDs_RecibosEventos:DsAddVar("_DataFinal_",Date())
::oDs_RecibosEventos:lBufferOnSkip := .T.
::oDs_RecibosEventos:DsExecute(120) // o valor de 120 define o controle de buffer / page de carregamento da tabela estatica (120 registros)
Lembrando que neste resulta ainda é possivel efetuar um FILTER, ou incluir uma ordem diferente e trocar a
Order By Tb01.DATA, Tb01.N_SETOR_CX sem precisar de refazer a query.
Bom, acho que deu para entender um pouco. Ads tem varias formas que não somos acustumados, por isto acho que muitos abandonaram ele por falta de entendimento.
Qualquer duvida estou a disposição. pode perguntar
Um abração ai