AccountView tabellen worden niet volledig ingeladen met Invantive Query Tool

Vorige week is er voor ons tijdens een call een connectie opgezet zodat AccountView via de Invantive Query Tool benaderd kan worden en zodoende ook ingeladen kan worden in Power BI.

Echter lijkt het er op dat bepaalde belangrijke tabellen, zoals TRANSACT, niet alle kolommen binnenhalen:

Ik zie wel een groot aantal rijen, maar niet de bijbehorende kolommen.
Dit is overigens voor elke Partition Code zo, dus niet alleen de EQUIP.

Het lukt niet om dit probleem te reproduceren onder Query Tool 24.0.638 door eerst aan te melden op AccountView:

En vervolgens de getoonde query uit te voeren op de Your Garden demo-database van AccountView:

Wat wel opvalt, is dat eigenlijk alle kolommen lijken te ontbreken. Enkel de twee kolommen die automatisch toegevoegd worden voor de partitie zijn aanwezig.

Advies is om zorgvuldig te controleren dat de volgende mappen bestaan onder de opgegeven System Tables Directory cq. dat AccountView zelf de mappenstructuur kan openen:

  • Datadict
  • Sys_vfp
  • System
  • de mappen met de administraties

Betrek eventueel een AccountView-applicatiebeheerder om de werking te controleren.

Bij het opvragen van de tabelkolommen in Query Tool krijg ik ook de volgende foutmelding:

itgenfpr024: The database directory '\\ACME-DC\ACCOUNTVIEW\FRE16\' must exist.

Message ID: 02ce1631-b444-44d5-b173-2d40ed9311db

Occurred (UTC): 31-3-2025 10:29:43

select * from AccountView..TRANSACT limit 50

