[comp.sys.ibm.pc] Dbase III records from C ?

mike@yetti.UUCP (Mike Clarkson ) (12/24/86)

Does anyone have a set of C (or Pascal or ...) routines that will let me
read records from a Dbase III file ? Nothing fancy, just the n'th record,
or the record with a given string as its first field.  I want to
read some things from a Dbase file into another program.

Mail to me and I'll summarise to the net.
Thanks in advance.

Mike Clarkson (yetti!mike.UUCP)


-- 
Mike Clarkson,		  ...!allegra \			BITNET:	mike@YUYETTI or
CRESS, York University,	  ...!decvax   \			SYMALG@YUSOL
4700 Keele Street,	  ...!ihnp4     > !utzoo!yetti!mike
North York, Ontario,	  ...!linus    /		     
CANADA M3J 1P3.		  ...!watmath /		Phone: +1 (416) 736-2100 x 7767


"...the most inevitable business communications system on the planet."
						- ROLM magazine advertisement
 which planet?

michael@orcisi.UUCP (12/30/86)

> Does anyone have a set of C (or Pascal or ...) routines that will let me
> read records from a Dbase III file ? Nothing fancy, just the n'th record,

dBC from Lattice is one such product.  I haven't used it but their literature
claims it does the job.

brian@prism.UUCP (12/31/86)

I have used C-tools from Ashton Tate with Dbase III plus, and the 
Lattice C compiler.  I found the package unsatisfactory for a couple of 
reasons:  
         Your compiled routines must be pre-loaded BEFORE DBIII starts, and
         consequently they remain resident after DBIII terminates.  

         It is very easy to hang DBIII if you pass an incorrect parameter
         (or inappropriate number of parameters) to the C-routines.
 
         I don't think that their memory allocation stuff works as well as
         they'd like; following their examples, I had problems with some
 	 trashing of memory when I attempted to do math operations on 
         array elements.  ( I was attempting to multiply the members of one
         array by elements of another array, then summing the results).
         
         
So, consequently, I rev-engineered the format of .mem files, and passed a
mem-filename to a compiled TURBO program (which I ran from dbaseIII - you
can include parameters in the command, like "run turbo1 data1.mem")
which wrote it's results to a .mem file which I passed back into my
DBaseIII program when the turbo pascal program finished.  Seems kludgy, but
it is rock solid, and easily changeable without re-linking everything and
rebooting.  

Also, if you want structures of the DbIII records, there was something posted
in net.sources a while back (or was it net.micro.pc?) which gave either
pascal or c source for data structures for DBiii.  Something funny? well,
I rev-engineered the formats for dbiii+ enough to do db access from turbo 
pascal, and had emulated alot of the functions of dbiii.  My routines ran
only slightly faster than dbaseiii+ (for operations that were i/o 
intensive), which makes me wonder if the data structures that Ashton Tate
used impede hi-speed performance.  Of course, the people doing the commercial
DBIII+ compilers probably do "clever" things, or at least have some "clues"
that we mortals don't. (Come to think of it, I think I had all checking 
turned on in the turbo compiler - that easily makes programs slower by 
a factor almost equal to  2).  Oh well, I didn't mean this to be so long...

brian moran
----
Brian K. Moran  brian@mirror.TMC.COM	
               {mit-eddie, ihnp4!inmet, wjh12, cca, datacube}!mirror!brian
Mirror Systems	2067 Massachusetts Avenue  Cambridge, MA, 02140
Telephone:	617-661-0777 extension 141

"Won't somebody tell me, just who and what I did...
 Why's this ring on my finger, and who's that screaming kid? " 
   From "Lost Weekend" by the Beat Farmers
---

jeffm@mmintl.UUCP (Jeffrey Miller) (01/10/87)

*
Regarding the query about accessing dBase III records from C, Ashton-Tate's
publishing group sells a couple of products called dBase Tools for C.  These
do exactly what you want.  They  aren't too expensive either.

Jeff

        *************************************************
        *       Jeff Miller                             *
        *       Multimate International Corp.           *
        *       52 Oakland Avenue                       *
        *       East Hartford, CT  06108-9911           *
        *       (203) 522-2116 x257                     *
        *  UUCP:                                        *
        * ...!seismo!utah-cs!utah-gr!pwa-b!mmintl!jeffm *
        *                                               *
        *************************************************
*