Browse Source

odbc: use ftMemo/ftWideMemo for SQL_VARCHAR/SQL_WVARCHAR declared as nvarchar(max)

git-svn-id: trunk@49470 -
(cherry picked from commit 3fa35f258b7b0d5049f6f7b5c55c029f72b2eb1a)
ondrej 4 years ago
parent
commit
40e88bb732
1 changed files with 16 additions and 2 deletions
  1. 16 2
      packages/fcl-db/src/sqldb/odbc/odbcconn.pas

+ 16 - 2
packages/fcl-db/src/sqldb/odbc/odbcconn.pas

@@ -986,10 +986,24 @@ begin
     // NOTE: I made some guesses here after I found only limited information about TFieldType; please report any problems
     case DataType of
       SQL_CHAR:          begin FieldType:=ftFixedChar;  FieldSize:=ColumnSize; end;
-      SQL_VARCHAR:       begin FieldType:=ftString;     FieldSize:=ColumnSize; end;
+      SQL_VARCHAR:
+      begin
+        FieldSize:=ColumnSize;
+        if FieldSize=BLOB_BUF_SIZE then // SQL_VARCHAR declared as NVARCHAR(MAX) must be ftBlob - variable data size
+          FieldType:=ftMemo
+        else
+          FieldType:=ftString;
+      end;
       SQL_LONGVARCHAR:   begin FieldType:=ftMemo;       FieldSize:=BLOB_BUF_SIZE; end; // is a blob
       SQL_WCHAR:         begin FieldType:=ftFixedWideChar; FieldSize:=ColumnSize; end;
-      SQL_WVARCHAR:      begin FieldType:=ftWideString; FieldSize:=ColumnSize; end;
+      SQL_WVARCHAR:
+      begin
+        FieldSize:=ColumnSize;
+        if FieldSize=BLOB_BUF_SIZE then // SQL_VARCHAR declared as NVARCHAR(MAX) must be ftBlob - variable data size
+          FieldType:=ftWideMemo
+        else
+          FieldType:=ftWideString;
+      end;
       SQL_SS_XML,
       SQL_WLONGVARCHAR:  begin FieldType:=ftWideMemo;   FieldSize:=BLOB_BUF_SIZE; end; // is a blob
       SQL_DECIMAL:       begin FieldType:=ftFloat;      FieldSize:=0; end;