Microsoft Access 掲示板

UPDATEする度にレコードが消えてしまいます / 6

33 コメント
views
4 フォロー
6
通報 ...
  • 7
    • ハイパーリンク型の実体とは、「ハイパーリンク属性を付与されたメモ型(長いテキスト)」である。

    • ハイパーリンク型の内部処理上の値は、"#" をセクション区切り記号(囲み記号ではない)とした最大4つのセクションで構成された文字列である。

    表示テキスト#ハイパーリンクアドレス#サブアドレス#ヒントテキスト
    

    画像1

    • 仮に[txt_詳細リンク]および[txt_クレーム詳細リンク]が共にハイパーリンク型のフィールドをコントロールソースとする連結テキストボックスであるとした場合、そのフィールドの値を"#"で囲む(厳密には「先頭に"#"を挿入する」)という操作は、ハイパーリンクの各セクションを1つ右のセクションにずらすことと同義である。

    • したがって、件の UPDATE 文が繰り返し実行されれば、やがてハイパーリンクの表示テキスト、ハイパーリンクアドレス、サブアドレスが全て空の状態となり、表示上は「パスが消えてしまう」かのように見えてしまうことになる。

  • 8

    また、[txt_詳細リンク]および[txt_クレーム詳細リンク]が連結テキストボックスではなく非連結テキストボックスであるならば、INSERT INTO ... VALUES ... 文の実行結果も適切ではない可能性があります。

    "#"で区切られていない文字列をそのまま代入しているなら、ハイパーリンクの構文上においては「表示テキストのみが設定されている(ハイパーリンクアドレスが2番目ではなく1番目のセクションに入っている)」状態になっているはず。

  • 9

    質問文より

    サブフォームにある"T_特記事項"と"T_クレーム履歴"には、それぞれ10個のテキストボックスがあって、
    そこにPC上の関連ファイルのパスを入力して、ハイパーリンク型フィールド"特記事項詳細"と"クレーム詳細"に
    UPDATEをしたいのですが、

    このテキストボックスがハイパーリンク型フィールドとの連結コントロールだとしたらskさんの通りですね。

    私としては、
    1から10の連番の付加された10個のテキストボックスである、
    SQLでは追加するテーブル側のフィールドは一つである、
    ということからこのテキストボックスは非連結コントロールだろうと推測してます。

    「サブフォームにある"T_特記事項"と"T_クレーム履歴"には」という表現が連結フォームを連想させるのが紛らわしいですが。

  • 10

    1から10の連番の付加された10個のテキストボックスである、
    SQLでは追加するテーブル側のフィールドは一つである、
    ということからこのテキストボックスは非連結コントロールだろうと推測してます。

    連結テキストボックスであれ非連結テキストボックスであれ、(ハイパーリンクの構文規則を無視して)無条件で「"#"で区切られた文字列」を更に"#"で囲んだ結果に更新する処理を繰り返し実行すれば、同様の結果がもたらされることは明白です。

    もし非連結テキストボックスであるならば、恐らくそれらのテキストボックスの[ハイパーリンクあり]プロパティを「はい」、[ハイパーリンクとして表示]プロパティを「ハイパーリンクである場合」か「常にハイパーリンクにする」に設定されているだと思われますが、そのテキストボックスに"###https://zawazawa.jp/ms-access/###"のような文字列を代入すれば、画面表示上は「何も表示されていない」状態となるでしょう。

  • 11
    hatena 2024/01/31 (水) 16:08:24 修正 >> 6

    INSERT INTO の方は見落としてました。

    どちらにしても、連結なのか、非連結なのか、
    非連結ならハイパーリンクの設定がどうなっているのか、
    まずはそれを明確にしてもらうのが先決ですね。

  • 12

    コードをどのように修正するかはともかくとして、テーブル[T_特記事項]のフィールド[特記事項詳細]、およびテーブル[T_クレーム履歴]のフィールド[クレーム詳細]の値が、現時点においてどのように格納されているのかについても、併せて確認された方がよいでしょう。

    既に誤った形式のハイパーリンクが格納されてしまっているでしょうから、それらを修正する必要があります。

    SELECT [T_特記事項].[ID], 
           [T_特記事項].[特記事項詳細], 
           PlainText([T_特記事項].[特記事項詳細]) AS [特記事項詳細の内部処理上の値] 
    FROM [T_特記事項] 
    ORDER BY [T_特記事項].[ID];
    
    SELECT [T_クレーム履歴].[ID], 
           [T_クレーム履歴].[クレーム詳細], 
           PlainText([T_クレーム履歴].[クレーム詳細]) AS [クレーム詳細の内部処理上の値] 
    FROM [T_クレーム履歴] 
    ORDER BY [T_クレーム履歴].[ID];