カテゴリー: スタッフの日記

テーマを選ばない自由な記事

  • canvasについて

    HTML5のcanvasについて調べてみました。

    それで、やあっとこんなことができるようになりました。

    上の枠内で、マウスのボタンを押しながら、マウスを動かしてみてください。 をクリックしてからやると、色が付きます。

    次に、詰将棋とかをやってみようと思い、絵は描くことができました。しかし、今回は、動作は断念しました。だから下図で「金」をドラッグしても、何も出ません。

    いろいろ研究してみれば、もっといろんなことができそうです。

    ただ、いちいち script を書かないといけないのが、ちょっと煩わしいです。

     

  • 「ャtト」って、こういうことだったんだ

     ネット上で時々見る意味不明の言葉「ャtト」について、ひょんなことから判明したので、ここに記しておくことにします。

     まず、その「ひょんなこと」について。
     現在開発中のシステムで、「予算実績管理表」というものをpdf出力するテストを行いました。ファイル名は、“予算実績管理表_~.pdf”としたつもりでした(「~」の部分は補足情報)。ところが、“落Z実績管理廟~.pdf”なるファイルができてしまいました。“予”が“落”、“算”が“Z”、“表_”が“廟”に文字化けしてしまった形です。
     ネットを探しても、対処方法が分からず、文字の順序を変えたり、前後に他の文字を入れたりすると、ということをいろいろ試してみて、ついに、“予”の後ろと“表”の後ろに“\”を入れると、期待した正しいファイル名になることが判明しました。

     「文字“表”の後ろに“\”」で、思い出したことがあります。
     かなり昔、ソースプログラムの“表”という文字の後ろには“\”を付けないと、文字化けしたり、コンパイルエラーになってしまったりというコンパイラがありました。
     これは、“表”という文字のShift-JISでのコードが「955c(16進表示)」で、2バイト目が「5c」つまり“\”と同じなので、エスケープ文字(“\n”(改行)などとして使われるもの)と判断されてしまうからです。そこで、“\”+「文字」の機能の一つである、「“\\”が“\”という文字1文字を表す」ということを利用します。つまり、“表”という文字の2バイト目がエスケープ文字の“\”、その後ろにさらに“\”を付けることによって、“\\”となり、「“\”という文字1文字」となって、最終的に“表\”は“表”となり、また、後続の文字もちゃんと正しく処理される訳です。

     そこで、“予”についても、2バイト目が「5c」なのではないかと調べました。その通りでした。
     さらに、2バイト目が「5c」のものを探してみると、“ソ”(835c)がありました。
     もし、“ソ”についても同様の文字化けが起き、“\”を付けると文字化けしないなら、文字化けの原因はこれであり、他の文字も、2バイト目が“\”だったらその後ろに“\”を追加することで、文字化けを防ぐことができると考えられます。
     そして、“ソ”を含む文字列として、“ソフトウェア”を用いることにして、実験。

     その実験結果のファイル名を見て、声を上げてしまいました。
     実験が成功したからでも、失敗したからでもありません。
     “ャtトウェア”となったからです(“ャ”は小さいカタカナ、拗音)。
     この、あちこちのサイトで見かける意味不明な文字列。ファイルをダウンロードするとファイル名中に見られることのある意味不明な文字列。ついに、その意味が、分かったからです。

     “ソ”は「835c」、“フ”は「8374」、「5c」がエスケープ文字“\”とみなされると、次の文字「83」あるいは「8374」は“\n”とかの“\”と組み合わせて特別な意味になる文字でないので、この“\”は無視されてしまい、「83 83 74」となります。「8383」は“ャ”、「74」は“t”なので、結果として、“ャtトウェア”となる訳です。

     おまけ。
     今回のきっかけとなった“予算”と“表_”については、
       予=975c、算=8e5a、結果として「97 8e 5a」=落Z
       表=955c、_=5f、結果として「95 5f」=廟
    となってしまっていました。
     対処としては、

      $fileName = mb_convert_encoding($fileName, "SJIS-WIN");

      header('Content-Disposition: attachment;filename="'.$fileName.'"');

    の間に、

      $fileName = str_replace('\\', '\\\\', $fileName);

    を入れました。“'\\'”とあるのは、“\”1つの意味。“'\'”としてしまうと“'”の意味になってしまいます。

  • 注意!「Amazonセキュリティ警告:サインインが検出されました」 というフィッシング詐欺メールの見分け方【迷惑メール】

    はじめに
     最近、Amazonの注意喚起メールを装ったフィッシング詐欺メールが届きました。
     本家Amazonがセキュリティ対策として同様のメールを配信しており、文面も一瞬見ただけでは信じて誘導されてしまいそうでした。騙されない為に、見分け方を紹介します。
     
    ■見分け方■
     以下、
      1が手っ取り早く確実な確認方法です。
      2から5は、偽装できてしまう情報もあるので全部を確認してから判断します。
      ご参考まで。
      
     なお、本物例)、偽物例)は自分のところに届いたメールから抜き出した情報です。
      
    1.Amazonのアカウントサービスをチェック
      届いた怪しいメールはとりあえず放置します。
      Amazonのアカウントサービスで、Amazonが送信したメールを確認する事が出来ます。
       
      [操作]
      ・Amazonにログイン
      ・[画面右上]-[アカウント&リスト]-[アカウントサービス]と操作
      ・アカウントサービス画面の中に、「Eメールとメッセージ」枠欄があります。
       その中の「メッセージセンター」をクリック
      ・[アカウントサービス>メッセージセンター]画面でメールに該当するメッセージがあるか確認
         

    メッセージセンター画像
    メッセージセンター画像

         
     ここで該当メールが無ければ、フィッシング詐欺メールです。
     なお本当に送られてきたメールで、しかも覚えのないサインイン履歴であったなら、きちんと対応しましょう。
      
      
    2.差出人メールアドレス(ヘッダー情報:From)
      ぱっと見はAmazonですが、よく見ると違います。
      同じでも、ここは簡単に偽装できてしまうので、これだけで判断するのは危険。

          偽物例)   Amazon.co.jp<helpdesc1801@lojasapatos.com.br>
          本物例)   Amazon<account-update@amazon.com>
         

     
    3.経由したメールサーバー (ヘッダー情報:Received)
     経由したメールサーバーで、メール配送経路を把握する事が出来ます。メール中継サーバ(MTA)が複数あれば
    その数だけReceived情報があります。 配送経路は下にあるReceivedほど古く、一番下にあるReceivedが差出人側のメールサーバーが付けた情報になります。 ここでFromのアドレスがAmazonのドメイン名でなければ怪しいと判断。ドメイン表示が無い場合なら、そのIPアドレスをネットで検索しましょう。  この例では、偽物は日本のどこかから発信されたようです。
      以下、Receivedだけ抜粋。
         
          偽物例)
       
    Received 詐欺メール例
    Received 詐欺メール例
      
         
          本物例)
         
    Received 本物メール例
    Received 本物メール例

         

    4.送信ドメイン認証の署名確認 (ヘッダー情報:DKIM-Signature)
     AmazonぐらいになるとDKIM(DomainKeys Identified Mail)による送信者認証のための電子署名を付けています。これが無ければ、怪しいと判断。

          偽物例)無し
         
         
          本物例)
         
    送信ドメイン認証の署名確認 (DKIM-Signature)
    送信ドメイン認証の署名確認 (DKIM-Signature)

         
    5.本文
     まず偽物は、宛名表示がありません。本物はアカウント情報を把握している為、○○様とあります。但し、アカウント情報が漏洩していれば、偽装は容易。後は全体的に文章に違和感があります。句読点など、何となくおかしい。
        
      
          偽物例)
      
    詐欺メール本文
    詐欺メール本文
       

         
          本物例)
            
     
    本物メール本文
    本物メール本文
       
     
     
    おわりに
     年々フィッシング詐欺メールが巧妙になってきていますね。標的型攻撃メールも見破る事が難しくなってきています。重要なメールには電子署名が必須ですね。
     
     自分は信頼できるメールであっても原則としてメール本文のリンク、ボタンは踏まない事にしています。そもそも、普段からメール本文はHTML表示しません(Webビーコン対策)。
     
     なのですが・・・・
     こんな事を書いている自分が、メールのやり取りの中でリンク先を張り付けたり、平気でファイルを添付してしまう。相手にはソーシャルエンジニアリングに注意しましょうといいながら、自分のメールは大丈夫だからと説明してしまう。こういうところは正さないといけません。
     
     在宅ワークの流れがあります。これからどんどん広がるでしょう。メールは電子署名は必須になるのでしょうか。今後もメールに限らず情報の伝達にはこうしたリスクが付きまといます。システムで防ぐ事は限られるので結局最後は気を付けましょう、という事になります。難しいなあ。
  • Windows Updateによってaccdbのクエリ―がエラー。MS-ACCESSをダウングレードして対応する。

     またしてもWindows Updateがやらかしてくれました。
    対応方法として、該当するKBnnnnnnnnをアンインストールすれば良いのですが、
    MS-ACCESSの場合、少し操作方法が違っていたので備忘録として載せておきます。
     
     
    ■不具合
     昨日まで動いていたMS-ACCESSのaccdbシステムが、次のようなエラーを検知して動かなくなった。
     
     "エラーが発生しました''クエリ―が破損しています"
      
     もちろんaccdbは変更して無いので、これはもうPCの別ソフトウエアの変化による不具合だろうと・・・
      
    ■対応
     この対応方法として、PCに適用されている以下のWindows Update更新プログラムをアンインストールする、という情報がありました。
      [Officeのバージョンに合わせて下記の更新プログラムをアンインストールする]
      ・Office 2016
        KB4484113
        KB4484148
      ・Office 2013
        KB4484119
        KB4484152
      ・Office 2010
        KB4484127
        KB4484160
        
     さっそく自分のPCで該当の更新プログラムをアンインストールしようとしたが、見当たらない!
    該当のKBが更新プログラム一覧に出てこない!
    どうやら、MS-ACCESSの自動更新機能によってアップデートされているPCの場合、そっちのルートで適用されてしまったようです。なので、ACCESSのバージョンをダウングレードする方法を取りました。
       
     作業手順 例)
    (1) ACCEESSを起動してOFFICE更新プログラムのバージョンを確認
        アカウント情報を開いて確認。
    現在のバージョン及び、ACCESSのバージョン情報をクリックするとMicrosoftのサイトでバージョン履歴を確認できるので、一つ前のバージョンを把握しておきます。
    因みに今回ダウングレードするバージョンは、15.0.5179.1000。
        (2) バージョン確認後、とりあえず自動更新の設定を無効にしておく
        (3) OfficeC2RClient.exeを実行してOFFICEバージョンをダウングレードする
          予めコンピュータが32bit版か、64bit版か確認しておきます。
          cmd.exeコマンドを管理者で実行して、CDコマンドでディレクトリを移動。以下は64bitの例。
          
          次のコマンドを実行。
          OfficeC2RClient.exe /update user updatetoversion=15.0.5179.1000
    [メッセージ例]
     
     
    (4) ACCESSのバージョンを確認
     
     
    以上です。

     

     
     
  • MS-AccessでYes/No型項目をコンボボックスにすると不思議なことが

    あるMS-Accessのシステムのバージョンアップで、「あり」と「なし」を値とする項目が必要になったので、テーブルに当該の項目をYes/No型として追加しました。

    そして、その値を設定するフォームを作成して動作確認したところ、・・・

    コンピュータは 何かやってるんですが、フォーム上の表示では空白にしかならないんです。

    下図は、この事象の調査のためにいろいろやってみたものです。「対象の有無」とあるコンボボックスがその項目だと思ってください。

    ここでコンボボックスをクリックしてドロップダウンさせると、「あり」と「なし」が表示されます。

    ここで、「あり」を選択しても、コンボボックスの表示は空白のままなんです。

    これが「不思議なこと」とタイトルで言っていることです。

    よくよく目を凝らして、フォームの左端のレコードセレクタを見ると、鉛筆マークになっている。つまり、何かが変わったということです。

    そこで、テーブルの内容がどう変わったのか確認してみました。

    なんと!、値が「-1」になってるんです。

    「True」と「False」でも、「Yes」と「No」でもなく、「-1」と「0」なんですね。

    この項目のルックアップを確認すると、「True」と「False」にしていました。

    そこで、「-1」と「0」に直しました。

    そして、テーブルの内容を初期値に戻してフォームを表示してみると、下図の通り。目的通りの表示です。

    コンボボックスをドロップダウンしたときの表示はちゃんと現在の値に対応したところ:「なし」が選択され、「あり」を選択の結果も目的通りの結果でした。

    どうも、コンボボックスの値集合ソースでは、すべて文字列として処理されるみたいです。だから「True」と書くと「"True"」という文字列として処理されてしまう。そして、テーブル上の「-1」とは一致しないので空白表示になるようです。ところが、「あり」を選択して「"True"」を設定させようとすると、「"True"」を「-1」に変換してくれるわけです。「Yes」でも「-1」に変換してくれますが、「はい」だとエラーになります。この中途半端さが、いかにもMS-Accessらしいですね。

    という訳で、「Yes/No型の項目をコンボボックスで処理するときは、『-1』と『0』にすべし」と覚えておこう。

  • Azure SQLSEREVR <-> Windows10 ACCESS.accdb VPN接続で動作確認

    はじめに
      Windows2008R2サーバー、Windows7の2020年1月サポート終了に伴い、自社サーバーのOSアップグレードを検討していたのですが、せっかくなので、Microsoft Azureへの移行を検討してみました。要件としては、現行のC/SシステムにおけるSQLSERVERとAccessクライアントの処理が、 Cloud上のSQLSEREVER – VPN接続 – Accessクライアントで実現できる事、です。 これが出来れば、インターネット経由で自宅パソコンやモバイル端末から接続して仕事ができるので便利です。

    Azure移行イメージ

    Azure移行イメージ

      目次
    1.無料アカウントを作り、仮想サーバー(Windows2016+SQLSERVER)を構築
    2.仮想サーバーでVPN接続設定
    3.仮想サーバー内SQLSERVERの外部接続設定
    4.クライアントのSSMSで仮想サーバーSQLSERVERの接続確認
    5.Access.accdb用のODBC設定

     

     1.無料アカウントを作り、仮想サーバー(Windows2016+SQLSERVER)を構築
       自分のようなお試しユーザ向けのAzure無料アカウントを作り、Azureポータルにログイン。
    ポータル画面は、直観的に何となくクリックして進めていく事ができます。
    よくわからない設定があっても、その都度リンクされたヘルプサイトを見て確認する事ができました。 自分は、仮想サーバーの構築をMicrosoftのDocサイトを参考にしました。
     
      クイックスタート:Azure ポータルでWindows仮想マシンを作成する(Microsoft.comに移動)
      https://docs.microsoft.com/ja-jp/azure/virtual-machines/windows/quick-create-portal
     
      作成後、RDP接続で仮想サーバーに接続。まず、作成直後の仮想サーバーは英語なので、サーバーの日本語化設定をして、 その後、仮想サーバーのブラウザを使ってSQLSERVER2016及び管理ソフト(SSMS)をインストールしました。

    仮想サーバ構築後
    仮想サーバ構築後

     2.仮想サーバーでVPN接続設定
      仮想サーバーと自宅のパソコンを接続する形態をAzureでは「ポイント対サイトVPN接続」と呼ぶらしい。 設定は、
     
      ネイティブAzure 証明書認証を使用したVNetへのポイント対サイト接続の構成:Azureポータル(Microsoft.comに移動)

    https://docs.microsoft.com/ja-jp/azure/vpn-gateway/vpn-gateway-howto-point-to-site-resource-manager-portal
     を参考にしました。

    【ネットワークトラフィック許可の設定】
      受信ポートの追加設定は特になし。仮想ネットワークに接続している事が前提になるので、この設定で問題なし。

    ネットワークトラフィック許可の設定
    ネットワークトラフィック許可の設定

    パソコンで上記のサイトの説明に従ってVPN構成設定を行い、接続確認。

    VPN接続画像
    VPN接続画像

     3.仮想サーバー内SQLSERVERの外部接続設定
      仮想サーバーのFireWallで、1433のポートを受信許可。セキュリティが心配なら、ローカルIPアドレス、リモートIPアドレス、 プロファイル指定も行います。
     
      [START]-[セキュリティが強化されたWindowsファイヤーウォール]-[受信の規則]-[新しい規則]

    受信の規則の設定1
    受信の規則の設定1

    受信の規則の設定2
    受信の規則の設定2

    受信の規則の設定3
    受信の規則の設定3

      Sql Server Configuration Manager(構成管理)で、以下の設定を行います。
      [SQL Serverネットワークの構成]-[SQLEXPRESSのプロトコル]-[TCP/IP]-[プロパティ]
      IPALLの設定で、TCPポートに1433を設定します。


    Sql Server Configuration Manager(構成管理)
    Sql Server Configuration Manager(構成管理)

     4.クライアントのSSMSで仮想サーバーSQLSERVERの接続確認
      ここで接続確認できれば、ODBC接続も問題なしです。

    SSMSで接続確認
    SSMSで接続確認

     4.Access.accdb用のODBC設定
      最後にACCESSからSQLSERVERのテーブルをリンク接続する為に必要なODBC接続の設定を行います。
     
      ファイルDSNの設定例
      [ODBC]
    DRIVER=SQL Server Native Client 11.0
    UID=SQLSERVERログインユーザID
    WSID=DESKTOP-XXXXXXX
    APP=Microsoft Office 2013
    SERVER=192.168.1.4,1433

     

    おわりに
      とりあえず、VPN接続して動作確認はできました。サーバ―レスポンスも思ったより早いです。
      処理にもよるのでしょうが、今後は5G通信も始まるのでレスポンスについては問題にならないと思いました。セキュリティ面は、レンタルサーバーを借りて設定するよりも、はるかに堅牢なシステム構築が簡単に出来そうです。
     
      さて、気になる利用料金ですが、Azure 料金計算ツール
    https://azure.microsoft.com/ja-jp/pricing/calculator/
    でシミュレーションができます。試しに計算してみると・・・・・・・

    うーん、小規模システムで運用するにはちょっと掛かりすぎの利用料金でした・・・・・。費用対効果として「効果」の部分を積極的に考えていかないと割に合いません。結局自社サーバー(オンプレミス)に落ち着きそうです。

  • MS-Wordで「図形」で絵を描いてWebページにしたら絵が見えない!

     私は、技術研究と趣味と脳の老化防止のために、Webサイトを作ってます。

     そのサイトに、MS-Wordで作ったWebページを公開したら、一生懸命描いた絵が、まるっきり見えなくなるし、後ろの方は何行も空白が続くしで、かなり焦ってしまいました。とりあえず、絵は見えるようになったし、後ろの空白も無くせたので、後のために記録を残しておこうと思います。

    1.何をやったのか。

     1-1.MS-Wordで、「図形」を使って絵を描きました。

     1-2.これを「ファイル」の「名前を付けて保存」で、「Webページ」として保存。

     1-3.保存した結果をMicrosoft Edgeで読んでみる。なんと!。絵が無くて、前後の文は表示されて、後ろはずっと空白。

     

    2.どこがいけなかったか、試行錯誤。全部書くと大変なことになるので、うまく行ったことだけ書くことにする。

     2-1.「名前を付けて保存」で「ツール(L) ▼」に気づく。「▼」をクリックしてみる。

     2-2.「Webオプション(W)」とあるので、クリックしてみると、Webオプション設定ウィンドウが。下から2行目の「VMLを使ってグラフィックスをブラウザーに表示する」が怪しい。

     2-3.「VML云々」のチェックを外して保存してみる。

     2-4.Microsoft Edgeで読んでみると、めでたしめでたし。

     なお、この絵は、テストおよびこのブログへの投稿用に作ったものです。私のサイトの問題のページは下記です。

    囲碁を開集合による位相数学で説明してみる

  • Acrobat Readerの注釈機能を使って、文書のレビューを上手にする

    最近は、メールでの文書のやり取りが多くなり、指摘事項もメールにいちいち引用先を記して書くことは面倒になってきました。そんな時、Acrobat Readerの注釈機能とFDFというファイルがあることを知ったので、紹介したいと思います。

    たとえば、下図のように使います。

    一点鎖線の左と右では別の人だと思ってください。

    まず、Aさんが文書(PDFファイル)を作成します。

    それを受取ったBさんは、文書に「注釈」(私の脳内では「いちゃもん」と変換されます)を付けたくなったとします。

    ここでまず、Acrobat Readerの注釈機能が登場します。PDFファイルのどの部分の注釈かも、すぐわかるようになっています。

    次に出てくるのが、FDFファイルです。Acrobat Readerの操作で、注釈情報のみを出力することができます。

    Bさんは、FDFファイルをAさんに送ります。

    Aさんは、送られたFDFファイルと、元のPDFファイルとを読込んで、どんな注釈がつけられたかを見ることができます。

    図には書きませんでしたが、Aさんは、注釈に対する返信を付けてFDFファイルにしてBさんに送り返すこともできますし、さらに別の人に送って…ということもできます。そして、こうしたやり取りが、ぐちゃぐちゃにならず、FDFファイルとして形に残し、管理できるということも重要です。

    Acrobat Readerの、具体的な操作については、下記などを参照してください。これは、少し古いAcrobat Reader Xについてなので、その後のバージョンとは少し違いますが、参考にはなるでしょう。

    https://helpx.adobe.com/jp/acrobat/kb/4561.html

  • ACCESS VBA ダブルクリックによってクリックイベントの処理が2回実行されてしまう件

    はじめに 

      ある入力画面フォームで登録ボタンを用意、クリックイベントの処理(イベントプロシージャ)でデータベースに登録する処理を割り当てました。運用になってからしばらくは順調に動作していましたが、複数の担当者の内、ある人が操作した時に、データが2重登録されるケースが出現。
     
     
    原因について

     どうやら、その担当者は登録ボタンをダブルクリックしていて、クリックイベント処理が2回走ってしまったことが原因らしい。
    改めてACCESSのヘルプを見直すと、
     
     Form.DblClick イベント (Access)
     https://msdn.microsoft.com/ja-jp/vba/access-vba/articles/form-dblclick-event-access
     
     ■マウス イベントを受け取るオブジェクトに対しては、次の順序でイベントが発生。

       MouseDown ⇒ MouseUp ⇒ Click ⇒ DblClick ⇒ MouseUp 

     ■コマンド ボタンをダブルクリックすると、次の順序でイベントが発生。

       MouseDown ⇒ MouseUp ⇒ Click ⇒ DblClick ⇒ MouseUp ⇒ Click
     
     との事。
     
     今回のケースは、コマンドボタンをDblClickした場合なので、Clickイベントが2回発生した。
     そもそも、DblClickの時にClickイベントが発生する事など、全く考えていなかったので、この仕様には驚いています。ただ、今回の事を知って改めて考えると、パソコンの設定によってDblClickとClickの判断は難しい場合があるのだと思えば、なんとなく納得しています。
     

    対応方法

    2回目のClickイベントを無効にする次の方法で対応します。 
    DblClickイベントプロシージャの引数に「Cancel」があるので、この引数にtrueを設定して終了すれば、以降のClickイベントは発生しません。
     
     例)
     
     Private sub XXXボタン_DblClick(Cancel As Integer)
       Cancel = true
     End sub
     
    おわりに

     入力画面を設計する際、GUIの観点からなるべく入力を簡単にできるよう考えます。
    例えば、テキストボックスをダブルクリックするとデフォルトの値が設定されるようにするとか。
    結果として、クリック操作とダブルクリック操作が混在する画面の操作性の良し悪しは、
    判断が分かれるところですが、今回のようなケースでうっかり操作による誤動作の対応はしておきましょう。

     なお、Accessのヘルプには、
     ”一般的には、コマンドボタンをダブルクリックしない事をお勧めします”
     とありました。

     

  • MS-AccessからODBC経由でFirebirdのテーブルにアクセスは大変

     あるユーザーのシステムで、Ccu労組会計のデータをMS-Accessからアクセスして処理することになりました。それで、ODBC経由で接続することにしたのですが、…私の覚えを兼ねて、ここに書いておきます。

     

    1.ODBCって、マルチバイト文字は正しく処理できない!

    1.1 DBファイル、クライアントdllへのパスにマルチバイト文字があると接続できない

      

      まず、上図のようにしたら、接続時にエラーとなってしまいました。各パスを確認したところ、後ろの方が切れてしまっている。どうも「会計」とあるのがいけないらしい。「会計」は4バイトだけど2文字なので2バイトと判断して、差額の2バイトはカットしてしまうものと思われる。

      これは、英数字と空白だけのフォルダを作って、そこにコピーして事無きを得ました。

     

    1.2 テーブルの中身もマルチバイト文字があると…

      これは、私(平石)ではなく、一緒に仕事をしている組合員が見つけた現象です。

      下図は、RKA23というテーブルの内容を、フリーソフトを使って見たものです。

      

     ところが、同じものをMS-Accessで見ると、データ内容に余計な文字が付加されている。

      (吹き出しは記述者=平石が付けたもの)

      どうも、Shift-JISでのバイト数が項目長と一致するときに、この現象が起きるらしい(このときは、項目長を超えるデータができてしまうかのように見えますが、MS-Accessで見るときの項目長はバイト数ではなくて文字数なので、これらのケースでは、項目長を超えていません)。

      データのShift-JISでのバイト数を求める関数を作り、そのバイト数が項目長を超えている分はカットするようにして、対処できました。

     

    2.DAO.TableDef.Connectを書き換えるとReadOnlyになってしまう

      実は、上記1.1に書いた、「DBファイル、クライアントdllへのパス」については、DAO.TableDef.Connectに、その情報があるので、これを書き換えて対処できるのではないかとやってみたのです。

      読むだけなら、うまく行きました。パスに「会計」などのマルチバイト文字があってもちゃんと読めます(ODBCの設定ではマルチバイト文字の無いパスを指定して、あとから書き換えます)。

      ところが、内容を更新しようとすると、ReadOnlyである旨のメッセージが出てダメでした。