Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
XBase::FAQ(3)	      User Contributed Perl Documentation	 XBase::FAQ(3)

       XBase::FAQ - Frequently asked questions about the

       This is a list of questions people asked	since the module has been
       announced in fall 1997, and my answers to them.

       Jan Pazdziora

Questions and answers
       What Perl version do I need? What other modules?
	 You need perl 5.10 or newer. You need DBI module version 1.00 or
	 higher, if you	want to	use the	DBD driver (which you should).

       Can I use under	Windows	95/NT?
	 Yes. It's a standard Perl module so there is no reason	it shouldn't.
	 Or, actually, there are a lot of reasons why standard thing do	not
	 work on systems that are broken, but I'm trying hard to workaround
	 these bugs. If	you find a problem on these platform, send me a
	 description and I'll try to find yet another workaround.

       Is there	a choice of the	format of the date?
	 The only possible format in which you can get the date	and that the
	 module	expect for inserts and updates is a 8 char string 'YYYYMMDD'.
	 It is not possible to change this format. I prefer to do the
	 formating myself since	you have more control over it.

       The "get_record"	also returns deleted records. Why?
	 Because. You get the _DELETED flag as the first value of the array.
	 This gives you	a possibility to decide	what to	do -- undelete,
	 ignore... It's	a feature -- you say you want a	record of given
	 number, you get it and	get additional information, if the record is
	 or isn't marked deleted.

       But with	DBD::XBase, I do not see the deleted records.
	 That's	correct: DBD::XBase only gives you records that	are positively
	 in the	file and not deleted. Which shows that	is a lower
	 level tool because you	can touch records that are marked deleted,
	 while DBD::XBase is higher level -- it	gives you SQL interface	and
	 let's you work	with the file more naturaly (what is deleted should
	 stay deleted).	cannot read files created with [your favorite tool].
	 Describe exactly, what	you expect and what you	get. Send me the file
	 (I understand attachments, uuencode, tar, gzip	and zip) so that I can
	 check what it going on	and make undestand your file.	A
	 small sample (three rows, or so) are generally	enough but you can
	 send the whole	file if	it doesn't have	megabytes. Please understand

       How to install the module when I	do not have make?
	 On Win* platform and with ActiveState port, use ppm to	install
	 DBD::XBase from ActiveState's site. You can also just copy the	files
	 from the lib directory	of the distribution to where perl can find
	 them. Also check whether your make doesn't hide under different names
	 (nmake, gmake). See "README".

       I have make but I cannot	install	into default directory.
	 Ask your sysadmin to do it for	your. If he refuses, fire the
	 sysadmin. See "README"	for how	to install into	and use	nonstandard
	 place for the module.

       Can I access one	dbf file both from Perl	and (say) Clipper?
	 For reading --	yes. For writing -- has a locksh and lockex
	 method	to lock	the file. The question is to what extend Clipper (or
	 Fox* or whatever) uses	the same system	calls, documentation of	native
	 XBase applications doesn't tell this. So the answer is	that for
	 multiple updates you should probably consider real RDBMS system
	 (PostgreSQL, MySQL, Oracle, to	name a few). breaks my accented characters.
	 No, it	doesn't. The character data is returned	exactly	as it appears
	 in the	dbf/dbt	file. You probably brought the file from different
	 system	that uses differend character encodings. So some bytes in the
	 strings have different	meaning	on that	system.	You also probably have
	 fonts in different encoding on	that system. In	the Czech language, we
	 have about 6 different	encoding that affect possition at which
	 accented characters appear.

	 So what you really want to do is to use some external utility to
	 convert the strings to	encoding you need -- for example, when I bring
	 the dbf from Win*, it often is	in the Windows-1250 or PC-Latin-2
	 encoding, while the standard is ISO-8859-2. I use my utility
	 Cz::Cstocs to do the conversion, you maight also try GNU program
	 recode	or use Text::Iconv Perl	module.

       How do I	access the fields in the memo file?
	 Just read the memo field, it will fetch the data from the memo	file
	 for you transparently.

       Matching	with "field = '%str%'" doesn't work.
	 If you	want to	match wildcards	with DBD::XBase, you have to use

		 select	* from table where field like '%str%'

       Can I sue you if corrupts my	data?
	 No. At	least, I hope no. The software is provided without any
	 warranty, in a	hope you might find is usefull.	Which is by the	way
	 the same as with most other software, even if you pay for that. What
	 is different with is the fact that	if you find
	 out that the results are different from those expected, you are
	 welcome to contact me,	describe the problem and send me the files
	 that give troubles to the module, and I'll try	to find	fix the

       What dbf/other files standard does the module support?
	 I try to support any file that	looks reasonably as
	 dbf/dbt/fpt/smt/ndx/ntx/mdx/idx/cdx. There are	many clones of XBase-
	 like software,	each adding its	own extension. The module tries	to
	 accept	all different variations. To do	that, I	need your cooperation
	 however -- usually good description of	the problem, file sample and
	 expected results lead to rather fast patch.

       What SQL	standard does the DBD::XBase support?
	 If supports a reasonable subset of the	SQL syntax, IMHO. So you can
	 do select, delete, insert and update, create and drop table. If there
	 is something that should be added, let	me know	and I will consider
	 it.  Having said that,	I do not expect	to ever	support	joins, for
	 example.  This	module is more a parser	to read	files from your	legacy
	 applications that a RDBMS -- you can find plenty of them around --
	 use them.

       I downloaded you	module I do not	know how to install it.
	 Did you follow	the steps in the "README" and "INSTALL"	files? Where
	 did it	fail? This module uses a standard way modules in Perl are
	 installed. If you've never installed a	module on your system and your
	 system	is so non-standard that	the general instruction	do not help,
	 you should contact your system	administrator or the support for your

       "select max(field) from table" does not work.
	 Aggregate functions are not supported.	It would probably be very
	 slow, since the DBD doesn't make use of indexes at the	moment.	I do
	 not have plans	to add this support in some near future.

       "DBI->connect" says that	the directory doesn't exist ...
	 ... but it's there. Is	DBD::XBase mad or what?

	 The third part	of the first parameter to the connect is the directory
	 where DBD::XBase will look for	the dbf	files. During connect, the
	 module	checks "if -d $directory". So if it says it's not there, it's
	 not there and the only	thing DBD::XBase can do	about it is to report
	 it to you. It might be	that the directory is not mounted, you do not
	 have permissions to it, the script is running under different UID
	 than when you try it from command line, or you	use relative patch and
	 run the script	from a different directory (pwd) than you expect.
	 Anyway, add

		 die "Error reading $dir: $!\n"	unless -d $dir;

	 to your script	and you	will see that it's not DBD::XBase problem.

       The stops after	reading	n records ...
	 ... why doesn't it read all 10	x n records?

	 Check if the file isn't truncated. "dbfdump -i	file.dbf" will tell
	 you the expected number of records and	length of one record, like

		 Filename:	 file.dbf
		 Version:	 0x03 (ver. 3)
		 Num of	records: 65
		 Header	length:	 1313
		 Record	length:	 1117
		 Last change:	 1998/12/18
		 Num fields:	 40

	 So the	expected length	of the file is at least	1313 + 65 * 1117. If
	 it's shorter, you've got damaged file and only reads
	 as much rows as it can	find in	the dbf.

       How is this DBD::XBase related to DBD::ODBC?
	 DBD::XBase reads the dbf files	directly, using	the (included) module. So it	will run on any	platform with reasonable new
	 perl. With DBD::ODBC, you need	an ODBC	server,	or some	program, that
	 DBD::ODBC could talk to. Many proprietary software can	serve as ODBC
	 source	for dbf	files, it just doesn't seem to run on Un*x systems.
	 And is	also much more resource	intensive, if you just need to read
	 the file record by record and convert it to HTML page or do similary
	 simple	operation with it.

       How do I	pack the dbf file, after the records were deleted? doesn't support this directly. You'd probably	want to	create
	 new table, copy the data and rename back. Patches are always welcome.

       Foxpro doesn't see all fields in	dbf created with
	 Put 'version' => 3 options in to the create call -- that way we say
	 that the dbf file is dBaseIII style.


perl v5.32.1			  2015-05-04			 XBase::FAQ(3)


Want to link to this manual page? Use this URL:

home | help