Вы можете использовать Параметры Ввода/Вывода для обмена информационными  потоками между Visual FoxPro и SQL Server. Параметры Ввода/Вывода допускаются только при выполнении функций "Сквозных Запросов" SQL pass-through; они не могут быть использованы в Представлениях SQL (View).

В следующей далее таблице представлены возможные варианты использования параметров Ввода/Вывода при передаче их Значений из системы Visual FoxPro во внешнюю систему SQL Server (в Хранимые Процедуры) Stored Procedures, которые возвращают результирующие Значения обратно, в Visual FoxPro.

Использование параметров Ввода/Вывода в Хранимых Процедурах SQL Server
Программный Код Комментарииs

resultCode = SQLExec(connHand,

"CREATE PROCEDURE sp_test;

@mult1 int, @mult2 int, @result int;

OUTPUT AS SELECT

@result = @mult1 * @mult2")

Создается хранимая процедура, с именем: Sp_Test, которая перемножает два передаваемых Параметра (mult1 и mult2), а результат перемножения заносится в третий параметр, с именем:  result.

outParam = 0

Создание системное переменной Visual FoxPro, в которую помещаются результаты выполнения текущих опраторов SQL Server, которые возвращают значения в Visual FoxPro.

resultCode = SQLExec(connHand, ;

"{CALL sp_test (2, 4, ?@outParam)}")

Выполнение хранимой поцедуры SQL Server, передача параметров-констант '2' и '4', и получения результата перемножения переданных параметров в Результирующий параметр.

? "outParam =", outParam && the value is 8

Отображение результирующего Значения.

Определение Требуемых Параметров

Рекомендуется использовать следующий Синтаксис Результирующих Параметров:

  CopyCode imageКопировать Код
?@parameter_name

В случае необходимости использования параметров Ввода/Вывода, определите сначала некоторые переменные Visual FoxPro, которые в дальнейшем будут включены в соответствующие операторы SQL pass-through, а только после этого их (переменные) используйте для выполнения актуальных  операторов (функций) Запросов. Чтобы успешно посылать и получать требуемую информацию при использовании параметров Ввода/Вывода, вам необходимо выполнить следующее:

  • Определите параметр Хранимой Процедуры в соответствие с Типом получаемых Значений.

    Например, если вы определяете параметр хранимой процедуры как: @result, вы должны назначить требуемый Тип результирующего параметра, как =  int, для @result, и только после этого записывать в данный параметр результирующее Значение,  @result = 10.

  • В качестве результирующих параметров (@parameter_name) необходимо указывать только уже существующие переменные Visual FoxPro.

    Например, если в качестве результирующего параметра указано: ?@outParam, в вашем приложении уже должна существовать переменная (определена) Visual FoxPro  outParam.

    NoteОбратите Внимание

    Если вы не используете Результирующий параметр, как в системе Visual FoxPro так и в хранимой процедуре, или вы не определяете специальную переменную для получения результирующих Значений в Visual FoxPro, то последний не изменяет значение передаваемого параметра в хранимую процедуру (???).

Конвертация типов Данных

Visual FoxPro выполняет конвертацию возвращаемых Значений рассматриваемых Параметров по следующим Правилам:

  • Плавающая точка в Типах (N, F, B)  - конвертируется в тип  (N).

  • Размер отображения указанных числовых типов данных устанавливается = 20.

  • Позиция десятичной точки устанавливается текущими системными Установками. Это касается только оекущего Отображения полученного Числа (Default Display Format), но не относится к точности представления числа.

  • Данные типя Время (Date / Time), переменные (D, T) конвертируются в общий формат (T) - Time (Время).

Вы не можете использовать переменные типа Memo, General, Picture, NULL в качестве параметров Вводв/Вывода операторов SQL.

Если в ваших Приложениях в качестве рассматриваемых Параметров (SQL) используются конкретные Поля Курсоров, Visual FoxPro выполняет попытки обратной конвертации получаемых Результатов в соответствующий тип Данных (в полях Курсоров).

Возвращаемые Значения Параметров

Параметры Ввода/Вывода становятся доступными только после завершения получения Последнего Результирующего Набора последнего Запроса SQL. Это означает следующее: система Visual FoxPro возвращает Значения параметров Ввода/Вывода Только После:

  • SQLEXEC( ) возвращает значение (=1) в режиме пакетного выполнения (Batch Mode)

    -или-

  • SQLMORERESULTS( ) возвращает значение (=2) при Непакетном Режиме (non-batch mode).

Если предполагается, что при выполнении функции SQLEXEC( ) оператор SQL должен вернуть несколько результирующих наборов, то гарантировано возвращаются Выходные параметры только после получения Последнего Набора Данных (SQL) .

См. также