sk
2024/01/31 (水) 10:19:46
679c7@fc3ed
ハイパーリンク型フィールド"特記事項詳細"と"クレーム詳細"に
UPDATEをしたいのですが、更新の度に直前にUPDATEしたパスが消えてしまう
"特記事項詳細 = '#" & Replace(Me("txt_詳細リンク" & R).Value, """", "") & "#' "
"クレーム詳細 = '#" & Replace(Me("txt_クレーム詳細リンク" & Z).Value, """", "") & "#' "
"#"で囲っているのが余計だからでしょう。
通報 ...
ハイパーリンク型フィールドのURLは"#"で囲むのが仕様だと思います。
Access Tips #526 ハイパーリンク型フィールドにSQLでデータを保存するには? | T'sWare
Application.HyperlinkPart メソッド (Access) | Microsoft Learn
ハイパーリンク型の実体とは、「ハイパーリンク属性を付与されたメモ型(長いテキスト)」である。
ハイパーリンク型の内部処理上の値は、"#" をセクション区切り記号(囲み記号ではない)とした最大4つのセクションで構成された文字列である。
仮に[txt_詳細リンク]および[txt_クレーム詳細リンク]が共にハイパーリンク型のフィールドをコントロールソースとする連結テキストボックスであるとした場合、そのフィールドの値を"#"で囲む(厳密には「先頭に"#"を挿入する」)という操作は、ハイパーリンクの各セクションを1つ右のセクションにずらすことと同義である。
したがって、件の UPDATE 文が繰り返し実行されれば、やがてハイパーリンクの表示テキスト、ハイパーリンクアドレス、サブアドレスが全て空の状態となり、表示上は「パスが消えてしまう」かのように見えてしまうことになる。
また、[txt_詳細リンク]および[txt_クレーム詳細リンク]が連結テキストボックスではなく非連結テキストボックスであるならば、INSERT INTO ... VALUES ... 文の実行結果も適切ではない可能性があります。
"#"で区切られていない文字列をそのまま代入しているなら、ハイパーリンクの構文上においては「表示テキストのみが設定されている(ハイパーリンクアドレスが2番目ではなく1番目のセクションに入っている)」状態になっているはず。
質問文より
このテキストボックスがハイパーリンク型フィールドとの連結コントロールだとしたらskさんの通りですね。
私としては、
1から10の連番の付加された10個のテキストボックスである、
SQLでは追加するテーブル側のフィールドは一つである、
ということからこのテキストボックスは非連結コントロールだろうと推測してます。
「サブフォームにある"T_特記事項"と"T_クレーム履歴"には」という表現が連結フォームを連想させるのが紛らわしいですが。
連結テキストボックスであれ非連結テキストボックスであれ、(ハイパーリンクの構文規則を無視して)無条件で「"#"で区切られた文字列」を更に"#"で囲んだ結果に更新する処理を繰り返し実行すれば、同様の結果がもたらされることは明白です。
もし非連結テキストボックスであるならば、恐らくそれらのテキストボックスの[ハイパーリンクあり]プロパティを「はい」、[ハイパーリンクとして表示]プロパティを「ハイパーリンクである場合」か「常にハイパーリンクにする」に設定されているだと思われますが、そのテキストボックスに"
###https://zawazawa.jp/ms-access/###
"のような文字列を代入すれば、画面表示上は「何も表示されていない」状態となるでしょう。INSERT INTO の方は見落としてました。
どちらにしても、連結なのか、非連結なのか、
非連結ならハイパーリンクの設定がどうなっているのか、
まずはそれを明確にしてもらうのが先決ですね。
コードをどのように修正するかはともかくとして、テーブル[T_特記事項]のフィールド[特記事項詳細]、およびテーブル[T_クレーム履歴]のフィールド[クレーム詳細]の値が、現時点においてどのように格納されているのかについても、併せて確認された方がよいでしょう。
既に誤った形式のハイパーリンクが格納されてしまっているでしょうから、それらを修正する必要があります。