Когда вы перемещаете данные между удаленным сервером и Visual FoxPro, вы можете найти различия в типах данных, доступных на сервере или в Visual FoxPro. Однозначное соответствие между типами данных на удаленном источнике данных и типами данных, которые доступны в Visual FoxPro встречается крайне редко. Для обслуживания этих различий, Visual FoxPro использует ODBC или ADO типы данных для разметки удаленных типов данных в локальные типы данных Visual FoxPro. Поняв, как размечаются типы данных между ODBC или ADO и Visual FoxPro, вы можете предсказать, как данные удаленного сервера будут обработаны в вашем Visual FoxPro приложении.

Вы можете, кроме того, подогнать типы данных, используемые на сервере или в вашем приложении. Вы можете переписать типы данных полей, используемых Visual FoxPro по умолчанию, создав представление для набора удаленных данных и, затем, переписать установки свойства DataType поля представления в базе данных. Свойство DataType представляет собой символьное свойство, указывающее желаемый тип данных для каждого поля в удаленном представлении. Для получения более подробной информации о свойстве DataType смотрите описание функции DBSETPROP().

Преобразование типа данных между удаленными представлениями и курсорами Visual FoxPro

Когда вы извлекаете данные из удаленного источника через ODBC или ADO, Visual FoxPro преобразует тип данных каждого поля ODBC или ADO в эквивалентный тип данных Visual FoxPro в курсоре результата.

Удаленные типы данных в типы данных Visual FoxPro

В приведенной ниже таблице приведена используемая по умолчанию разметка между типами данных удаленного поля и Visual FoxPro типами данных для курсоров.

 
Тип данных ODBC/ADO Тип данных курсора Visual FoxPro, используемый по умолчанию

SQL_BINARY / adBinary SQL_VARBINARY / adVarbinary

Memo/Blob1 или Varbinary

NoteЗамечание

На тип, используемый по умолчанию, оказывает влияние свойство MapBinary. Для получения более подробной информации смотрите описание функции CURSORSETPROP().

SQL_LONGVARBINARY

General/Blob

NoteЗамечание

На тип, используемый по умолчанию, оказывает влияние свойство MapBinary. Для получения более подробной информации смотрите  описание функции CURSORSETPROP().

adLongVarbinary

Memo или Character

SQL_CHAR / adChar SQL_WCHAR / adWChar

Memo1 или Character

SQL_LONGVARCHAR / adLongVarChar SQL_WLONGVARCHAR / adLongVarWChar

Memo

SQL_VARCHAR / adVarChar SQL_WVARCHAR / adVarWChar

Memo1 или Character/Varchar

NoteЗамечание

На тип, используемый по умолчанию, оказывает влияние свойство MapVarchar. Для получения более подробной информации смотрите описание функции CURSORSETPROP().

SQL_DECIMAL / adNumeric SQL_NUMERIC / adNumeric

Currency2

SQL_BIT / adBoolean

Logical

SQL_TINYINT / adVarbinary SQL_SMALLINT / adSmallInt SQL_INTEGER / adInteger

Integer

SQL_BIGINT / adBigInt

Character

SQL_REAL / adSingle SQL_FLOAT / adDouble SQL_DOUBLE / adSingle

Double

NoteЗамечание

Для Double, число десятичных мест представляет собой значение, определяемое установкой SET DECIMAL в Visual FoxPro.

SQL_DATE / adDBTimeStamp

Date

SQL_TIME / adDBTTimeStamp

DateTime4

SQL_TIMESTAMP / adBinary

DateTime3

1 Если ширина поля ODBC/ADO меньше, чем значение свойства курсора UseMemoSize, то оно становится полем Character/Varchar/Varbinary в курсоре Visual FoxPro; в противном случае, он становится полем Memo/Blob.

2 Если поле сервера представляет собой тип данных money, оно становится типом данных Currency в Visual FoxPro.

3 Если значение в поле SQL_TIMESTAMP содержит доли секунд, то эти доли отбрасываются, когда значение поля преобразуется в тип данных Visual FoxPro DateTime.

4 День устанавливается по умолчанию в 1/1/1900.

В приведенной ниже таблице перечислены типы, доступные при использовании удаленных представлений или объектов CursorAdapter наравне с источниками данных ODBC или ADO и эквивалентными типами данных Visual FoxPro. Для получения более подробной информации об указании схемы курсора смотрите описание метода CursorFill объекта CursorAdapter .

 
Тип данных ODBC/ADO Акцептируемые курсором Visual FoxPro типы данных

SQL_BINARY / adBinary SQL_VARBINARY / adVarbinary SQL_LONGVARBINARY / adLongVarbinary SQL_CHAR / adChar SQL_VARCHAR / adVarChar SQL_LONGVARCHAR / adLongVarChar

Blob, Varbinary, Character, Varchar, General, Memo5

SQL_WCHAR / adWChar SQL_WVARCHAR / adVarWChar SQL_WLONGVARCHAR / adLongVarWChar

Character, Varchar, Memo

SQL_BIT / adBoolean

Character, Varchar, Logical

SQL_REAL / adSingle SQL_FLOAT / adDouble SQL_DOUBLE / adSingle SQL_DECIMAL / adNumeric SQL_NUMERIC / adNumeric SQL_TINYINT / adVarbinary SQL_SMALLINT / adSmallInt SQL_INTEGER / adInteger SQL_BIGINT / adBigInt

