views:

331

answers:

2

I was wondering - is there a standard (like a RFC) for the .sch schema file format the BDE uses?

The format is described here and here. It seems based on this Microsoft format, but it's not quite the same.

Example 1 - VARYING format file

CUSTOMER.SCH:

[CUSTOMER]
Filetype=VARYING
Delimiter="
Separator=,
CharSet=ascii
Field1=Customer No,Float,20,04,00
Field2=Name,Char,30,00,20
Field3=Phone,Char,15,00,145
Field4=First Contact,Date,11,00,160

CUSTOMER.TXT:

1221.0000,"Kauai Dive Shoppe","808-555-0269",04/03/1994
1231.0000,"Unisco","809-555-3915",02/28/1994
1351.0000,"Sight Diver","357-6-876708",04/12/1994
1354.0000,"Cayman Divers World Unlimited","809-555-8576",04/17/1994
1356.0000,"Tom Sawyer Diving Centre","809-555-7281",04/20/1994

Example 2 - FIXED format file

CUSTOMER.SCH:

[CUSTOMER]
Filetype=Fixed
CharSet=ascii
Field1=Customer No,Float,20,04,00
Field2=Name,Char,30,00,20
Field3=Phone,Char,15,00,145
Field4=First Contact,Date,08,00,160

CUSTOMER.TXT:

           1221.0000Kauai Dive Shoppe             808-555-0269   04/03/94
           1231.0000Unisco                        809-555-3915   02/28/94
           1351.0000Sight Diver                   357-6-876708   04/12/94
           1354.0000Cayman Divers World Unlimited 809-555-8576   04/17/94
           1356.0000Tom Sawyer Diving Centre      809-555-7281   04/20/94

I'm especially interested in the possible argument-values for 'Filetype', 'Delimiter', 'Separator' and 'CharSet'. I've searched the internet using various terms ('RFC', 'schema', 'filetype', 'standard', etc), but came up blank...

Things I would like to know specifically :

  • What encoding(s) can be used for the .sch file itself? (This is relevant for correctly interpreting the fieldnames and other configurable characters.)
  • How should I specify non-printable Separator and Delimiter characters, for example an Ansi control-character like "Unit Separator" ($1F) or even a simple "Tab" ($09)? (Given the age of the format I think I should use Caret notation, but it'd just like to be sure.)
  • How can I specify to not-use a Delimiter? Should I specifiy an empty value, or leave the setting out altogether?

TIA

PS: Note, I'm not using the BDE itself - it's just these schema files that I have to generate and read correctly.

A: 

It'll be really hard to get a definitive answer to your question. BDE has been deprecated for years now, and most of the original developers have moved on to other jobs.

If memory serves me correctly, the text (later ASCII) support of the BDE was already in there when it was first called ODAPI and later IDAPI (Independent Database API, a codevelopment of Borland, Novell, IBM and WordPerfect in the early 90's).

In the mean time, Borland became Inprise, moved its focus to the enterprise market, became Borland again, separated the developer tools and databases group into CodeGear and sold CodeGear to Embarcadero (which finally was developer centric again).

I will try to come up with something decent and extend this answer later on, or ask around at DelphiLive! next week.

Hang on :-)

Edit 1: some more information

Support for ASCII is in idasci32.dll

Value values for these fields:

Filetype:

  • Fixed
  • Delimited

Delimiter: unknown

Separator: unknown

CharSet:

  • ascii
Jeroen Pluimers
I saw no mention of a Filetype value "Delimited" in the BDE32.hlp (only "FIXED" and "VARYING") - do you have a source for this?
PatrickvL
The system will use "Varying" when anything else than "fixed" is specified.
NineBerry
Yup, when exporting with a TBatchMove you will get Delimited (at least in Delphi 2007, but I think that goes back to at least Delphi 5).I'm working on some more tests, but also need to pack for DelphiLive! so it might take at least a couple of days before I can edit my answer any further.
Jeroen Pluimers
+2  A: 

Search your hard drive for a file called bde32.hlp that is installed with Borland Delphi. It is a Windows Help file that contains a documentation of the BDE API. It also contains a topic titled "Binding external schema to text tables" which describes the format of the *.sch files.

Under the title "Language drivers", the same help file also contains a list of "short names" that can be specified for the CharSet entry in the *.sch file.

So, for example, if you want to use the Windows character set for west european languages (Windows-1252), that you will need for French accented characters or German umlauts, the value to use for CharSet is ANSIINTL like that:

[CUSTOMER]
Filetype=VARYING
Delimiter="
Separator=,
CharSet=ANSIINTL


What encoding(s) can be used for the .sch file itself? (This is relevant for correctly interpreting the fieldnames and other configurable characters.)

Just plain ASCII. There is no scenario that would require or allow you to use anything but good old ASCII characters with character codes from 0-127 and of those (except for line breaks to separate the different lines) only printable characters are meaningful.

For example, no other characters (umlauts, accented chars, etc) are allowed in the table name or column names.

How should I specify non-printable Separator and Delimiter characters, for example an Ansi control-character like "Unit Separator" ($1F) or even a simple "Tab" ($09)? (Given the age of the format I think I should use Caret notation, but it'd just like to be sure.)

Not possible. Only "visible" characters can be used as delimiter and separator. To use a tab, just use an empty assignment:

[CUSTOMER]
Filetype=VARYING
Delimiter="
Separator=
CharSet=ANSIINTL

How can I specify to not-use a Delimiter? Should I specifiy an empty value, or leave the setting out altogether?

In "Fixed" format, no separators and no delimiters are used. In "Varying" format, a delimiter is always used for columns with string/character type and a delimiter is never used for other column types. To not use a delimiter, just use an empty assignment in the schema:

[CUSTOMER]
Filetype=VARYING
Delimiter=
Separator=,
CharSet=ANSIINTL
NineBerry
Thanks, your reference to the "Language drivers" topic anwers my question on the "CharSet" setting. I can't find much details on specifying the other settings tho...
PatrickvL
The help topic in BDE32.hlp is the official documentation. There is nothing that is more detailed. I think, it is pretty much straight forward and self explanatory. What question is still unclear?
NineBerry
I added more specific questions in the above text.
PatrickvL
I tried to answer your questions. Keep in mind that the BDE is a very *ancient* technology.
NineBerry