突然、ひらかなの濁点で検索できなくなった への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 shu  (社会人)
投稿日時
2021/4/23 14:41:33
Accessが問題なのではないです。
上記コードを実行するとrowsに戻ってくるのは2番目の全角に変換した方だけと
なります。
これはWindowsUpdateによるWindows自体の不具合となります。
Dim tbl As New DataTable()
tbl.Columns.Add("Furi")
tbl.Rows.Add("ヤマダ ゴロウ")
tbl.Rows.Add(StrConv("ヤマダ ゴロウ", vbWide))
Dim rows = tbl.Select("Furi Like 'やまだ%'")
上記コードを実行するとrowsに戻ってくるのは2番目の全角に変換した方だけと
なります。
これはWindowsUpdateによるWindows自体の不具合となります。
投稿者 shu  (社会人)
投稿日時
2021/4/23 14:27:41
row("検索文字列") &= " " & row("カナ")
これを
row("検索文字列") &= StrConv(" " & row("カナ"), vbWide)
としてみてはどうでしょうか?
これを
row("検索文字列") &= StrConv(" " & row("カナ"), vbWide)
としてみてはどうでしょうか?
投稿者 hori  (社会人)
投稿日時
2021/4/23 13:14:45
フォームにテキストボックスとデータグリッドビューを貼り付け、以下のコードを書きました。
=======================================================================
Imports System.Data.OleDb
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim Cn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\DT\試作\TEST.accdb")
Dim SQLCm As OleDbCommand = Cn.CreateCommand
Dim Adapter As New OleDbDataAdapter(SQLCm)
Dim Table As New DataTable
SQLCm.CommandText = "SELECT * FROM TBL"
Try
Adapter.Fill(Table)
Catch ex As Exception
End Try
Table.Columns.Add("検索文字列", GetType(String))
For Each row As DataRow In Table.Rows
row("検索文字列") = row("名前")
row("検索文字列") &= " " & row("カナ")
Next
DataGridView1.DataSource = Table
DataGridView1.ReadOnly = True
Table.Dispose()
Adapter.Dispose()
SQLCm.Dispose()
Cn.Dispose()
End Sub
Private Sub TextBox1_PreviewKeyDown(sender As Object, e As PreviewKeyDownEventArgs) Handles TextBox1.PreviewKeyDown
If e.KeyCode = Keys.Tab Then
Dim Table As DataTable = DirectCast(DataGridView1.DataSource, DataTable)
Dim View As DataView = Table.DefaultView
View.RowFilter = "検索文字列 LIKE '%" & TextBox1.Text & "%'"
End If
End Sub
End Class
===============================================================================
データベース TEST の中身は
山田太郎 / ヤマダ タロウ
山口忠夫 / ヤマグチ タダオ
鈴木花子 / スズキ ハナコ
にしました。
[やま]で、山田太郎と山口忠夫がヒットしますが
[やまだ]では何もヒットせず
[やまた゛]で山田がヒットします。
今までは、[やまだ]で山田がヒットしていました。
僕の環境は、Windows 10 20H2、
.NET Framework 4.8 の May 2020 版のようです。
Access の何かが変わったのでしょうか?
このままでは、結構不便です。
=======================================================================
Imports System.Data.OleDb
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim Cn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\DT\試作\TEST.accdb")
Dim SQLCm As OleDbCommand = Cn.CreateCommand
Dim Adapter As New OleDbDataAdapter(SQLCm)
Dim Table As New DataTable
SQLCm.CommandText = "SELECT * FROM TBL"
Try
Adapter.Fill(Table)
Catch ex As Exception
End Try
Table.Columns.Add("検索文字列", GetType(String))
For Each row As DataRow In Table.Rows
row("検索文字列") = row("名前")
row("検索文字列") &= " " & row("カナ")
Next
DataGridView1.DataSource = Table
DataGridView1.ReadOnly = True
Table.Dispose()
Adapter.Dispose()
SQLCm.Dispose()
Cn.Dispose()
End Sub
Private Sub TextBox1_PreviewKeyDown(sender As Object, e As PreviewKeyDownEventArgs) Handles TextBox1.PreviewKeyDown
If e.KeyCode = Keys.Tab Then
Dim Table As DataTable = DirectCast(DataGridView1.DataSource, DataTable)
Dim View As DataView = Table.DefaultView
View.RowFilter = "検索文字列 LIKE '%" & TextBox1.Text & "%'"
End If
End Sub
End Class
===============================================================================
データベース TEST の中身は
山田太郎 / ヤマダ タロウ
山口忠夫 / ヤマグチ タダオ
鈴木花子 / スズキ ハナコ
にしました。
[やま]で、山田太郎と山口忠夫がヒットしますが
[やまだ]では何もヒットせず
[やまた゛]で山田がヒットします。
今までは、[やまだ]で山田がヒットしていました。
僕の環境は、Windows 10 20H2、
.NET Framework 4.8 の May 2020 版のようです。
Access の何かが変わったのでしょうか?
このままでは、結構不便です。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2021/4/23 01:01:06
> Windows の自動更新が勝手に行われてからのように思うのですが
自分は、半角カナの問題を聞いたことがあるという程度ですね…。
https://twitter.com/Benshi_Orator/status/1326689347127500800
https://social.msdn.microsoft.com/Forums/ja-JP/4e6223e2-34d0-4a5f-bb61-109bc28040b6/windows-10-1249612540124721251912531-2004-20h1-20h2-1997812391
> とした検索処理で、例えば、これまで「やまだ」で検索できていたものが
手元の環境ではこんな結果になりました。
Windows 10 20H2、.NET Framework 4.8 です。
ただし、対象の .NET Framwork を 4.8 から 3.5 に変更すると動作が変わり、
RadioButton1~5 のいずれのケースにおいても、
"やまだたろう" と "やまた゛はなたろう" の両方が表示されました。
自分は、半角カナの問題を聞いたことがあるという程度ですね…。
https://twitter.com/Benshi_Orator/status/1326689347127500800
https://social.msdn.microsoft.com/Forums/ja-JP/4e6223e2-34d0-4a5f-bb61-109bc28040b6/windows-10-1249612540124721251912531-2004-20h1-20h2-1997812391
> とした検索処理で、例えば、これまで「やまだ」で検索できていたものが
手元の環境ではこんな結果になりました。
Windows 10 20H2、.NET Framework 4.8 です。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim tbl As New DataTable() With {.CaseSensitive = True}
tbl.Columns.Add("ID").AutoIncrement = True
tbl.Columns.Add("名前").AllowDBNull = False
tbl.PrimaryKey = New DataColumn() {tbl.Columns("ID")}
For Each nm In New String() {"やまだたろう", "やまた゛はなたろう"}
Dim r = tbl.NewRow()
r.SetField(Of String)("名前", nm)
tbl.Rows.Add(r)
Next
tbl.AcceptChanges()
If RadioButton1.Checked Then
' "やまだたろう" と "やまた゛はなたろう"
tbl.DefaultView.RowFilter = Nothing
ElseIf RadioButton2.Checked Then
' "やまだたろう" のみ
tbl.DefaultView.RowFilter = "名前 LIKE '%やまだ%'" ' U+3060「だ」
ElseIf RadioButton3.Checked Then
' "やまた゛はなたろう" のみ
tbl.DefaultView.RowFilter = "名前 LIKE '%やまだ%'" ' U+305F U+3099「だ」
ElseIf RadioButton4.Checked Then
' "やまた゛はなたろう" のみ
tbl.DefaultView.RowFilter = "名前 LIKE '%やまた゛%'" ' U+305F U+309B「た゛」
ElseIf RadioButton5.Checked Then
' "やまた゛はなたろう" のみ
tbl.DefaultView.RowFilter = "名前 LIKE '%やまだ%'" ' U+305F U+FF9E「だ」
End If
DataGridView1.DataSource = tbl
End Sub
ただし、対象の .NET Framwork を 4.8 から 3.5 に変更すると動作が変わり、
RadioButton1~5 のいずれのケースにおいても、
"やまだたろう" と "やまた゛はなたろう" の両方が表示されました。
投稿者 hori  (社会人)
投稿日時
2021/4/22 23:13:43
Win10 VS2019 の VB でフォームアプリを書いていますが
Dim Table As DataTable = DirectCast(DataGridView1.DataSource, DataTable)
Dim View As DataView = Table.DefaultView
View.RowFilter = "検索文字列 LIKE '%" & TBx検索文字列.Text & "%'"
とした検索処理で、例えば、これまで「やまだ」で検索できていたものが
「やまた゛」=「やまた」+「゛」としなければ検索できなくなりました。
Windows の自動更新が勝手に行われてからのように思うのですが
対処方法をご存知の方居られましたら、ご教示ください。よろしくお願いいたします。
Dim Table As DataTable = DirectCast(DataGridView1.DataSource, DataTable)
Dim View As DataView = Table.DefaultView
View.RowFilter = "検索文字列 LIKE '%" & TBx検索文字列.Text & "%'"
とした検索処理で、例えば、これまで「やまだ」で検索できていたものが
「やまた゛」=「やまた」+「゛」としなければ検索できなくなりました。
Windows の自動更新が勝手に行われてからのように思うのですが
対処方法をご存知の方居られましたら、ご教示ください。よろしくお願いいたします。
新しいOSをリリースするまで、この問題が修正されることは無さそうなので
shuさまのお示しくださった解決方法がベストのように思われます。
『俺が悪いんかい?』と云う忸怩たるものもありますが
どのアップデートが問題なのか探し出す手間より
自分の書いたものに少し手を加える事の方がはるかに楽でしょうね。
まぁ、世の中ってこんなものなのでしょう。
そんなわけで、解決とさせていただきます。ありがとうございました。