How to change/add to db record w/o mangling data

Discuss OrbForms Designer and PocketC Architect

Postby sgibson on Tue Feb 04, 2003 8:05 pm

I have a situation where I have a struct that I am writing to each record in the database. The struct contains several ints, floats, strings, a couple Dates, etc. Plus I added some "placeholder" variables to the struct that aren't used because my thought was they would "pad" the record structure so that I could add functionality without screwing up existing data. So, I have something like this:
Code: Select all
struct myRecord {
   int blah;
   int slime;
   float foo;
   float bar;
   string bah;
   string humbug;
   Date the_date;
   int placeholderA;
   float placeholderB;
   string placeholderC;

My primary question is this: if I want to add a Date to the structure can I simply replace one of the placeholder ints with a Date? I'm not sure what the size of a Date is versus an int when they get written to the database. I'm guessing ints are 32 bits (4 bytes), but I don't know that for certain. How big are Dates?

My secondary question is: is it even necessary to use these placeholders? Or will things "just work" if I append any new data to the end of the struct? My concern is that older records will be shorter in length than newer records and may give unexpected results when I try to read an old record into the new structure.

Thanks in advance for any insight,

perl -e 'print $i=pack(c5,(41*2),sqrt(7056),(unpack(c,H)-2),oct(115),10);'
Posts: 24
Joined: Mon Oct 14, 2002 3:18 pm
Location: USA

Postby jims on Tue Feb 04, 2003 8:39 pm


Using placeholders will only work if the "sizeof" the item is the same.

I've just always added new data to the end of the structure and have never had a problem. You just have to be careful to initialize the new data if necessary for those records that did not have anything.

Also, for more complicated changes I save the "DatabaseVersion" in appPrefs, then if I need to change the database structure I can write a simple routine to read the old structure and write the new structure.

Posts: 34
Joined: Wed May 22, 2002 4:01 pm
Location: USA

Postby dewey on Wed Feb 05, 2003 3:03 am

In general it you cannot put a native object into a database, because they are usually just an id referring to an internal structure. Luckily Date is different, because it is actually stored as the number of seconds since 1904 (IIRC).

If you call with a typeof(myRecord) which contains more fields than exist in the database record, the call to read() will return a lower value than expected (see docs). As Jim said, be sure to initialise the rest of the fields to something meaningful.
Site Admin
Posts: 749
Joined: Sun Oct 21, 2007 5:12 am

Return to OrbForms Designer and PocketC Architect

Who is online

Users browsing this forum: No registered users and 2 guests