Galera da lista, seguinte.
Em Anexo consta um Select que está em uma SQLQuery, por ser muito grande, 
mandei em anexo.

Mas vamos lá, os campos que ele retorna são os sequintes, e seus respectivos 
valores de providers flags que estão como TRUE, tanto da query quanto do 
Clientdataset.

Estes campos são a minha chave da tabela
NRO_MC: pfInUpdate, pfInWhere, pfInKey.

COD_ITEM: pfInUpdate, pfInWhere, pfInKey.
COD_APROVADOR: pfInUpdate, pfInWhere, pfInKey.
SEQUENCIA: pfInUpdate, pfInWhere, pfInKey.

Estes NÃO devem ser atualizados
CODIGO: Tudo False nos flags
SIGLA_FORN: Tudo False nos flags
DSC_REDUZIDA: Tudo False nos flags
TOTAL_ITEM: Tudo False nos flags
APROVADO: Tudo False nos flags
REPROVADO: Tudo False nos flags

Estes campos serão atualizados
DT_APROVACAO:pfInUpdate
STATUS:pfInUpdate
OBS_APROVACAO:pfInUpdate

O DataSetProvider tem na propriedade UpdateMode: upWhereKeyOnly

Os campos chave, e os campos que devem ser atualizados são de uma Tabela 
chamada APROVACAO_TABELA_PRECO, que vocês podem ver no Select

Vamos para o Problema agora.  Eu Edito, dou Post, tudo certo.
No Momento do Apply Updates, o Reconcile Error me retorna: 

ORA-00904: field SEQUENCIA Invalid Identifier.

Bem, coloquei o SQLMonitor e veja o resultado no momento do apply updates:

update "ITEM_TABELA_PRECO"  set
"STATUS" = :1
where
"NRO_MC" = :2 and
"COD_ITEM" = :3 and
"COD_APROVADOR" = :4 and
"SEQUENCIA" = :5

Ou seja, ele achou que a tabela que deveria ser atualizada seria a 
ITEM_TABELA_PRECO(por isso o erro, porque não existe o campo SEQUENCIA na 
ITEM_TABELA_PRECO), e a única referencia a esta tabela é um SubSelect na 
Clausula FROM.

Andei conversando com o Amigo Francisco Thiago, que frequenta a lista e ele 
também não tinha uma explicação lógica para isto, mas sugeriu colocar no 
OnGetTableNames do DataSetProvider o nome da tabela que deve ser atualizada. 
Muito bem, funcionou. Mas trabalho diariamente com este tipo de select, 
contendo subselect, e a configuração dos Flags basta para que o update seja 
executado corretamente.

Me ajudem aí galera...

Umm abraço,
Danilo Rogério
Betta Informática



                
---------------------------------
Yahoo! Acesso Grátis: Internet rápida e grátis. Instale o discador agora!
  ----------

SELECT A.NRO_MC,
       A.COD_ITEM,
       A.COD_APROVADOR,
       A.SEQUENCIA,
       A.FORN_CODIGO || '-' || A.FORN_COMPLE AS CODIGO,
       A.SIGLA_FORN,
       I.DSC_REDUZIDA,
       DECODE(B.NRO_TABELA_PRECO,
              NULL,(SELECT (NVL(IC.VLR_UNITARIO,0) - NVL(IC.VLR_DESCONTO,0)) + 
NVL(IC.VLR_IPI,0) + NVL(IC.VLR_OUTDESPESA,0)
                      FROM ITEM_COLETA_PRECO IC
                     WHERE IC.NRO_MC           = A.NRO_MC
                       AND IC.FORN_CODIGO      = A.FORN_CODIGO
                       AND IC.FORN_COMPLE      = A.FORN_COMPLE
                       AND IC.SIGLA_FORN       = A.SIGLA_FORN
                       AND IC.COD_ITEM         = A.COD_ITEM),                   
     
                   (SELECT (NVL(IT.VLR_UNITARIO,0) - NVL(IT.VLR_DESCONTO,0)) + 
(NVL(IT.VLR_UNITARIO,0) - NVL(IT.VLR_DESCONTO,0) * 
(NVL(IT.PERC_IMPOSTO,0)/100)) + NVL(IT.VLR_OUTDESPESA,0)
                      FROM ITEM_TABELA_PRECO IT
                     WHERE IT.NRO_TABELA_PRECO = B.NRO_TABELA_PRECO
                       AND IT.COD_ITEM         = A.COD_ITEM)) AS TOTAL_ITEM,
       A.DT_APROVACAO,
       A.STATUS,
       A.OBS_APROVACAO,
       ' ' AS APROVADO,
       ' ' AS REPROVADO
  FROM APROVACAO_TABELA_PRECO A,
       (SELECT T.NRO_TABELA_PRECO,
               T.NRO_MC,
               T.FORN_CODIGO,
               T.FORN_COMPLE,
               T.SIGLA_FORN
          FROM TABELA_PRECO T
         WHERE T.NRO_TABELA_PRECO = (SELECT MAX(NRO_TABELA_PRECO)
                                       FROM TABELA_PRECO 
                                      WHERE NRO_MC      = T.NRO_MC
                                        AND FORN_CODIGO = T.FORN_CODIGO
                                        AND FORN_COMPLE = T.FORN_COMPLE
                                        AND SIGLA_FORN  = T.SIGLA_FORN
                                        AND BLOQUEADA   = 'S'
                                    )
       ) B,
       ITEM I       
 WHERE A.NRO_MC        = B.NRO_MC(+)
   AND A.FORN_CODIGO   = B.FORN_CODIGO(+)
   AND A.FORN_COMPLE   = B.FORN_COMPLE(+)
   AND A.SIGLA_FORN    = B.SIGLA_FORN(+)
   AND A.COD_ITEM      = I.COD_ITEM
   AND A.STATUS        = 'P'
   AND A.SEQUENCIA     = (SELECT MAX(SEQUENCIA)
                            FROM APROVACAO_TABELA_PRECO
                           WHERE NRO_MC        = A.NRO_MC
                             AND COD_ITEM      = A.COD_ITEM
                             AND COD_APROVADOR = A.COD_APROVADOR)
   AND A.COD_APROVADOR =:USUARIO
ORDER BY A.COD_ITEM

[As partes desta mensagem que não continham texto foram removidas]



-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
 http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
 [EMAIL PROTECTED] ou [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Responder a