¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Como depurar triggers de tabelas no SQL Server e DLLs no PowerBuilder

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 2 Vistas
0
Cargando...

Olá senhor(a)

Estou com o erro "Row changed between retrieve and update", embora tenha pesquisado no Google, a solução não funcionou. (há uma solução nas propriedades de atualização, na cláusula where para update/delete, escolha as colunas chave, tentei, não funcionou) então meu colega simplesmente alterou o trigger da tabela que estava sendo atualizada pelo datawindow, o erro desapareceu. Este caso é estranho, pois estou usando diretamente a sintaxe SQL gerada pelo Datawindow (capturei esse erro no evento dberror do datawindow) e a sintaxe é update mytable set col='algum valor' where condição, no entanto, a sintaxe funciona bem, a tabela foi atualizada. Então me pergunto se é possível depurar o trigger da tabela do SQL Server no PowerBuilder?

Além disso, escrevi algumas DLLs para o PowerBuilder chamar, que estão escritas em Visual C++. Estou preocupado que o PowerBuilder execute a função nas DLLs e tenha problemas como no caso anterior. Então me pergunto se é possível depurar a DLL quando o PowerBuilder pode iniciar as DLLs?

Saudações

Ken

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Olá Ken;

É muito provável que a causa dos seus problemas tenha começado com a forma como o DataWindow configurou seus critérios de atualização. O DW Painter por padrão utiliza a opção "Chave e Colunas Atualizáveis" em vez do que sempre sobrescrevo, que é " Chave e Colunas Modificadas ".

A atualização padrão do DW construirá uma declaração DML com uma cláusula Where como C1='Valor1", C2='Valor2", C3='Valor3", ... C99='Valor99" por exemplo. O problema começa a surgir do fato de que o usuário pode ter modificado apenas uma, duas ou três colunas, mas a cláusula Where verifica na base de dados todos os valores antigos possíveis das colunas. Nota: Isso também é uma limitação de desempenho ao verificar todos os valores de dados anteriores também.

Agora, no caso em que você tenha um Trigger de Atualização de BD, o Trigger pode estar modificando, por exemplo, uma coluna "Data_Última_Atualização". Se o Objeto DW também tiver essa coluna em sua lista de atualização e a opção "Chave e Colunas Atualizáveis" estiver em moda, a cláusula Where verifica o valor da coluna "Data_Última_Atualização" como 2015-01-01 13:45:10, mas o Trigger já alterou o valor para 2015-11-30 09:18:46. A verificação WHERE falha e o DW relata o erro "Linha alterada entre recuperação e atualização". Mesmo que o desenvolvedor tenha removido a coluna "Data_Última_Atualização" do detalhe.

Outro cenário poderia ser onde você permite que o valor da coluna da chave primária (ou uma coluna indexada única) seja alterado. O DBMS pode lidar com isso através de uma declaração de atualização DML ou o processamento pode acionar uma sequência de ações DML de EXCLUIR e depois INSERIR. Este último cenário acionando inadvertidamente uma AÇÃO DE TRIGGER DE INSERÇÃO mesmo que uma atualização de DW () esteja em andamento. Neste caso, os valores anteriores a serem verificados na cláusula WHERE são NULL. Novamente, o DW relata o erro "Linha alterada entre recuperação e atualização".

A moral da história, é claro, da sua história é que o desenvolvedor do PB e o DBA devem analisar cuidadosamente as ações em torno do processamento da transação de atualização para determinar as ações de processamento gerais que são realizadas em qualquer momento dado. Os registros do DBMS podem ser cruciais aqui no futuro. Especialmente ao realizar um rastreamento SQL do PB e do DBMS para identificar a causa real do erro "Linha alterada entre recuperação e atualização".

Espero que isso ajude

Cumprimentos .. Chris

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Mesmo tendo chegado tarde, preciso dizer obrigado. Devido a estar muito ocupado até agora, eu aprecio muito.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?