Trouble managing OVRDBF inside a program

Discussions relating to writing software in ILE RPG (RPG IV). This includes both fixed and free format RPG.
Post Reply
LUCAG
Posts: 10
Joined: Tue Mar 28, 2023 9:00 am

Trouble managing OVRDBF inside a program

Post by LUCAG »

IIn my IBM i, we manage multiple companies. Each company has its own data library, and the company data libraries all have more or less the same files.
I receive a file from outside and need to manage it by writing some data to some companies, but not all of them.
So, in my program I have a situation like this (in semipseudocode):

Code: Select all

dcl-ds MyDS qualified Inz dim(20);
  companyLib char(10);
  foo char(2);
  bar char(12);
  rtw likeds(rowsToWrite) dim(25);
End-DS;

---
doU MyDS(x).companyLib = *blanks;
  If %trim(MyDS(x).companyLib) <> defaultCompany;
    rc=DoCmd('OVRDBF FILE(MyFILE00F) TOFILE(' + %trim(MyDS(x).companyLib) + '/MyFILE00F)');  
    if rc <> 0;
      logError(yabadaba);
      iter;
    else;
      rc=insertCompanyData(MyDS(x).rtw);
      if rc=0;
        exec sql commit;
      else;
        logError(anotheryabadaba);	
      endif
      rc=DoCmd('DLTOVR FILE(MyFILE00F)');
      if rc <> 0;
       logError(yabadabadoo);
      endif;			
    endif;
  endIF;
  x +=1;
endDo;

pgm is an sqlrpgle, data insert is done via "exec sql insert into", pgm has no dcl-f or any f spec used, btw when running the first over dub file it works like a charm, while the second time (or the third or the fourth) the OVRDBF command does not work, and I don't see anything in the DSPJOBLOG, substitions checked via DSPOVR command shows nothing happened, I am for surely missing something, can any kind soul out there point me to what i am missing? TIA
jonboy49
Posts: 256
Joined: Wed Jul 28, 2021 8:18 pm

Re: Trouble managing OVRDBF inside a program

Post by jonboy49 »

I have always had issues with OVR and SQL. Given that you know the name of the library you need why not use SET SCHEMA - if SQL ignores that you really have an issue! Another option would be to pass the required library name to the function and use it to qualify all table references.
Post Reply