SQL中の自作関数
次のような自作関数があって都道府県別に連番を取得しようと思います。
ADOとADO.NETでやってみるのですがADOだと正常に関数で処理されますが
ADO.NETの方は 実行時に "式に未定義関数'Get_Pref_Code'" があります、
とエラーになります。
ADO.NETの方は何がマズいのでしょうか?
Function Get_Pref_Code(ByVal Pref As String) As String
Dim RT As String
Select Case Pref
Case "北海道" : RT = "01"
Case "青森県" : RT = "02"
Case "岩手県" : RT = "03"
Case "宮城県" : RT = "04"
Case "秋田県" : RT = "05"
Case "山形県" : RT = "06"
Case "福島県" : RT = "07"
Case "茨城県" : RT = "08"
End Select
Get_Pref_Code = RT
End Function
ADO/ACCESS2002の場合:
mySQL = "UPDATE KEN_ALL SET KEN_ALL.Pref_Code = Get_Pref_Code([Pref])"
myCon.Execute mySQL
ADO.NET/VB2005の場合:
mySQL = "UPDATE KEN_ALL SET KEN_ALL.Pref_Code = Get_Pref_Code([Pref])"
myCmd = New OleDb.OleDbCommand(mySQL, myCon)
myCmd.ExecuteNonQuery()
テーブル名=KEN_ALL
更新フィールド=Pref_Code
評価フィールド=Pref
No.1ベストアンサー
- 回答日時:
今回質問者さんは、
「ADO.NETだと自作の関数を組み込んだSQL文が発行できない」
ということですが、
私もADO.NETに自作関数を組み込んだSQLを発行しようとしたことがあります。
実現できなかったので、クエリ化したりして対応をいたしました。
そこで、
「テーブルに存在する都道府県をID化するSQL文を発行したい」
というのであれば、関数から値を引っ張るのではなく、マスタテーブルを参照させて、それから値を引っ張るという方法があります。
むしろその方が、今後の事を考えると、良いと思います。
まず
※1.[都道府県マスタ]テーブルを作成
カラム1:都道府県[テキスト型] ←主キー
カラム2:Pref_Code[テキスト型]
続いて、
※2.[]テーブルをにデータを入力
[都道府県][Pref_Code]
北海道 01
青森県 02
岩手県 03
宮城県 04
秋田県 05
山形県 06
福島県 07
茨城県 08
・・・・・・・・・・
って感じ
それから
※3.以下のSQL文を発行
UPDATE KEN_ALL LEFT JOIN 都道府県マスタ ON KEN_ALL.Pref = 都道府県マスタ.都道府県
SET KEN_ALL.Pref_Code = [都道府県マスタ].[Pref_Code]
やっぱり、自作関数はダメですか・・
ADO.NetでダメというよりVB2005ではダメって感じですね。
VB2005上のADOでもやってみたのですが、怒られました。
No.2
- 回答日時:
ちょっと気になるのですがAC2002で動いていると言う
mySQL = "UPDATE KEN_ALL SET KEN_ALL.Pref_Code = Get_Pref_Code([Pref])"...は
mySQL = "UPDATE KEN_ALL SET KEN_ALL.Pref_Code = " & Get_Pref_Code(Pref)
ではないのですか?
この回答への補足
>mySQL = "UPDATE KEN_ALL SET KEN_ALL.Pref_Code = " & Get_Pref_Code(Pref)
ではないのですか?
これだとSQLの実行時でなくてSQLの作成時に関数が評価されてしまいますね。また、[Pref]はフィールで名であって、変数名じゃないので・・・・エラーになります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript WordPressのコンタクトフォーム7にて送信者の位置情報を送らせたい 2 2022/09/14 23:28
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Visual Basic(VBA) 先ほど、回答者様によって教えていただいたのですがどうしたらいいか分かりません。 ユーザーフォーム上に 2 2023/02/21 22:25
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- その他(プログラミング・Web制作) Rでのスクリプトのご相談 3 2022/12/08 16:22
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) select caseの入れ子 3 2023/03/08 18:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS DCOUNTの抽出条件について
-
ACCESS VBAでテーブル内の特定...
-
Access vbaで重複レコードの削...
-
データがあれば○○なければのSQL
-
ACCESSで購入回数を表示する方...
-
重複した複数のレコードを1レ...
-
アクセスで定数を利用したい。
-
DAOでSQLServerに接続し、LeftJ...
-
SQLServer→Access インポート
-
VBAでテーブル名とカラム名を動...
-
ADOでAccessファイルに接続して...
-
別のaccessファイルからデータ...
-
「ご処理進めて頂きますようお...
-
CloseとDisposeの違い
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
VBA エンターキーでイベントに...
-
エクセルVBAで、MsgBox やInput...
-
Excelで、ボタンにコメントをつ...
-
「PC Helpsoft Driver Updated...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データがあれば○○なければのSQL
-
ACCESS DCOUNTの抽出条件について
-
ACCESS VBAでテーブル内の特定...
-
【access】複数のフィールドの...
-
Accessで縦と横を入れ替えたい
-
Access vbaで重複レコードの削...
-
抽出条件でデータ型が一致しま...
-
SQLServer→Access インポート
-
別のaccessファイルからデータ...
-
sql文で削除クエリを書く
-
ACCESSで購入回数を表示する方...
-
Accessリンクするテーブルが見...
-
DAOでSQLServerに接続し、LeftJ...
-
アクセスで定数を利用したい。
-
access vbaで前景色を指定したい
-
VBAでテーブル名とカラム名を動...
-
access追加クエリーでform入力...
-
ACCESSのクエリ、SQLに変数を使...
-
Access BetweenとLikeの組み合...
-
【PHP/MySQL】コード上で生成...
おすすめ情報