<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Access Violation - Perguntas recentes com a tag tbsqlnativecontrol</title>
<link>https://desenv.benner.com.br/accessviolation/?qa=tag/tbsqlnativecontrol</link>
<description>Powered by Question2Answer</description>
<item>
<title>&quot;Operação Inválida em um objeto fechado&quot; ao tentar acessar o valor de um campo do TBSQLNativeControl em Oracle</title>
<link>https://desenv.benner.com.br/accessviolation/?qa=903/operacao-invalida-objeto-fechado-acessar-tbsqlnativecontrol</link>
<description>&lt;p&gt;Em uma base Oracle, após dar um&amp;nbsp;LoadAllFromQuery(TBSQLNativeControl), eu não consigo mais acessar os dados, como se estivessem bloqueados, o que não ocorre em base SQLServer.&lt;/p&gt;

&lt;p&gt;A alteração que fiz funciona normalmente em SQL Server, mas em Oracle, quando chega na atribuição do campo &quot;OCCLIENTESEQITEM&quot;, logo após o LoadAllFromQuery, dá o erro &quot;Operação Inválida em um objeto fechado&quot;:&lt;/p&gt;

&lt;pre class=&quot;brush:delphi;&quot;&gt;
sql := TQueryObject.Create('CM_ITENS', 'A');

sql.AddFields('A', ['OCCLIENTESEQITEM SEQITEMINTEIRO']);

_sql.SetQueryObject(sql);

_itens.GetFieldsFromQuery(_sql.NativeDataSet);

_itens.AddFields('OCCLIENTESEQITEM:STRING;');

_itens.LoadAllFromQuery(_sql.NativeDataSet);
_itens.FindField('OCCLIENTESEQITEM').AsString := _sql.NativeDataSet.FieldByName('SEQITEMINTEIRO').AsString;&lt;/pre&gt;

&lt;p&gt;Fazemos este &quot;malabarismo&quot; com o campo &quot;OCCLIENTESEQITEM&quot;, porque precisamos dele como string para conseguir representar valores não siginificativos no container, no banco tem que ser inteiro mesmo.&lt;/p&gt;

&lt;p&gt;Além do erro mencionado, no Oracle não conseguimos acessar os campos do dataset durante depuração, após a execução do LoadAllFromQuery. Ex.:&amp;nbsp;_sql.NativeDataSet.FieldByName('SEQITEMINTEIRO').AsString dá erro no evaluator (Ctrl + F7) do Delphi.&lt;/p&gt;

&lt;p&gt;Vendo as propriedades desse native control, logo após a execução do LoadAllFromQuery, pude ver algumas diferenças entre os bancos (imagem em anexo), a principal foi que a propriedade FNestedDataSetClass muda de um tipo de base para outra, será que é isso que faz os dados ficarem inacessíveis?&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://desenv.benner.com.br/accessviolation/?qa=blob&amp;amp;qa_blobid=1730135321713260530&quot; style=&quot;height:212px; width:600px&quot;&gt;&lt;/p&gt;

&lt;p&gt;Estamos fazendo algo errado?&lt;/p&gt;

&lt;p&gt;Stack do online debugger:&amp;nbsp;&lt;a href=&quot;http://desenv.benner.com.br/accessviolation/?qa=blob&amp;amp;qa_blobid=6117336191396093861&quot; rel=&quot;nofollow&quot;&gt;http://desenv.benner.com.br/accessviolation/?qa=blob&amp;amp;qa_blobid=6117336191396093861&lt;/a&gt;, na linha 4208 ocorre o erro de&amp;nbsp;Operação inválida em um objeto fechado.&lt;/p&gt;</description>
<guid isPermaLink="true">https://desenv.benner.com.br/accessviolation/?qa=903/operacao-invalida-objeto-fechado-acessar-tbsqlnativecontrol</guid>
<pubDate>Thu, 29 Aug 2019 22:17:13 +0000</pubDate>
</item>
</channel>
</rss>