![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
開発言語:VB2010
データベース:アクセス2010
VB2010でDAOを使用して、ACCDBに接続しています。
以下のテーブルに対して、SQLで、Snapshotで開いているのですが、クエリの結果とレコードセットの結果が違ってしまい困っております。
クエリだと濁点は抽出しませんが、レコードセットで開くと濁点も抽出されてしまいます。
レコードセットでもクエリと同じように濁点を拾わず抽出するにはどのようにしたらよいのでしょうか?
ご存知の方がいましたらご教授していただけるとありがたいです。
**テーブル名**
MST_得意先
*MST_得意先フリガナフィールド
1.ガイコク
2.カカシ
*参照設定
Microsoft.Office.Interop.Access
*SQL文
SELECT MST_得意先.* FROM MST_得意先 WHERE (MST_得意先.得意先フリガナ Like '*カ*');
OpenRecordset(SQL, Dao.RecordsetTypeEnum.dbOpenSnapshot)
*結果
・クエリ=2.カカシのみ抽出(濁点抽出なし)
・レコードセット=1.ガイコク、2.カカシ(濁点抽出)
No.3ベストアンサー
- 回答日時:
こんにちは。
Access内でないとできないようですね。
無理やりソースを書くしかないかと。
ひらがな、カタカナ1文字の時に有効で、
その他の文字列は、そのまま抽出できると思います。
Dim select_str As String = ""
If Len(変数) = 1 Then '変数が1文字の時
'カナに変換
Dim Kana_cng As String = StrConv(変数, VbStrConv.Katakana)
'半角カナに変換
Dim En_str As Short = System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(StrConv(Kana_cng, vbNarrow))
'半角カナ変換できた時のバイト数
If En_str = 1 Then '1バイトの時は濁点がないので、濁音を含まない処理が必要
select_str = "select * from MST_得意先 where MST_得意先.得意先フリガナ Like '*" & Kana_cng & "*'" & Sql_Str(Kana_cng)
Else '2バイト以上は完全一致できる
select_str = "select * from MST_得意先 where MST_得意先.得意先フリガナ Like '*" & 変数 & "*'"
End If
Else '変数が2文字以上
select_str = "select * from MST_得意先 where MST_得意先.得意先フリガナ Like '*" & 変数 & "*'"
End If
ここから先は、DAOのselectコマンドにセットして下さい。
Private Function Sql_Str(ByVal str As String) As String
Dim ten_str As String = ""
Dim maru_str As String = ""
Select Case str
Case "カ"
ten_str = "ガ"
Case "キ"
ten_str = "ギ"
Case "ク"
ten_str = "グ"
Case "ケ"
ten_str = "ゲ"
Case "コ"
ten_str = "ゴ"
Case "サ"
ten_str = "ザ"
Case "シ"
ten_str = "ジ"
Case "ス"
ten_str = "ズ"
Case "セ"
ten_str = "ゼ"
Case "ソ"
ten_str = "ゾ"
Case "タ"
ten_str = "ダ"
Case "チ"
ten_str = "ヂ"
Case "ツ"
ten_str = "ヅ"
Case "テ"
ten_str = "デ"
Case "ト"
ten_str = "ド"
Case "ハ"
ten_str = "バ"
maru_str = "パ"
Case "ヒ"
ten_str = "ビ"
maru_str = "ピ"
Case "フ"
ten_str = "ブ"
maru_str = "プ"
Case "ヘ"
ten_str = "ベ"
maru_str = "ペ"
Case "ホ"
ten_str = "ボ"
maru_str = "ポ"
End Select
If ten_str = "" Then '濁音、半濁音がないものは何もしない
Return ""
Else
If maru_str = "" Then '濁音あり、半濁音なし
Return " and MST_得意先.得意先フリガナ Not Like '*" & ten_str & "*'"
Else 'は行は、ば行とぱ行があるので含まない処理追加
Return " and MST_得意先.得意先フリガナ Not Like '*" & ten_str & "*' and MST_得意先.得意先フリガナ Not Like '*" & maru_str & "*'"
End If
End If
End Function
もっと簡単な方法があるかもですが。。。
ご回答ありがとうございます。
希望通りのものができました。
いろいろご教示していただきありがとございました。
しかし、同じMS商品なのに、アクセスとVBで違いがでるとは。。
No.2
- 回答日時:
こんにちは。
半濁点も追加します。
SELECT MST_得意先.* FROM MST_得意先 WHERE InStr(StrConv(MST_得意先.得意先フリガナ,4),'゛')=0 and InStr(StrConv(MST_得意先.得意先フリガナ,4),'゜')=0
文字列を全角にしているので大丈夫かと。
この回答への補足
いろいろ試してみたところ、2文字以上はLike演算子で正常に動作するようです。
1文字で濁点・半濁点なしの文字の場合(静音)のみ、濁点や半濁点を抽出してしまうようです。
ご教示していただいた方法ですと、濁点・半濁点をのぞく全てのレコードを抽出してしまいます。
大変お手数ですが、指定した文字だけの部分一致を抽出する方法をご教示していただけるとありがたいです。
返事が遅くなり申し訳ありません。
さらに私の説明不足だったようで、検索部分は変数で持ち、Like演算子をしようして部分一致検索をしようと思っています。
よって濁点、半濁点がついた文字列も検索対象になる場合があります。(例:「*ガ*」という文字列を検索するときもあり、「*カ*」という文字列を検索する時もます。)
現在の私のSQL文ですと「*ガ*」を検索した時は正常に抽出されますが、「*カ*」を検索した時は、「*カ*」+「*ガ*」が抽出されてしまいます。
私の説明不足と勉強不足で申し訳ないのですが、ご教示していただいたSQL文ですと、濁点+半濁点を除いた形での抽出方法になると思われます。
No.1
- 回答日時:
こんにちは。
これとか。
SELECT MST_得意先.* FROM MST_得意先 WHERE InStr(StrConv(MST_得意先.得意先フリガナ,4),'゛')=0
この回答への補足
本日会社に戻りまして、処理を実行しました。
結果、濁点は取り除かれて抽出されました。
ありがとうございます。
しかしながら私の説明不足でして、申し訳ないのですが、濁点と半濁点も含む文字等も(例:パタゴニア等)検索する予定です。そのような場合はかなり長いコードを書かないといけないような気がします。
そもそもなぜクエリとレコードセットに違いがあるのでしょうか・・・
何かいい解決案があればよいのですが。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Access(アクセス) Accessクエリで年月フィールドを年のみで抽出する方法について 2 2022/08/29 18:10
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javaで質問です。 文字列2023/2...
-
Path型をString型へ変換する(Java)
-
カタカナをローマジに変換する。
-
ダブルクォーテーションのrepla...
-
C言語32bitから64bitの移行につ...
-
javascriptで文字列のsjis利用...
-
int型のゼロ埋め
-
Visual Basic でのコードをASCI...
-
半角カナ文字の変換
-
substring バイト単位でやりたい
-
Java ストリームでの文字列の...
-
error C2440: 'static_cast' : ...
-
文字コード変換
-
カタカナの「ソ」以降の文字が...
-
なぜか + が半角スペースに変換...
-
DBから取得したデータの文字化け
-
CStringをLPCTSTRへ変換
-
全角英数字とハイフンを半角に...
-
byte[] を long,float とかに...
-
JavaのObjectからintへの型変換...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
javaで質問です。 文字列2023/2...
-
ダブルクォーテーションのrepla...
-
Path型をString型へ変換する(Java)
-
int型のゼロ埋め
-
javascriptで文字列のsjis利用...
-
Visual Basic でのコードをASCI...
-
カタカナをローマジに変換する。
-
C言語32bitから64bitの移行につ...
-
UTF-8とUnicodeの互換性
-
エクセルVBAで「〜」が表現でき...
-
JavaのStringクラスに「外字」...
-
substring バイト単位でやりたい
-
TEXTAREAからのデータを改行入...
-
javaで「全角が含まれているか...
-
javaの初歩的な質問です。
-
byte[] を long,float とかに...
-
Windows-31Jからutf-8への変換...
-
COBOLで半角カナを全角カナに変換
-
文字列の比較
-
IBM漢字コード⇒SJIS変換方法
おすすめ情報