sda vs oda unicode behavior difference?
Posted: Tue 14 Sep 2010 18:47
We have an application that we are converting to D2010 that runs on both Oracle and MS SQL Server. We have run across a possible inconsistency in field mapping when UseUnicode = True.
The Oracle driver brings back Varchar2 as TWideStringField. The SQL Server driver brings back Varchars as TStringField.
Obviously this becomes a problem for our persistent fields.
I would like to find out if we are missing something or if this is really an inconsistency.
This can easily be reproduced by dropping a TSQLConnection and TSQLQuery component on a form. The TSQLQuery selects a table with a simple varchar/varchar2 column. Then you create a persistent field for that column and repeat for each database type.
Example of a SQL Server test case.
Currently we are using Delphi 2010 (14.0.3593.25826)
dbexpoda40.dll 4.50.0.21
dbexpsda40.dll 4.55.0.23
MS SQL Server 2000, 2005, 2008. Collated Latin
Oracle 10g, 11g NLS Characterset WE8ISO8859P1
Oracle Client 11.1.01
Windows 7 64bit
Thanks for any assistance.
Jeff
The Oracle driver brings back Varchar2 as TWideStringField. The SQL Server driver brings back Varchars as TStringField.
Obviously this becomes a problem for our persistent fields.
I would like to find out if we are missing something or if this is really an inconsistency.
This can easily be reproduced by dropping a TSQLConnection and TSQLQuery component on a form. The TSQLQuery selects a table with a simple varchar/varchar2 column. Then you create a persistent field for that column and repeat for each database type.
Example of a SQL Server test case.
Code: Select all
object SQLConnection1: TSQLConnection
ConnectionName = 'Dev 6.7 (SqlServer)'
DriverName = 'DEVARTSQLSERVER'
GetDriverFunc = 'getSQLDriverSQLServer'
LibraryName = 'dbexpsda40.dll'
LoginPrompt = False
Params.Strings = (
'drivername=DEVARTSQLSERVER'
'blobsize=-1'
'productname=MSSQL'
'HostName=sql2k8'
'Database=v670_test'
'User_Name=test'
'Password=test'
'UseUnicode=True')
VendorLib = 'sqloledb.dll'
Connected = True
Left = 32
Top = 16
end
object SQLQuery1: TSQLQuery
MaxBlobSize = 1
Params =
SQL.Strings = (
'select * from ac_ids')
SQLConnection = SQLConnection1
Left = 32
Top = 64
object SQLQuery1LOGINID: TStringField
FieldName = 'LOGINID'
Size = 8
end
end
Where ac_ids.LOGINID varchar(8) not null
dbexpoda40.dll 4.50.0.21
dbexpsda40.dll 4.55.0.23
MS SQL Server 2000, 2005, 2008. Collated Latin
Oracle 10g, 11g NLS Characterset WE8ISO8859P1
Oracle Client 11.1.01
Windows 7 64bit
Thanks for any assistance.
Jeff