2 Replies Latest reply: Dec 6, 2011 3:34 AM by Xavier Van hoorebeke RSS

    qvdcreatetime returns false info if file is in use by other load

      I am using the qvdcreatetime function to check whether a certain QVD file exists and depending on the result, perform a load or skip (next loop).

      My QV app loads data (QVD files) from different copanies and within each company several years are loaded by using for next statements for both companies and years. As not all years exist for each company, you can easily check whether a load for a certain company/year should be performed Y/N using the function above.

      However, I have 2 QV apps that are both using the same QVD files (not all but certain) and these reload processes are running simultaneously. This should not cause any problem as the reload of the data itself (QVD) has been performed before.

      But guess what : when my first app is loading the data in memory, the qvdcreatetime function apparently returns a <null> value during this load.

      Is there any way to avoid this or should I use another command to check this ?

      Underneath, you can find the proof (coming from the .qvw.log files)

       

      1) First app reading

       

      18/10/2011 5:51:47: 0265        LET vQVD_exists = qvdcreatetime('..\QVD\Accounting\BalanceSheet_03_2011.qvd')

      18/10/2011 5:51:47: 0267        If len('2011-10-18 04:31:54') <> 0 then

      18/10/2011 5:51:47: 0270          tt_BalanceSheet:

      18/10/2011 5:51:47: 0271              LOAD

      18/10/2011 5:51:47: 0272                  key_BS_account_number                        as key_BS_account,

      18/10/2011 5:51:47: 0273                  key_BS_inter_company                        as key_BS_inter,

      18/10/2011 5:51:47: 0274                  BS_account_number_type,

      18/10/2011 5:51:47: 0275                  key_BS_period_AY                            as key_period_AY,

      18/10/2011 5:51:47: 0276                  key_BS_currency_cnv,       

      18/10/2011 5:51:47: 0277                  sum(BS_amount_system_currency)                as BS_amount_system_currency,

      18/10/2011 5:51:47: 0278                  sum(BS_amount_ytd_system_currency)            as BS_amount_ytd_system_currency    

      18/10/2011 5:51:47: 0279              FROM ..\QVD\Accounting\BalanceSheet_03_2011.qvd (qvd)

      18/10/2011 5:51:47: 0280              GROUP BY

      18/10/2011 5:51:47: 0281                  key_BS_account_number,

      18/10/2011 5:51:47: 0282                  key_BS_inter_company,

      18/10/2011 5:51:47: 0283                  BS_account_number_type,

      18/10/2011 5:51:47: 0284                  key_BS_period_AY,

      18/10/2011 5:51:47: 0285                  key_BS_currency_cnv       

      18/10/2011 5:51:47: 0286             

      18/10/2011 5:53:29:                   7 fields found: key_BS_account, key_BS_inter, BS_account_number_type, key_period_AY, key_BS_currency_cnv, BS_amount_system_currency, BS_amount_ytd_system_currency, 46.532 lines fetched

       

      2) 2nd app reading the same file

       

      18/10/2011 5:52:20: 0356      LET vQVD_exists = qvdcreatetime('..\QVD\Accounting\BalanceSheet_03_2011.qvd')

      18/10/2011 5:52:20: 0358      If len('') <> 0 then

       

       

      Look at the timestamps. The first app checks the QVD at 5:51:47 and loads the data (using a group by) untill 5:53:29

      The 2nd app checks the QVD at 5:52:20 and returns <null>. As an intermediate solution, I have scheduled both reloads separately at this moment. However, the main reason for building QVD files is that you create these files once and use them in many apps so each app is based on exactly the same data set. In my case I am missing a full year of data.