From 166847c7c7fcb7a790812792168bdae0118b4cc2 Mon Sep 17 00:00:00 2001 From: ondrej Date: Tue, 7 Jan 2020 09:41:20 +0000 Subject: [PATCH] odbc: fix international column names git-svn-id: trunk@43881 - --- packages/fcl-db/src/sqldb/odbc/odbcconn.pas | 8 +++++++- packages/fcl-db/src/sqldb/sqldb.pp | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/fcl-db/src/sqldb/odbc/odbcconn.pas b/packages/fcl-db/src/sqldb/odbc/odbcconn.pas index ac8f9f4347..fe388eddd2 100644 --- a/packages/fcl-db/src/sqldb/odbc/odbcconn.pas +++ b/packages/fcl-db/src/sqldb/odbc/odbcconn.pas @@ -925,7 +925,7 @@ var i:integer; ColNameLength,TypeNameLength,DataType,DecimalDigits,Nullable:SQLSMALLINT; ColumnSize:SQLULEN; - ColName,TypeName:string; + ColName,TypeName:RawByteString; FieldType:TFieldType; FieldSize:word; AutoIncAttr, FixedPrecScale, Unsigned, Updatable: SQLLEN; @@ -974,6 +974,9 @@ begin SQL_HANDLE_STMT, ODBCCursor.FSTMTHandle, 'Could not get column name for column %d.',[i] ); end; + // ColName is received in ANSI - convert to DefaultSystemCodePage + SetCodePage(ColName, CodePage, False); + SetCodePage(ColName, DefaultSystemCodePage, True); // convert type // NOTE: I made some guesses here after I found only limited information about TFieldType; please report any problems @@ -1127,6 +1130,9 @@ begin SQL_HANDLE_STMT, ODBCCursor.FSTMTHandle, 'Could not get datasource dependent type name for column %s.',[ColName] ); end; + // TypeName is received in ANSI - convert to DefaultSystemCodePage + SetCodePage(TypeName, CodePage, False); + SetCodePage(TypeName, DefaultSystemCodePage, True); DatabaseErrorFmt('Column %s has an unknown or unsupported column type. Datasource dependent type name: %s. ODBC SQL data type code: %d.', [ColName, TypeName, DataType]); end; diff --git a/packages/fcl-db/src/sqldb/sqldb.pp b/packages/fcl-db/src/sqldb/sqldb.pp index 762fdf81fd..b69cde538e 100644 --- a/packages/fcl-db/src/sqldb/sqldb.pp +++ b/packages/fcl-db/src/sqldb/sqldb.pp @@ -268,6 +268,7 @@ type Property Statements : TThreadList Read FStatements; property Port: cardinal read GetPort write SetPort; + property CodePage: TSystemCodePage read FCodePage; public constructor Create(AOwner: TComponent); override; destructor Destroy; override;