ValidationException
   at Invantive.Basics.ValidationException..ctor(GlobalState owner, ExecutionOptions executionOptions, String messageCode, String errorMessage, String kindRequest, String localStackTrace, String nk, Exception innerException, Boolean inheritMessageCodeWhenPresent, Nullable`1 uid, Nullable`1 isRecoverable, String poolIdentityId, String url, Nullable`1 partyUid, String partitionCode, String tableName, String parameter1, String parameter2, String parameter3, String parameter4, String parameter5, String clientId)
   at Invantive.Data.Providers.Foxpro.FoxproProvider.set_DatabaseDirectoryList(String[] )
   at Invantive.Data.ProviderAttribute`1.SetValue(GlobalState owner, ExecutionOptions executionOptions, SqlExecutionStep sqlExecutionStep, Object value)
   at Invantive.Data.ProviderAttribute`1.SetValue(GlobalState owner, ExecutionOptions executionOptions, SqlExecutionStep sqlExecutionStep, IProviderManager manager, Object attributeValue, ProviderAttributeNewValueOrigin origin)
   at Invantive.Data.ProviderAttributes.SetOneSetting(GlobalState owner, ExecutionOptions executionOptions, SqlExecutionStep sqlExecutionStep, IBasicProviderManager manager, String attributeCode, Object attributeValue, ProviderAttributeNewValueOrigin origin, Boolean failOnNotFound)
   at Invantive.Data.ProviderAttributes.MergeSettings(GlobalState owner, ExecutionOptions executionOptions, SqlExecutionStep sqlExecutionStep, IBasicProviderManager manager, ConnectionStringAttributes attributeValues, ProviderAttributeNewValueOrigin origin, Boolean failOnNotFound)
   at Invantive.Data.GenericProvider.OnBeforeInitialize(GlobalState owner, ExecutionOptions executionOptions, SqlExecutionStep sqlExecutionStep, ConnectionStringAttributes attributeValues)
   at Invantive.Data.GenericProvider.Initialize(GlobalState owner, ExecutionOptions executionOptions, SqlExecutionStep sqlExecutionStep, IProviderManager manager, ConnectionStringAttributes attributeValues)
   at Invantive.Data.Providers.AccountView.AccountViewProvider.a(GlobalState , ExecutionOptions executionOptions, String , SqlExecutionStep sqlExecutionStep)
   at Invantive.Data.Providers.AccountView.AccountViewProvider.c.A(String )
   at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
   at Invantive.Data.Providers.AccountView.AccountViewProvider.A(GlobalState , ExecutionOptions executionOptions, String , SqlExecutionStep sqlExecutionStep)
   at Invantive.Data.Providers.AccountView.AccountViewProvider.b.A(String )
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   at Invantive.Data.Providers.AccountView.AccountViewProvider.FetchYieldUnfilteredInternal(GlobalState owner, ExecutionOptions executionOptions, SqlExecutionStep sqlExecutionStep, EntityFieldCollection entityFields, QueryObject queryObject, ParameterList parameters, Boolean fetchSingle, Boolean fetchCountFirst, Int32 pagingSteps, Boolean fetchCount)
   at Invantive.Data.GenericProvider.FetchYieldUnfiltered(GlobalState owner, ExecutionOptions executionOptions, SqlExecutionStep sqlExecutionStep, EntityFieldCollection entityFields, QueryObject queryObject, ParameterList parameters, Boolean fetchSingle, Boolean fetchCountFirst, Int32 pagingSteps, Boolean fetchCount)
   at Invantive.Sql.V1.DataSourceOrFunctionWithRotatorTree.<GetDataEnumerator>d__51.MoveNext()
   at Invantive.Data.CompressedEnumerable`1.<GetEnumerator>d__10.MoveNext()
   at Invantive.Sql.V1.FirehoseResultSet.c.MoveNext()
   at Invantive.Sql.V1.FirehoseResultSet.C.MoveNext()
   at Invantive.Data.CompressedEnumerable`1.<GetEnumerator>d__10.MoveNext()
   at Invantive.Sql.V1.FirehoseResultSet.c.MoveNext()
   at Invantive.Sql.V1.FirehoseResultSet.C.MoveNext()
   at Invantive.Sql.V1.ChainedFirehose.A.MoveNext()
   at Invantive.Sql.V1.FirehoseResultSet.C.MoveNext()
   at Invantive.Sql.V1.SelectListIterator.C.MoveNext()
   at Invantive.Sql.V1.FirehoseResultSet.C.MoveNext()
   at Invantive.Data.CompressedEnumerable`1.<GetEnumerator>d__10.MoveNext()
   at Invantive.Sql.V1.FirehoseResultSet.c.MoveNext()
   at Invantive.Data.ExtensionMethods.R`1.MoveNext()
   at Invantive.Sql.V1.TopIterator.A.MoveNext()
   at Invantive.Sql.V1.FirehoseResultSet.C.MoveNext()
   at Invantive.Data.CompressedEnumerable`1.<GetEnumerator>d__10.MoveNext()
   at Invantive.Sql.V1.FirehoseResultSet.c.MoveNext()
   at Invantive.Sql.V1.MaterializeSparseArrayIterator.<Iterator>d__1.MoveNext()
   at Invantive.Sql.V1.QueryPlan.B.MoveNext()
   at Invantive.Data.ExtensionMethods.IteratorWithFinally`1.IteratorWithFinallyEnumerator.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at Invantive.Data.ConnectionManager.ExecuteAndCombineQueryPlansV1(GlobalState owner, ExecutionOptions executionOptions, SqlExecutionStep sqlExecutionStep, QueryPlan[] queryPlans, String sqlStatement, ParameterList parameters)
   at Invantive.Data.ConnectionManager.ExecuteProviderPassthroughSqlActionTable(GlobalState owner, ExecutionOptions executionOptions, String actionSql, ParameterList parameters, SqlExecutionStep sqlExecutionStep, String callSafeNameOverrule)
   at Invantive.Data.ConnectionManager.c(GlobalState owner, ExecutionOptions , SqlExecutionStep , String actionSql, ParameterList , String )
   at Invantive.Producer.Windows.Forms.DescribeTabData.FetchData(GlobalState owner, ExecutionOptions executionOptions)
   at System.Threading.Tasks.Task.Execute()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot)
   at System.Threading.Tasks.Task.ExecuteEntry(Boolean bPreventDoubleExecution)
   at System.Threading.ThreadPoolWorkQueue.Dispatch()
   at Invantive.Data.Providers.Foxpro.FoxproProvider.set_DatabaseDirectoryList(String[] )
   at Invantive.Data.ProviderAttribute`1.SetValue(GlobalState owner, ExecutionOptions executionOptions, SqlExecutionStep sqlExecutionStep, Object value)
   at Invantive.Data.ProviderAttribute`1.SetValue(GlobalState owner, ExecutionOptions executionOptions, SqlExecutionStep sqlExecutionStep, IProviderManager manager, Object attributeValue, ProviderAttributeNewValueOrigin origin)
   at Invantive.Data.ProviderAttributes.SetOneSetting(GlobalState owner, ExecutionOptions executionOptions, SqlExecutionStep sqlExecutionStep, IBasicProviderManager manager, String attributeCode, Object attributeValue, ProviderAttributeNewValueOrigin origin, Boolean failOnNotFound)
   at Invantive.Data.ProviderAttributes.MergeSettings(GlobalState owner, ExecutionOptions executionOptions, SqlExecutionStep sqlExecutionStep, IBasicProviderManager manager, ConnectionStringAttributes attributeValues, ProviderAttributeNewValueOrigin origin, Boolean failOnNotFound)
   at Invantive.Data.GenericProvider.OnBeforeInitialize(GlobalState owner, ExecutionOptions executionOptions, SqlExecutionStep sqlExecutionStep, ConnectionStringAttributes attributeValues)
   at Invantive.Data.GenericProvider.Initialize(GlobalState owner, ExecutionOptions executionOptions, SqlExecutionStep sqlExecutionStep, IProviderManager manager, ConnectionStringAttributes attributeValues)
   at Invantive.Data.Providers.AccountView.AccountViewProvider.a(GlobalState , ExecutionOptions executionOptions, String , SqlExecutionStep sqlExecutionStep)
   at Invantive.Data.Providers.AccountView.AccountViewProvider.c.A(String )
   at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
   at Invantive.Data.Providers.AccountView.AccountViewProvider.A(GlobalState , ExecutionOptions executionOptions, String , SqlExecutionStep sqlExecutionStep)
   at Invantive.Data.Providers.AccountView.AccountViewProvider.b.A(String )
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   at Invantive.Data.Providers.AccountView.AccountViewProvider.FetchYieldUnfilteredInternal(GlobalState owner, ExecutionOptions executionOptions, SqlExecutionStep sqlExecutionStep, EntityFieldCollection entityFields, QueryObject queryObject, ParameterList parameters, Boolean fetchSingle, Boolean fetchCountFirst, Int32 pagingSteps, Boolean fetchCount)
   at Invantive.Data.GenericProvider.FetchYieldUnfiltered(GlobalState owner, ExecutionOptions executionOptions, SqlExecutionStep sqlExecutionStep, EntityFieldCollection entityFields, QueryObject queryObject, ParameterList parameters, Boolean fetchSingle, Boolean fetchCountFirst, Int32 pagingSteps, Boolean fetchCount)
   at Invantive.Sql.V1.DataSourceOrFunctionWithRotatorTree.<GetDataEnumerator>d__51.MoveNext()
   at Invantive.Data.CompressedEnumerable`1.<GetEnumerator>d__10.MoveNext()
   at Invantive.Sql.V1.FirehoseResultSet.c.MoveNext()
   at Invantive.Sql.V1.FirehoseResultSet.C.MoveNext()
   at Invantive.Data.CompressedEnumerable`1.<GetEnumerator>d__10.MoveNext()
   at Invantive.Sql.V1.FirehoseResultSet.c.MoveNext()
   at Invantive.Sql.V1.FirehoseResultSet.C.MoveNext()
   at Invantive.Sql.V1.ChainedFirehose.A.MoveNext()
   at Invantive.Sql.V1.FirehoseResultSet.C.MoveNext()
   at Invantive.Sql.V1.SelectListIterator.C.MoveNext()
   at Invantive.Sql.V1.FirehoseResultSet.C.MoveNext()
   at Invantive.Data.CompressedEnumerable`1.<GetEnumerator>d__10.MoveNext()
   at Invantive.Sql.V1.FirehoseResultSet.c.MoveNext()
   at Invantive.Data.ExtensionMethods.R`1.MoveNext()
   at Invantive.Sql.V1.TopIterator.A.MoveNext()
   at Invantive.Sql.V1.FirehoseResultSet.C.MoveNext()
   at Invantive.Data.CompressedEnumerable`1.<GetEnumerator>d__10.MoveNext()
   at Invantive.Sql.V1.FirehoseResultSet.c.MoveNext()
   at Invantive.Sql.V1.MaterializeSparseArrayIterator.<Iterator>d__1.MoveNext()
   at Invantive.Sql.V1.QueryPlan.B.MoveNext()
   at Invantive.Data.ExtensionMethods.IteratorWithFinally`1.IteratorWithFinallyEnumerator.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at Invantive.Data.ConnectionManager.ExecuteAndCombineQueryPlansV1(GlobalState owner, ExecutionOptions executionOptions, SqlExecutionStep sqlExecutionStep, QueryPlan[] queryPlans, String sqlStatement, ParameterList parameters)
   at Invantive.Data.ConnectionManager.ExecuteProviderPassthroughSqlActionTable(GlobalState owner, ExecutionOptions executionOptions, String actionSql, ParameterList parameters, SqlExecutionStep sqlExecutionStep, String callSafeNameOverrule)
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Invantive.Data.ConnectionManager.ExecuteProviderPassthroughSqlActionTable(GlobalState owner, ExecutionOptions executionOptions, String actionSql, ParameterList parameters, SqlExecutionStep sqlExecutionStep, String callSafeNameOverrule)
   at Invantive.Data.ConnectionManager.c(GlobalState owner, ExecutionOptions , SqlExecutionStep , String actionSql, ParameterList , String )
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Invantive.Data.ConnectionManager.c(GlobalState owner, ExecutionOptions , SqlExecutionStep , String actionSql, ParameterList , String )
   at Invantive.Producer.Windows.Forms.DescribeTabData.FetchData(GlobalState owner, ExecutionOptions executionOptions)

Advies is om de itgenfpr024-foutmelding te voorkomen door het vinkje weg te halen bij “Include Inaccessible Databases” bij het aanmelden (driverattribuut include-inaccessible-databases=false in de connection string).

Mogelijk samenhangend: de volgende query geeft een foutmelding:

select * 
from   dct_fld

namelijk:

itgenrst009:
The column ‘FLD_EXPN’ in ‘’ can contain a text of at most 4 characters. The value ’

Maar de volgende werkt wel door de velden die een foutmelding geven uit te sluiten:

select * except FLD_EXPN, fld_extra, when_expn, grde_class, grde_clib, grdl_clib, grdl_class
from   dct_fld
where dbf_name='TRANSACT'

Analyse

Een analyse over de metadata van deze AccountView-omgeving geeft vreemde uitkomsten met de volgende query:

select jaar
,      fld_Active
,      count(*)
from   ( select fld_active
         ,      to_char(INP_DATE, 'YYYY') jaar
         from   dct_fld
       )
group 
by     jaar
,      fld_active
order
by     jaar
,      fld_active

De uitvoer op een demo-installatie van Your Garden geeft aan dat de waarde van FLD_ACTIVE meestal true is:

Echter, op de onderzochte omgeving is de balans anders. De meeste velden zijn volgens de metadata inactief:

Dit is niet precies andersom. Een analyse op detailniveau geeft aan dat alle combinaties van foute instellingen lijken te kunnen voorkomen.

Het oogt alsof de omgeving enigszins corrupt is qua metadata. Dit heeft blijkbaar geen invloed op de werking van AccountView zelf. De AccountView-applicatiebeheerder zal mogelijk iets over kunnen zeggen over een eventuele corruptie van de metadata of historische problemen.

Oplossing

Deze vorm van metadata-corruptie waarbij het inactief vlag vaak verkeerd staat wordt voortaan gesignaleerd via de foutmelding:

itgenacw063
The table ‘…’ has no fields selected from … available fields.
Please consider configuring include-inactive-fields to true after consulting the AccountView application administrator to compensate for data errors.

Om gebruik met deze corruptie in de metadata beter mogelijk te maken is de AccountView-driver uitgebreid met de insteloptie include-inactive-fields. Deze insteloptie is standaard false om het historisch en gewenst gedrag te behouden. Indien echter de volgende foutmelding optreedt, dan kan eventueel in het aanmeldscherm deze optie aangevinkt worden:

Resultaat hiervan is met de eerste query:

Het enige tot dusver geïdentificeerde risico aan het tonen van alle inactieve velden is dat gebruikers de indruk kunnen krijgen dat velden onterecht leeg zijn.

Beschikbaarheid

De aanpassing is beschikbaar vanaf release 24.0.647 en 24.1.88-BETA.

Deze vraag is automatisch gesloten na 1 week inactiviteit. Het laatste gegeven antwoord is gemarkeerd als oplossing.

Gelieve een nieuwe vraag te stellen via een apart topic als het probleem opnieuw optreedt. Gelieve in de nieuwe vraag een link naar dit topic op te nemen door de URL er van in de tekst te plakken.

Dit topic is 3 dagen na het laatste antwoord automatisch gesloten. Nieuwe antwoorden zijn niet meer toegestaan.