AccessとSqlServerでユーザー定義関数を使用する方法

このQ&Aのポイント
  • AccessプロジェクトでSqlServerのユーザー定義関数を利用する方法について調べています。
  • Accessのフォーム上のコントロール値をパラメータとして、SqlServerのユーザー定義関数を呼び出し、その戻り値をAccessで受け取る方法を知りたいです。
  • 具体的な例として、Accessのテキストボックスからパラメータを渡し、SqlServerのユーザー定義関数の戻り値を別のテキストボックスに表示させたいです。
回答を見る
  • ベストアンサー

AccessとSqlServer

いまだ、Accessプロジェクトを利用しているものです。 SqlServerにユーザー定義関数(スカラ値関数)があり、Access(adp)からそのユーザー定義関数に、フォーム上のコントロール値をパラメータとして渡し、その戻り値をAccessで受け取りたいのですが、そのやり方で躓いています。   例 SqlServerのユーザー定義関数      Alter Function dbo.Total (@Para1 int,@Para2 int) Returns int As Begin Declare @Total int End BEGIN @Total = Para1 + Para2 Teturn(@Total) End      とし、      AccessのForm1のテキストボックス1、2をパラメータとして、テキストボックス3      に、SqlServerのユーザー定義関数の戻り値「@Total」を表示させたいと望んでいる     のですが。      お知恵を借りたく、質問させていただきました。

質問者が選んだベストアンサー

  • ベストアンサー
  • KHSSSK
  • ベストアンサー率76% (13/17)
回答No.1

Access側から直接SQL文を投げつけてレコードセットを取得する方法はいかがでしょうか。 Form1のテキストボックス2の更新後処理イベントに以下の文を貼り付けてみて下さい。 Dim cn As ADODB.Connection Dim rs As New ADODB.Recordset Dim strSQL As String strSQL = "SELECT dbo.Total(" & Me.テキストボックス1 & ", " & Me.テキストボックス2 & ") AS A" Set cn = Application.CurrentProject.Connection rs.Open strSQL, cn, adOpenStatic, adLockReadOnly Me.テキストボックス3 = rs!A rs.Close: Set rs = Nothing: cn.Close: Set cn = Nothing

knch4736
質問者

お礼

ご教示ありがとうございます。さっそくコードを設定して実行し、取得できました。ADOについては、今ひとつ理解不足ですが、本件を参考にしたいと思います。本当にありがとうございました。