Character, Varchar, Integer, Numeric, Float, Double или Currency6

NoteЗамечание

Для Double, число десятичных мест представляет собой значение, определяемое установкой SET DECIMAL в Visual FoxPro.

SQL_DATE / adDBTimeStamp SQL_TIMESTAMP / adBinary

Character, Varchar, Date, DateTime7

SQL_TIME / adDBTTimeStamp

Character, Varchar, DateTime8

5 Если ширина поля ODBC меньше, чем значение свойства курсора UseMemoSize, оно становится полем Character в курсоре Visual FoxPro; в противном случае оно становится Memo полем.

6 Если поле сервера представляет собой тип данных money, оно становится типом данных Currency в Visual FoxPro.

7 Если значение в поле SQL_TIMESTAMP field содержит доли секунд, то эти доли отбрасываются при преобразовании значения в тип данных Visual FoxPro DateTime.

8 День устанавливается по умолчанию в 1/1/1900.

NoteЗамечание

Null-значения в полях источников данных ODBC становятся null-значениями в курсоре Visual FoxPro, вне зависимости от установки SET NULL в Visual FoxPro во время, когда приложение извлекает удаленные данные.

В Visual FoxPro 9.0, определенные типы данных ODBC и ADO могут быть размечены в логический тип данных в удаленных представлениях и объекте CursorAdapter.

Если значением backend является zero, тип данных размечается в логическое False (.F.); все другие значения размечаются в True (.T.). При производстве обновления, разметка из логических данных в целочисленный тип является зависимой от backend. Для ODBC, False (.F.) обычно размечается в 0, а True (.T.)  обычно размечается в 1. Для ADO, False (.F.) обычно размечается в zero, а .T. обычно размечается в  1 или -1, в зависимости от исполняемой команды. Для принудительной разметки может быть использовано свойство ConversionFunc объекта.

Для удаленных представлений и объекта CursorAdapter, типы данных ODBC SQL_DECIMAL и SQL_NUMERIC могут быть размечены только в логические значения, если Scale установлено в zero.

Для объекта CursorAdapter типы данных ADO adDecimal и adNumeric могут быть размечены только в логические значения, если Scale установлено в zero.

В приведенной ниже таблице перечислены типы данных ODBC и ADO, которые могут быть размечены в логический тип данных.

 
Тип данных ODBC Тип данных ADO

SQL_TINYINT

SQL_SMALLINT

SQL_INTEGER

SQL_BIGINT

SQL_DECIMAL

SQL_NUMERIC

adSingle

adTinyInt

adSmallInt

adInteger

adBigInt

adUnsignedTinyInt

adUnsignedSmallInt

adDecimal

adNumeric

В приведенной ниже таблице перечислены типы данных Visual FoxPro, доступные при использовании удаленных представлений с объектами CursorAdapter и родными данными Visual FoxPro и их эквивалентами с типами данных Visual FoxPro.

 
Родные типы данных Visual FoxPro Акцептируемые курсором Visual FoxPro типы данных

Character, Memo, General

Character, Varchar, Memo, General

Numeric, Float, Currency, Integer, Double

Numeric, Float, Currency, Integer, Double, Character, Varchar

Logical

Logical, Character, Varchar

Date, DateTime

Character, Varchar, Date, DateTime

Значения параметра Visual FoxPro для типов данных удаленных представлений

Если в курсоре Visual FoxPro присутствуют данные, которые получены из удаленных данных, то данные преобразуются обратно в их оригинальные типы данных ODBC или ADO при отсылке их на удаленный сервер. Если вы посылаете данные, созданные в Visual FoxPro на удаленный сервер с использованием технологии SQL, то применяются преобразования, приведенные в таблице.

 
Типы данныхVisual FoxPro Тип данных ODBC

Character, Varchar, Memo

SQL_CHAR или SQL_LONGVARCHAR9

Blob, Varbinary

SQL_BINARY или SQL_LONGVARBINARY

Currency

SQL_DECIMAL

Date

SQL_DATE или SQL_TIMESTAMP10

DateTime

SQL_TIMESTAMP

Double

SQL_DOUBLE

Integer

SQL_INTEGER

General

SQL_LONGVARBINARY

Logical

SQL_BIT

Numeric

SQL_DOUBLE

9 Если переменная Visual FoxPro, которая размечена в параметр, создает выражение, ширина которого меньше 255 символов, то оно становится типом SQL_CHAR в источнике данных ODBC; в противном случае оно становится типом SQL_LONGVARCHAR.

10 Данные типа Visual FoxPro Date преобразуются в SQL_DATE для всех источников данных ODBC, за исключением SQL Server, где они становятся SQL_TIMESTAMP.

Разметка значений параметра Visual FoxPro в удаленный тип данных

Вы можете разметить значение параметра Visual FoxPro в конкретный тип удаленных данных, форматируя параметр, как символьное выражение, которое использует синтаксис для желаемого удаленного типа данных. Например, если ваш сервер предоставляет тип данных DateTime, вы можете создать ваш параметр Visual FoxPro в виде символьного выражения в формате, используемом вашим сервером для представления типа данных DateTime. Когда ваш сервер получает значение параметра, он пытается разметить форматированные данные в тип данных DateTime.

NoteЗамечание

Когда вы посылаете параметр удаленному серверу, убедитесь, что тип данных в ключевом слове WHERE соответствует типу данных, используемых для выражения параметра.

Смотрите также