powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / FoxPro+SQL
14 сообщений из 14, страница 1 из 1
FoxPro+SQL
    #32085287
Pavlov Igor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе время суток!

Ребята подскажите плиз, как вызвать встроенную процедуру MS SQL Server с передачей ей параметров.
Допустим есть exec(<имя соединения>, <имя хранимой процедуры>,<FoxPro- курсор куда возращаются данные из SQL Servera>), а куда здесь засунуть параметры для передачи в <хранимую процедуру>

Заранее благодарен Pavlov Igor
...
Рейтинг: 0 / 0
FoxPro+SQL
    #32085288
Pavlov Igor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе время суток!

Ребята подскажите плиз, как вызвать встроенную процедуру MS SQL Server с передачей ей параметров.
Допустим есть exec(<имя соединения>, <имя хранимой процедуры>,<FoxPro- курсор куда возращаются данные из SQL Servera>), а куда здесь засунуть параметры для передачи в <хранимую процедуру>

Заранее благодарен Pavlov Igor
...
Рейтинг: 0 / 0
FoxPro+SQL
    #32085342
Фотография 1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Купи МСДН

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
Create a program named SP_fkeys.prg using the following code: 

   * Substitute the server name.
   #DEFINE Connect_String 'DRIVER={SQL Server};SERVER=MY_SERVER;' + ;
      'DATABASE=PUBS;UID=sa;PWD='
   * Create a cursor to store information.
   CREATE CURSOR SQLKeys (Parent_Qualifier c( 128 ), Parent_Owner c( 128 ), ;
      Parent_Table_Name c( 128 ), Parent_Column_Name c( 128 ), ;
      Foreign_Qualifier c( 128 ), Foreign_Owner c( 128 ), ;
      Foreign_Table_Name c( 128 ), Foreign_Column_Name c( 128 ), ;
      Key_Seq I, FK_NAME c( 128 ), PK_Name c( 128 ))
   * Connect to SQL Server.
   gnConnHandle=SQLSTRINGCONN(Connect_String)
   IF gnConnHandle> 0 
      * Get the tables available on SQL Server.
      SQLConnTables=SQLTABLES(gnConnHandle)
      IF SQLConnTables> 0 
         SELECT SQLResult
         INCnt= 0 
         DO WHILE !EOF()
            * Create a command to execute the stored procedure.
            SQLCommand= "sp_fkeys "  + ALLTRIM(Table_Name)
            * Execute the stored procedure and return data to a cursor.
            =SQLEXEC(gnConnHandle,SQLCommand,'syskeys')
            * Select the cursor.
            SELECT SYSKeys
            IF RECCOUNT()> 0 
               SELECT SQLKeys
               SQLKEY_Exists=.F.
               SCAN FOR Parent_Table_Name=SYSKeys.PKTable_Name ;
                     AND Foreign_Table_Name=SYSKeys.FKTable_Name
                  * Multicolumn key.
                  * Concatenate to get the expression.
                  REPLACE SQLKeys.Foreign_Column_Name WITH ;
                     ALLTRIM(SQLKeys.Foreign_Column_Name) + ;
                      "+"   + ALLTRIM(SYSKeys.FKColumn_Name)
                  SQLKEY_Exists=.T.
               ENDSCAN
               IF !SQLKEY_Exists
                  * Insert a new record into the SQLKeys cursor.
                  INSERT INTO SQLKeys ;
                     VALUES ;
                     (SYSKeys.PKTable_Qualifier, SYSKeys.PKTable_Owner, ;
                     SYSKeys.PKTable_Name, SYSKeys.PKColumn_Name, ;
                     SYSKeys.FKTable_Qualifier, SYSKeys.FKTable_Owner, ;
                     SYSKeys.FKTable_Name,SYSKeys.FKColumn_Name, ;
                     SYSKeys.Key_Seq,SYSKeys.FK_NAME,SYSKeys.PK_Name)
               ENDIF
            ENDIF
            SELECT SQLResult
            SKIP
         ENDDO
         =SQLDISCONN(gnConnHandle)
      ENDIF
   ENDIF
   SELECT SQLKeys
   BROW LAST
   CLOSE ALL
   RETURN


In the Command window enter and run the following code: 

   DO SP_FKEYS


REFERENCES
Transact – SQL Help; search on:  "sp_fkeys"  

...
Рейтинг: 0 / 0
FoxPro+SQL
    #32085666
