Search code examples
delphischemafile-formatbde

What standard does BDE use for .sch schema files?


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.


Solution

  • 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