過去ログ

                                Page     327
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼ストアドプロシージャのバラメータにユー...  てくの 03/7/5(土) 19:10
   ┣Re:ストアドプロシージャのバラメータにユー...  こうちゃん 03/7/7(月) 11:56
   ┗Re:ストアドプロシージャのバラメータにユー...  てくの 03/7/8(火) 15:31
      ┗Re:ストアドプロシージャのバラメータにユー...  こうちゃん 03/7/8(火) 18:17
         ┗Re:ストアドプロシージャのバラメータにユー...  てくの 03/7/9(水) 18:02
            ┗Re:ストアドプロシージャのバラメータにユー...  こうちゃん 03/7/10(木) 8:59
               ┗Re:ストアドプロシージャのバラメータにユー...  てくの 03/7/10(木) 10:37

 ───────────────────────────────────────
 ■題名 : ストアドプロシージャのバラメータにユー...
 ■名前 : てくの <info@technos-jp.com>
 ■日付 : 03/7/5(土) 19:10
 -------------------------------------------------------------------------
   AccessプロジェクトでSQLServerにつないでいます。
ストアドプロシージャでユーザー関数をパラメータで渡すことができるのしょうか?
Create procedure Test
{
  @param1 int = UserPrg() /*ユーザー関数*/
}
as
  select * from TestTbl
return
のように使いたいのですが・・

 ───────────────────────────────────────  ■題名 : Re:ストアドプロシージャのバラメータにユー...  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 03/7/7(月) 11:56  -------------------------------------------------------------------------
   てくのさん、こんにちは

>AccessプロジェクトでSQLServerにつないでいます。
>ストアドプロシージャでユーザー関数をパラメータで渡すことができるのしょうか?
>Create procedure Test
>{
>  @param1 int = UserPrg() /*ユーザー関数*/
>}
>as
>  select * from TestTbl
>return
>のように使いたいのですが・・

SQLServerやAccessのバージョン等が無いと回答しづらいですね。

ここでいう「ユーザー関数」とは、SQLServerの「ユーザ定義関数」かVBA上の「ユーザ定義関数」どちらでしょう?

SQLServerが2000なら、サーバ側の「ユーザ定義関数」をストアドプロシージャから呼び出すことは可能です。

SQLServerが7.0以前の場合や、VBA上の「ユーザ定義関数」の場合は、ADOのCommandオブジェクトで、ストアドプロシージャに関数の戻り値を渡すことにより同様の処理を実現可能です。

またVBA上の「ユーザ定義関数」の場合でも、その内容次第ではストアドプロシージャ上で処理してしまうこともできるとおもいます。
#ストアドプロシージャからVBAの「ユーザ定義関数」を呼び出せるということではありませんよ、念のため!

いづれにしても、もう少し詳細な情報がないとこれ以上の回答を得るのは難しいとおもいますよ。

 ───────────────────────────────────────  ■題名 : Re:ストアドプロシージャのバラメータにユー...  ■名前 : てくの <info@technos-jp.com>  ■日付 : 03/7/8(火) 15:31  -------------------------------------------------------------------------
   説明不足の部分をご連絡させていただきます。
ユーザー関数はVBA上での「ユーザー関数」SQLServerのバージョンは7(MSDE)です。
Jetではフォームのレコードソースにクエリーを指定しクエリーの中に検索結果を導く関数を埋め込み検索などの処理を行っていました。
それをできるだけ手を加えずにSQLServerに移行したいと思っています。
ストアドプロシージャで同様の処理がはたして行えるものなのでしょうか?
ご教授下されば幸いです。

 ───────────────────────────────────────  ■題名 : Re:ストアドプロシージャのバラメータにユー...  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 03/7/8(火) 18:17  -------------------------------------------------------------------------
   てくのさん、こんにちは

>説明不足の部分をご連絡させていただきます。
>ユーザー関数はVBA上での「ユーザー関数」SQLServerのバージョンは7(MSDE)です。
>Jetではフォームのレコードソースにクエリーを指定しクエリーの中に検索結果を導く関数を埋め込み検索などの処理を行っていました。
>それをできるだけ手を加えずにSQLServerに移行したいと思っています。
>ストアドプロシージャで同様の処理がはたして行えるものなのでしょうか?
>ご教授下されば幸いです。