Alexey Savelyev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответ.
Но нельзя ли по другому?
Я например помучился и получилось следующее
=SQLEXEC('имя соединения', 'имя_SQL_процедуры &параметр', 'имя курсора')
если в качестве параметра передаются данные типа numeric
то параметр будет равен что то типа STR(perem,15,2) a perem - это переменная содержащая само значение которое надо передать в процедуру
если в качестве параметра передаются данные типа char
то параметр будет равен что то типа '"'+perem+'"' a perem - это переменная содержащая само значение которое нао передать в процедуру
короче параметры должны передаваться через макроподстановку. Переменных SQLEXEC не понимает.
С данными типа DATE вообще весело они должны передаваться что то типа
'jan'+' '+'01'+' '+'2002'
(Если кому то интересно я вышлю подробно примеры конкретных текстов вызовов процедур на VFP и примеры этих процедур на MSSQL )
...
Рейтинг: 0 / 0
FoxPro+SQL
    #32085686
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то не пойму - а чем вас не устраивает стандартный механизм передачи пареметров с помощью
resultCode = SQLExec(connHand, "{CALL sp_xxx (?InParam1, ?InParam2, ?@OutParam1)}") ?
...
Рейтинг: 0 / 0
FoxPro+SQL
    #32085863
Alexey Savelyev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большое за совет Glory из Эстонии. Теперь уже когда узнал этот механизм меня
устраивает на все 100. Но это - когда знаешь!
"{CALL sp_xxx (?InParam1, ?InParam2, ?@OutParam1)}"
Только вот не пойму CALL - это чья команда FOXPRO или MSSQL? В документации ни там ни там я ее не нашел. И что значат фигурные скобки? {}. Если кто - нибудь не посчитает за труд и пришлет мне документацию по данному вопросу - буду очень рад. Могу выслать тоже что-нибудь касающееся работы с MSSQL. По FoxPRO к сожалению док у меня мало! МОЙ e-mail Alex_BUBU@mail.ru

Cпасибо! Всех с Новым Годом!
...
Рейтинг: 0 / 0
FoxPro+SQL
    #32085873
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только вот не пойму CALL - это чья команда FOXPRO или MSSQL? В документации ни там ни там я ее не нашел. И что значат фигурные скобки? {}.

"The Microsoft® SQL Server™ ODBC driver supports both the ODBC CALL escape sequence and the Transact-SQL EXECUTE statement for executing stored procedures; the ODBC CALL escape sequence is the preferred method. Using ODBC syntax enables an application to retrieve the return codes of stored procedures and the SQL Server ODBC driver is also optimized to use a protocol originally developed for sending remote procedure (RPC) calls between SQL Servers. This RPC protocol increases performance by eliminating much of the parameter processing and statement parsing done on the server.

The ODBC CALL escape sequence for calling a procedure is:

{[?=]call procedure_name[([parameter][,[parameter]]...)]}

where procedure_name specifies the name of a procedure and parameter specifies a procedure parameter."
...
Рейтинг: 0 / 0
FoxPro+SQL
    #32086031
Alexey Savelyev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большое Глори за ответ. Не могли бы Вы выслать полную документацию по ODBC. Мой e-mail: alex_bubu@mail.ru

Заранее очень благодарен!

Алексей Савельев
...
Рейтинг: 0 / 0
FoxPro+SQL
    #32086051
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приведенная цитата из SQL Server 2000 Books Online (Updated)

А про ODBC все есть здесь
...
Рейтинг: 0 / 0
FoxPro+SQL
    #32086633
Фотография Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
допустим параметр myPar
SQLexec(con,"exec mySP ?myPar")
...
Рейтинг: 0 / 0
FoxPro+SQL
    #32086649
Фотография 1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати сказать, вчера столкнулся с проблемой когда myPar в
=SQLexec(con,"exec mySP ?myPar")
является именем таблицы содержащим пробел. Эта сволочь почему-то считает что это два параметра, а не один. Сталкивался кто?
...
Рейтинг: 0 / 0
FoxPro+SQL
    #32086904
Alexey Savelyev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я знаю не рекомендуется имена полей, таблиц и т.д. писать на кирилице. А пробелы в именах таблиц недопустимы!
...
Рейтинг: 0 / 0
FoxPro+SQL
    #32087026
Фотография Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Alexey Savelyev

Пробелы в именах таблиц SQL2000 допустимы.
Здесь какой-то глюк фокса.
...
Рейтинг: 0 / 0
FoxPro+SQL
    #32089031
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Вася

Это не глюк фокса. Это его фича.

В среде FoxPro пробел - это символ разделитель опций внутри одной команды. Чтобы он не считал пробел в качестве разделителя необходимо использовать кавычки или квадратные скобки при написании имен таких полей.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / FoxPro+SQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]