The format of the character data in the table.
Table
The DataFlex SQL Drivers (SQL Server, DB2 and ODBC)
String, permanent
Read / Write
"OEM", "ANSI"
Use cli.pkg
Get_Attribute DF_FILE_TABLE_CHARACTER_FORMAT of {tableNumber} to {stringVariable}
Set_Attribute DF_FILE_TABLE_CHARACTER_FORMAT of {tableNumber} to {"OEM"|"ANSI"}
This attribute determines in what character format data is stored in SQL databases. The DataFlex SQL drivers perform character translations based on this setting.
DataFlex 2021 and later support ANSI and Unicode character formats. When DF_FILE_TABLE_CHARACTER_FORMAT is set to ANSI, it should be interpreted as ANSI or Unicode. ANSI/Unicode is the default table character format and should normally not be changed.
DataFlex versions before DataFlex 2021 and the associated SQL Drivers (6.3) only supported ANSI or OEM data. ANSI and OEM are single-byte encodings that are limited to 256 characters (no Unicode).
The OEM character format is still supported for backward compatibility with earlier DataFlex versions, but it is strongly recommended to convert OEM tables to ANSI/Unicode and this is mandatory for applications to support Unicode data.
See Character Formats (OEM or Ansi) for further information about character formats and converting character formats.
Be aware that setting this attribute’s value will only change the way data is presented and new data is stored. Existing data will not be converted from OEM to ANSI or vice versa. You need to run a conversion utility (like the OEM to ANSI Conversion Wizard) to convert existing data. Just changing this setting without conversion may corrupt your data!
This attribute can be set both inside and outside of a Structure_Start ... Structure_End operation. The value of the attribute is stored in the intermediate file using the keyword Table_Character_Format.
Procedure ConvertRow Handle hTable String sOrgFormat String sNewFormat
String sValue
Integer iNumColumns
Integer iType
Integer iColumn
//*** Loop through the fields and convert ASCII and text fields
Get_Attribute DF_FILE_NUMBER_FIELDS Of hTable To iNumColumns
For iColumn From 1 To iNumColumns
Get_Attribute DF_FIELD_TYPE Of hTable iColumn To iType
If ((iType = DF_ASCII) Or (iType = DF_TEXT)) Begin
Set_Attribute DF_FILE_TABLE_CHARACTER_FORMAT Of hTable To sOrgFormat
Get_Field_Value hTable iColumn To sValue
Set_Attribute DF_FILE_TABLE_CHARACTER_FORMAT Of hTable To sNewFormat
Set_Field_Value hTable iColumn To sValue
End
Loop
End_Procedure // ConvertRow
Procedure ConvertTableCharacterFormat Handle hTable Integer iIndex String sNewFormat
String sFormat
Boolean bFound
String sOrgFormat
Get_Attribute DF_FILE_TABLE_CHARACTER_FORMAT Of hTable To sFormat
If (Uppercase(sFormat) <> Uppercase(sNewFormat)) Begin
If (Uppercase(sNewFormat) = "ANSI") ;
Move "OEM" To sOrgFormat
Else If (Uppercase(sNewFormat) = "OEM") ;
Move "ANSI" To sOrgFormat
Else ;
Procedure_Return
Begin_Transaction
Clear hTable
vFind hTable iIndex Gt
While (Found)
Send ConvertRow hTable sOrgFormat sNewFormat
Get_Attribute DF_FILE_STATUS Of hTable To iStatus
If (iStatus = DF_FILE_ACTIVE_CHANGED) ;
SaveRecord hTable
vFind hTable iIndex Gt
End
End_Transaction
End
End_Procedure // ConvertTableCharacterFormat
The sample procedure above converts a table from one format to the other. It does this in one big transaction. To run this procedure the transaction log of the database must be big enough to hold this size of transaction. Note that the procedure uses the feature that moving a value to a column that already has that value is not seen as a change. This decreases the transaction size to those records that actually do change.