最初の回答にも書きましたが、ストアドプロシージャからVBA上の「ユーザー関数」を呼び出すことはできません。
関数が「検索結果を導く関数」ということですから、ストアドプロシージャに検索条件を渡して検索するようにしたらいかがでしょう?

いずれにしても、これも最初の回答に書いたように、もっと詳細(具体的)な条件を教えていただかないとレスが難しいですね。

 ───────────────────────────────────────  ■題名 : Re:ストアドプロシージャのバラメータにユー...  ■名前 : てくの <info@technos-jp.com>  ■日付 : 03/7/9(水) 18:02  -------------------------------------------------------------------------
   ストアドプロシージャに検索条件を渡して検索するようにしたらと回答いただいたのですが・・。
例えば氏名というフィールドを持ったMDBがあるとします。
クエリーの抽出条件に"Like Prg()"と指定しておきます。
Prg()は
Function Prg()
  Prg = "*" & forms!フォーム名!検索条件入力用コントロール & "*"
end Function
のように作っておきます。
このようにしておくと部分一致の検索ができるのと、何も検索条件入力用コントロールに入力されていない場合は全部のデータを表示することができます。
このような方法をストアドプロシージャでも実現してみたいのですが・・・

 ───────────────────────────────────────  ■題名 : Re:ストアドプロシージャのバラメータにユー...  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 03/7/10(木) 8:59  -------------------------------------------------------------------------
   てくのさん、こんにちは

>例えば氏名というフィールドを持ったMDBがあるとします。
>クエリーの抽出条件に"Like Prg()"と指定しておきます。
>Prg()は
>Function Prg()
>  Prg = "*" & forms!フォーム名!検索条件入力用コントロール & "*"
>end Function
>のように作っておきます。
>このようにしておくと部分一致の検索ができるのと、何も検索条件入力用コントロールに入力されていない場合は全部のデータを表示することができます。
>このような方法をストアドプロシージャでも実現してみたいのですが・・・

質問の仕方が具体的になりませんので、答えようがないところですが、とりあえず具体的例を示します。

例:「T1テーブルのデータをforms!フォーム名!検索条件入力用コントロールをキーにProc_Procedureで選択する。」

テーブル名、コントロール名等は実際のものに置き換えてご検討ください。
その上で、質問があれば「具体的」にお願いします。

'ADOのCommanndを使用したストアド呼び出しの例
Private Sub cmd_Execute_Click()

 Dim dataconn As ADODB.Connection
 Dim Cmd As ADODB.Command
 Dim cmdPara As ADODB.Parameter
 
 Set dataconn = CurrentProject.Connection
  
 Set Cmd = New ADODB.Command
 Set Cmd.ActiveConnection = dataconn
  
 Cmd.CommandText = "Proc_Procedure"
 Cmd.CommandType = adCmdStoredProc
  
 Set cmdPara = Cmd.CreateParameter("Para", adVarChar, adParamInput, 20)
  
 Cmd.Parameters.Append cmdResult
 Cmd.Parameters.Append cmdPara
  cmdPara.Value = Prg()
  
 Cmd.Execute
  
 Set Cmd = Nothing
 Set dataconn = Nothing

End Sub

'Functionの例
Function Prg()
 Prg = "%" & forms!フォーム名!検索条件入力用コントロール & "%"
end Function

'ストアドプロシージャ例
Alter Procedure Proc_Procedure

 @Para VarChar(20)

As
 SELECT * FROM T1
 WHERE ID LIKE @Para

Return

 ───────────────────────────────────────  ■題名 : Re:ストアドプロシージャのバラメータにユー...  ■名前 : てくの <info@technos-jp.com>  ■日付 : 03/7/10(木) 10:37  -------------------------------------------------------------------------
   ありがとうございました。
早速、ためしてみます。
何度もお答えいただき感謝しています。
これからもよろしくご指導下さい。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 327