関連するQ&A

  • ACCESS Viewでユーザー定義関数を使いたい

    ACCESS2000+MSDEで開発をしていますが、Viewの中でユーザ定義関数を使用したいのですが、できません。 1> create function dbo.count1(@linkNo int) 2> returns int 3> as 4> 5> begin 6> declare @cnt int 7> 8> select @cnt = count(*) from dbo.TBL_OA where [link] = @linkNO 9> 10> return @cnt 11> end 12> go 1> select dbo.count1(100) 2> go ----------- 1 (1 件処理されました) ここまでは上手く行くのですが、 ACCESS側でViewの列へ count1(100)と記述すると 「ADOエラー:'count1'は関数名として認識されません。」 とエラーになってしまいます。 方法は問いませんが、Viewの中でユーザー定義関数が使用できる方法、ご存知の方いらっしゃいましたら、よろしくお願いします。

  • sqlserver2008 r2について

    お世話になります。 現在SQLSERVER 2008R2 とvisualbasic2010を使用し、データベースの勉強をしています。 教科書は、visualbasic2005による[実践]データベースプログラミング 谷尻かおり氏著を 使用しています。 テキストボックスに抽出条件を入れると特定のレコードを抽出したいのですが SQL Serverの抽出条件のパラメータについて分からないのでご教示願います。 教科書P47ではSQLServerの場合は「@GoodsID」とする事で、テキストボックスの 値をいれられると私は認識したのですが、うまくレコードを抽出することができません。 アクセスでは LIKE ? & '%' SQLserverでできるかなと思った私の考え LIKE @GoodsID & '%' どうすればレコードが抽出できるでしょうか? 以上よろしくお願いします。

  • ユーザ定義関数を使用して、列名を返すことは可能?

    22歳男性です。SQLServerについて質問があります。 =============================================== select * from テーブル名 where F_xxx(@a) like '%あ' ----------------------------------- create function F_xxx (@a int) returns ■■■ as begin return ( case @a when 1 then '社員ID' when 2 then '社員名' end ) end =============================================== 上記のように、ユーザ定義関数(F_xxx)を作り、特定の数値が来た場合に列名を返すプログラムを作りたいのですが、戻り値のデータ型(■■■)がわかりません。 データ型に「Column型」みたいのはあるのでしょうか? 知っている方がいましたら、教えてくださいマシ。

  • Accessのフォーム上でSQLServerのデータを更新・追加する方法

    各ユーザの入力フォームとしてのみAccessを使用し、 データベースはSQLServerという構成のツールを作ろうと考えています。 先ず、フォームにSQLServerのデータを表示し、 それを直接フォーム上で編集した結果をSQLServerに反映させたいのですが、 そのようなことは可能でしょうか? (「更新」ボタンを押すような仕様でもOK) 一つ一つの項目をテキストボックスとかに表示することはできるのですが、 データをまとめてエクセルのように一覧で表示できなくて、困っています。 よろしくお願いします。

  • SQLServer - Access開発環境

    SQLServer2008R2 ExpressのデーターベースへAccess2010を使ってアクセスし、帳票を作成する事になりました。 使用している業務パッケージがSQLServerを使っていて、それで出てこない帳票をAccessかExcelで 作るように言われました。 私は、Access同志のテーブルリンクは使った事があるのですが、SQLServerへのテーブルリンクは始めてです。SQLServerは運用のために本で勉強した程度です。 色々調べてみたのですがよくわからないので、ご存知の方お願いします。 AccessとSQLServerは同じパソコンの中に置く予定です。 業務パッケージで使っているパソコンは1日中入力に使われていて同じパソコンをAccessの開発用に使用することができません。 業務パッケージのデータベースは、オフラインバックアップしているので、Accessでの開発用の 環境に移せそうな気がしますが ODBC経由でSQLServerをテーブルリンクする場合、データソースを作る時に サーバー名とかユーザ名とかを指定するので、Accessを開発環境から運用環境に移行した時の手直しがどの程度必要なのかがよくわかりません。 現在の業務の関係上、サーバー名を同じにした環境を作成することもできません。 業務パッケージを作った所も今はもう無いし、社内に詳しい人はいないので困ってしまいました。 あまり具体的に書けずに申し訳ありませんが、 上記環境で運用環境に移行出来るものか否かと SQLServer ・ Access作成時の注意点・などありましたら教えてください。 よろしくお願いいたします。

  • パススルークエリの動的パラメータの指定方法

    SQLServer初心者です。 社内で顧客情報を管理するためAccessを使っています。 フォームを使って検索,登録等できるようにしています。 データ量が増えてきたので, テーブルのみSQLServerに移行することになりました。 ただ単にテーブルをSQLServerに移行して クエリ等はそのままで使ってみたところまったく高速化されませんでした。 Accessで行っている動作は以下です。 フォーム上に設置した検索用テキストボックスに「ヤマダ」と入力して 「検索」ボタンをクリックすると リストボックスに「ヤマダ」とつく氏名一覧が出てきて, 該当する氏名をクリックすると,右側にその人の詳細情報が表示されます。 抽出はAccessクエリで行っています。 検索用テキストボックスを使って,Accessのクエリで絞り込みをしているのですが パススルークエリを利用してSQLServer上で絞り込みをすることができるようだと 調べていて知りました。 しかしそのやり方がうまくWEBで検索できずにいます。 パススルークエリの動的パラメータの指定方法をご教授いただきたいです。 よろしくお願いいたします! 環境は以下です。 SQLServer:microsoft SQL SERVER 2008 R2 Access:Access2007 ODBCデータソースを作成してSQLServerに接続しています。

  • メッセージボックス関数の「戻り値」って?(Access2000)

    Access初心者です。 今、自分で勉強しているのですが、メッセージボックス関数の「戻り値」がよくわかりません。 引数の<msg>,<type>,<title>はそれぞれ理解ができたのですが、 戻り値の内容(1「OK」)というのは、何に対しての値なのでしょうか?? ヘルプも見ましたが、私にはさっぱりです。 どなたか簡単にご説明お願いします。

  • Accessの絞りこみについて教えて下さい。

    Access初心者です。顧客テーブルがあり、名前で絞りこみをかけたいのですが、エラーになってしまい困っています。 顧客テーブルからフォームを作り、フォームヘッダーにテキストボックスとボタンを作成しました。 絞り込みは苗字でもHITするようにし、テキストボックスには名前を入力、ボタンで絞り込みをかけるというかたちです。。 テキストボックス名は検索用、ボタンの名前は検索にしています。 そこで下記VBAコードを入力したところ、パラメータが出てきてしまい、絞り込み出来ません。 Private Sub 検索_Click() Me.RecordSource = "select * from 顧客リスト where 氏名 like ‘*" & 検索用 & "*’" End Sub どうしたらよいでしょうか? 教えて下さい。 よろしくお願いします。

  • accessをフロントエンドで使う

    お世話になります。 現在の環境は OS:Windows2000Server DB:SQLServer6.5 フロントエンド:Access2000,2003 です。これを以下の環境に移行することがきまりました。 OS:WindowsServer2008R2 DB:SQLServer2008 フロントエンド:Access2000,2003 DBは 6.5 → 2000 → 2008 と段階を踏めば、なんとかなりそうだということはわかった のですが、ストアドやビューを多用しているため懸念をして おります。 それとフロントエンドのAccessが現行のままでも使えるのか も心配です。 このあたりを調べているのですが、なかなかいい情報が 見つかっておりません。ご存知のかたがおられましたら、 書籍やホームページでもなんでもかまいませんので、 ご教示願えないでしょうか? どうかよろしくお願い申し上げます。

  • Accessクエリ・実行時の値代入

    Access2000を利用してOracleのテーブルにODBC経由で リンクし、クエリで簡単な問合せを作成しています。 クエリのデザイナの「抽出条件」の欄にパラメータの代わりに[xxx](xは任意の文字)と置くと、クエリ実行時に パラメータの入力を促すテキストボックスが表示され そこに入力した値によってクエリを実行することが可能 ですよね。 ところが、テキストボックスに値を入力して検索すると条件に合うレコードは1件も表示されず、抽出条件欄に直接リテラルとして入力すると普通にマッチし結果が表示されます。 当方もこういった現象は初めてで、しかもユーザー様の環境でのみ再現し、社内に同じmdbを持ち帰ってくるとキチンと動作するので原因を掴みかねています。 実はAccessのオプションなどで簡単に解決するのではないかとにらんでいるのですが、どなたか情報をお持ちではないでしょうか、よろしくお願いします。 ユーザーCL:WinXpPRO+Access2000(2003も) ユーザーSV:Windows2003ServerStandard+Oracle9.2 社内CL:Win2kPro+Access2000 社内SV:Win2kServer+Oracle9.2 検索対象テーブル列:文字型