software‎ > ‎módulos‎ > ‎engine‎ > ‎perguntas frequentes‎ > ‎

A partir de uma chave qualquer, como descobrir a tabela que a contém?

Às vezes nos deparamos com a necessidade em descobrir a natureza (tabela) de uma chave dentro do sistema. Bem, geralmente o local em que a chave foi lida já dá a dica através do próprio contexto onde a chave está escrita, mas como realmente saber?

Se for uma chave pertencente a uma tabela do cache, o uso do método dbCache.findKey(ch) dirá diretamente qual a tabela procurada. Assim, basta executar esta linha de código em uma guia iDBC SQL e ver qual a tabela procurada:


   
dbCache.findKey(chavePesquisada).tableName;


* Note que a palavra "chavePesquisada" deve ser trocada pela chave em questão. Isso também é válido para as queries mais abaixo. :)

Mas e se esse método não retornar resultado? Afinal, pode ser que esta não seja uma chave de uma tabela do cache.

Bem, sabemos que a tabela iLog registra todas as alterações, criações e remoções de registros nas tabelas do Sistema. Sabemos também que cada registro da iLog informa a chave do registro alterado e a tabela deste registro. Dessa forma, uma busca na tabela iLog filtrando pela chave poderá, muito provavelmente, denunciar a tabela pesquisada. Segue um exemplo de query:


    
Select iDate, iHour, iUser, iType, iTableName from iLog where iKey = chavePesquisada


Caso a tabela iLog não tenha mais registros sobre a chave analisada, pois os logs são passivos de remoção, sugiro um trabalho de pesquisa manual em todas as tabelas que não são tabelas de cache. Para saber quais as tabelas do sistema que não são tabelas de cache, observe a tabela iDatabaseSchema e sua coluna chamada iCachedData. Todos os registros da iDatabaseSchema onde o campo iCachedData for diferente de 'T', são tabelas que não estão com seus dados em cache. Assim, para cada uma destas tabelas, podemos fazer a query abaixo e tentar localizar a tão procurada chave:


    
Select CHAVE From NomeDaTabela Where CHAVE = chavePesquisada

Comments