Jump to content

Click the link below to see the new game I'm developing!

Most Liked Content

#20115 Setting SQL_DBNAME under PROIV v9

Posted by Wim Soutendijk on 07 September 2020 - 07:08 AM

you can set the dbname for sqldefault in the connection string in the format sqlusername/sqlpassword/dbname

#20111 Something Ate My Alien game launched!

Posted by Richard Bassett on 27 July 2020 - 07:11 PM

Yay, bravo Rob & Kat.  I'm too old to cope with games but I have pointed my teenagers at this. :luck:

#20090 Text File To .DOCX Or .DOC Converter

Posted by Ross Bevin on 09 February 2019 - 01:09 PM

Hi Rob,


Thanks for the information. No, we run on Windows which I think is OK for Python. I will get one of our .NET developers to take a look.




#20032 pro-isam versus c-isam

Posted by Richard Bassett on 13 April 2018 - 02:26 PM

Hi Rob,


To add 0.02:


C-ISAM certainly is more dependable.  Using Pro-ISAM only for ProIV's own bootstrap files is a rational objective.  And you might be able to exploit the more-well-known nature of C-ISAM to get SQL access direct to your data, if indeed you're not doing that already.   (Although I'm not sure if there are 'free' solutions out there for that)


ProIV actually had support for C-ISAM with variable length records (external file type CISAMV), however, in C-ISAM that worked by putting data into the index (.idx) and so compromised the reliability/recoverability.  In any case I think that support might have been a specially licenced option.


It's been a long time since I looked at this stuff but I am mildly concerned about your choice of C-FLT as a data type, expecially for financial data.


C-FLT directly represents the C programming 'float' type, which is a 'low' precision binary floating point type.

Because it's a binary floating point type it doesn't accurately represent decimal fractions (e.g. cents)

The maximum precision is likely to be 9 decimal digits total (maybe OK, but wouldn't be in banking etc.)

The storage representation will be machine-specific, whereas C-ISAM can store data independently of chip architectures.


For these reasons, I think C-ISAM has always suggested/recommended using the DECIMAL (C-DEC) type and, personally, I would recommend that too.


Cheers,  Richard


PS.  I noticed something seems slightly wrong with some links on your own main www page - stuff is linked to localhost:10080 ?

#20031 pro-isam versus c-isam

Posted by Rob Fantini on 25 March 2018 - 04:20 PM

ALPHA and C-FLT we settled on . because we have been using c-flt for a while in our invoicing files.

#19917 PROISAM maximum record size

Posted by Ross Bevin on 28 April 2016 - 01:41 PM

Hi Stef,


The maximum ProISAM record size is now -r16000 with a maximum file size of 1.9 GB. We started using this size in version 7. See help topic 720111 in the online documentation.




#19915 Migrate from PRO ISAM to SQL

Posted by Joy Chapman on 26 April 2016 - 04:05 PM

How old is it?  Well, very old... feel free to laugh:

 04/26/16              McDonnell Information Systems                CAT//PTS_TR
                                                      **    *          **
   pppppppppppppp   nnnnnnnnnnnnn     oooooooooooooo  **   **         **
   PPP          PPP RRR         RRR  OOO          OOO **   **       **
   PPPppppppppppPPP RRRnnnnnnnnnRRR  OOO          OOO **   **      **
   PPPPPPPPPPPPPP   RRRRRRRRRRRRR    OOO          OOO **   **     **
   PPP              RRR        RRR   OOO          OOO **   **    **
   PPP              RRR         RRR  OOOooooooooooOOO **   **   **
   PPP              RRR          RRR  OOOOOOOOOOOOOO  **   ** **
                                                      *     **

 Version : 2.2000  Revision : r02.3.0 May 09, 94 Bootstrap Revision : 2.2.007

#19909 Migrate from PRO ISAM to SQL

Posted by Ross Bevin on 15 April 2016 - 06:06 PM

Hi Joy,


It's quite simple. This is what I would do for each file.


1. Copy the ProISAM ProIV filedef to a file with say a small 's' appended to the name. E.g. GL_MSTR to GL_MSTRs.

2. In the file definition header change GL_MSTRs to file type SQLSERVE. Set the physical name as GL_MSTR. You will also have to go into the storage tab and set the Ext Type, format and alternate name for each field. Alpha fields are ALPHA and numeric fields are NUMBER. For NUMBER the format is <total field length including precision>.<precision>. If the number can be a negative append the format with an "S". E.g. S8.2 (can store a max of 999999.99-)

3. In the file definition window use the SQL icons to create and save the script to a text file for GL_MSTRs.

4. In SQL Server Management Studio open the script previously created and execute it in the right database to create the table.

5. Create an update function that reads all of GL_MSTR in look mode and adds to GL_MSTRs in add mode.

6. Delete file definition GL_MSTR.

7. Rename file definition GL_MSTRs as GL_MSTR.

8. Regen functions that use GL_MSTR.


You will need to update your c:\windows\pro4v8.ini file with the appropriate SQL database settings. You will also need to create an ODBC driver on the server that has the ProIV kernel; it needs to point to the SQL Server database.


When I did this for our system in 2003 I automated the process by writing a series of functions that used the filedef bootstrap files to create one SQL table creation script file. I also wrote a function that automated the file renaming. If your system is large you may want to consider this route.


A word of caution with moving to SQL Server. Depending on how your system is written/structured you may encounter a lot of table locking. This is especially true for control files where you say get the next available invoice number. In ProISAM you can have a logical update that gets and increments the number. After the record is written it is unlocked and other sessions can read and update it. This is not true for SQL tables. Typically you will have to either exit the function to commit the records or execute a commit command in logic. Executing the commit command can have unwanted consequences with other tables you are processing. Because of this we continue to maintain our control files in ProISAM.


Hope this helps!




#19883 Enhanced Color Selector

Posted by kapoof on 05 January 2016 - 08:57 AM

Hi Everyone,
Though I would get the New Year off to a good start by giving you all an enhanced color
selection window and color convertor. All of the software (Source Included), data 
and graphics needed are contained in the attached .zip file along with installation instructions
and technical documentation.
The color selector can return color values in any of the following formats:
Standard ProIV Color Names (e.g. Red, Green etc.)
RGB Colors (e.g. 255,0,0 0,255,0 etc.)
OLE (Windows) Value (e.g. 255, 65280 etc.)
Hexadecimal Value (e.g. FF0000, 00FF00 etc.)
The color convertor can convert any of the above formats and returns the input color
in ALL of the above formats. For full details please see the technical document
Best Regards,
Rob Marshall.
p.s. If you know of any openings permanent or contract I would be grateful to know as I
am currently looking for a new position (I have over 26 years of experience with ProIV
up to and including the latest version as well as Unix,ORACLE etc). 
I can be contacted through this site, emailed at rj.marshall@live.com.au 
or on mobile (+63) 918 606 8891.

Attached Files

#19723 Example of using dynamic SQL

Posted by DARREN on 25 February 2014 - 10:40 PM

Agreed, but the values that can be selected for both the variables (which are given meaningful names for the purpose of display) and the selection values are table driven and are validated. The only way that SQL injection could occur is if the DBA did it himself. (w00t)

#19722 Example of using dynamic SQL

Posted by Richard Bassett on 25 February 2014 - 02:32 PM

Obligatory Little Bobby Tables reference:




The serious point to remember is that using dynamic SQL enables SQL injection attacks, so you should always put in place appropriate sanitization of the variable text you are splicing into your SQL, otherwise bad things can happen to good people.

#19702 commit points

Posted by Neil Mellis on 20 January 2014 - 02:10 AM



No real gotchas with Postgresql. I did get caught out  when moving from 8.1 to 9.2 and experienced initial cache building on my whole inventory. which turned out to be a bad index that behaved differently between versions.


When creating/converting tables I don't use the script creator within Proiv as this is a bit loose I just define it properly in pgAdmin.


I chose to use Postgresql to reduce cost of deployment on smaller user systems and provide a cross platform compatibility for Linux and Windows. The use of a ISO SQL also means that an up scale to Oracle is pretty straight forward.


I also chose to hybrid my data between pro-isam and the database. Most new stuff is mainly DB and designed to take advantage of it. Legacy only gets migrated when I need it - usually for more efficient retrieval or during larger changes.


My application uses a blend of technologies for Proiv/java/C/php/javascript and postgress works very well here and this gives me a choice as trends/demands arise. Proiv is still the fastest method of development !

#19698 commit points

Posted by Neil Mellis on 16 January 2014 - 12:43 AM



Don't forget that proiv lock logic doesn't work with postgresql so any lock will result in a spinning session until the lock owner releases. NG were going to look into handling this but no news yet.

I ended up having to use a pro-isam lock file where I really need critical tables to be managed properly.

Doing this also has the advantage that you only have to 'B' mode the pro-isam file with the keys and the lock logic gives you an opportunity for the user to respond to the lock or a timed/count retry prior to any table access. The pro-isam file can double as an audit as Neil B has suggested.


 By using this method iscollect will clean up the pro-isam lock on a session failure no need for user/admin lock screens etc. 

#19654 Permanet Developer Required in UK (West Midlands)

Posted by Kelvin Rapley on 09 October 2013 - 12:59 PM

Company: Sertec Group Holdings - an automotive supplier.

Location: Coleshill (near Birmingham), UK

Position: System Developer (Permanent) to join a team of 3, developing and supporting our in-house ERP System

We develop in ProIV Developer (VIP) in ProIV version 7 over CIsam files on a Linux platform
Knowledge of Java would be an advantage but is not essential
Competitive salary based on experience

Please email your CV to kelvin.rapley@sertec.co.uk

#19556 Produce PDF Documents Within PROIV Logic Using SSO (No XML & XSL)

Posted by Ross Bevin on 07 February 2013 - 01:41 PM

Hi Richard,

Yes you are right, SSO's have a huge potential to expand the functionality of the ProIV environment. What's really great is that Northgate is using internal Java talent to develop core SSO's to provide solutions we have all been crying out for years. I just don't have the time to learn Java to develop these solutions. It's much more cost effective for us to purchase them off the shelf. ProIV 7.1 (I think 6.2 as well) comes with the following free SSO's:


Available for purchase are: (You can request demo versions from Northgate to evaluate. They come with demo functions and HTML help files)


I have just been demoing the PdfSSO but will be purchasing it later this week. This SSO uses (interfaces with) a 3rd party API from iTextPDF that does the PDF creation. There is a small licensing fee for iTextPDF if you use it commercially. The list of features I published was listed in the installation document.

The other SSO we have purchased is the ExcelSSO. We currently use Dynamic Data Exchange (DDE) to create Excel documents on the Client side; it has it's pluses and minuses. The bigest drawback with DDE is that it takes time to populate the spreadsheet, the user can't do anything while it's building and you can't build it behind the scenes. We are in the process of transitioning to the ExcelSSO so that we can build, save and distribute Excel spreadsheets on the server side.


#19028 Paging Line Does Not Display

Posted by Lewis Mccabe on 14 April 2011 - 04:46 AM

Hello All,

We have a couple of very large functions with multiple paging screens as child cycles of a one time screen cycle. That cycle is in turn a child cycle of the main, one time screen cycle. Execution of each paging screen is via field jumps. We have two strange issues which no one has an answer to. First - our paging line number does not display. Secondly - when adding, the line to be added is not shown, but we can successfully execute the window assigned to the first field. Anyone ever see either of these?

We started removing cycles to determine when the function would work correctly. We removed all cycles except the main and the paging within main. Line numbers mysteriously appeared. We did not test for the add problem at this point. Next I only removed the first paging screen and the paging lines appeared. It seems the two paging cycles in the parent cycle do not play well together. We have done this many times before without a hitch.


#18999 Test Attachments

Posted by Rob Donovan on 26 March 2011 - 03:28 PM


Attached Files

#18785 PRO-IV Web Client

Posted by DARREN on 16 April 2010 - 12:58 PM

Just thought I would post a few screen shots of the side project I have been working on for Open Client. This is all PROIV rendered though Open Client. I tweeked the Open Client CSS settings to match our web application (so they look the same).

Attached Images

  • ClaimsSearch.png
  • ClaimsEntryStart.png
  • ClaimsEntryPolicyInfo.png
  • ClaimsEntryLossInfo.png
  • ClaimsEntryContactInfo.png
  • ClaimsEntrySummaryInfo.png
  • ClaimsSummary.png
  • ClaimsDiary.png
  • ClaimsAlerts.png
  • ClaimsAddressSummary.png
  • ClaimsAddressEdit.png
  • ClaimsDiaryByUserGroup.png

  • FGX likes this

#11094 take on data from excel file

Posted by Joseph Bove on 19 January 2005 - 04:00 PM

Along the lines of what Bill is saying:

Here is a global logic that makes dealing with csv files much nicer


      $$STRING = ''
      $$PARSED_STRING = ''
      STEP 1
   STEP 1


PARSE is destructive. Assuming that your file looks like "name", "address 1", "address 2"

You could simply code as follows
We also have a separate global logic REPLACE for character substitution

So, to finish the job,
REPLACE($NAME, '"','')
REPLACE($$ADDRESS1, '"', '')
REPLACE($$ADDRESS2, '"', '')


Click the link below to see the new game I'm developing!