Access (VBA)

Access VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Pro : その他)
LongPtrとLongについて(Office365とProfessionalPlus2013版)
投稿日時: 20/03/07 11:43:18
投稿者: yyysss0129

yyysss0129と申します。
 
会社では
Office Professional Plus 2013で
Access 2013 MSO 64bit
 
自宅では
Access for Office365 MSO 64bit
を使っております。
 
自宅のOffice365版(64bit)で、はじめてCodeを組み
RecordsetのEditとUpdateにて
レコードを更新するのがうまくいかず
しばらく調べていると、
Long型の値が、
テーブルに更新されていないことがわかりました。
いろいろ調べて
LongPtr型や、LongLong型で処理すると
テーブルに反映されうまくいきました。
 
他方で、会社のAccess2013版(64bit)で、同様の処理をすると
Long型でもうまくいきました。
 
このことから、
64bitでも
「Office365版」と「2013版」で違いがあることがわかりました。
(※ インターネットでも調べると
Office2019版とOffice365版では、強制で64bitがデフォルトになるとのことなので
このあたりと、それ以前とで、若干仕様が異なるのかもしれません)
 
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
<以下、コード概要>
 
    Dim i As LongPtr ←ここが、Longだと、「Office365版」ではテーブル更新されない。
   
    Dim rS2 As Recordset
    Dim tmpSql2 As String
 
    tmpSql2 = "SELECT * FROM Tbl1"
            
        Set rS2 = CurrentDb.OpenRecordset(tmpSql2)
         
        rS2.MoveFirst
        i = 1
         
        Do Until rS2.EOF
         
            rS2.Edit
            rS2("fld1") = i
            rS2.Update
                 
            i = i + 1
            rS2.MoveNext
                 
        Loop
         
        rS2.Close
        Set rS2 = Nothing
 
 
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ここまでを前提で、以下、質問させて頂きます。
(MicroSoftに直接、質問した方がよい、とのこととは、重々承知しているのですが、
現場でVBAで開発されている方が、この点、この先どのように対策をしているのかを知りたく
こちらで質問させて頂きました)
 
@会社も、Office365を導入し始めたこともあり、
今後、Office365版に変わっていくかもしれない、と見通しております。
その場合、現行のツールをLong型からLongPtr型に変更するなど
対応しなければと思っております。
皆さまの中で、そのように実際変更された方はいらっしゃるでしょうか?
その場合、他に気をつけることはありますか?
単純に、Long型をLongPtr型にするだけで、うまくいくのでしょうか?
 
 
A今回の、Office365版の、Long型仕様の不具合で困ったことは、
コンパイルエラーで上がってこないことです。
 
だから最初、うまくいかない理由が全くわからなかったことです。
 
今回、
ステップインなどして、
ローカルウィンドウや、イミディエイトウィンドウで、
Long型の値を確認しながら、実行した場合、
変数iには、値がきちんと入っているのに、
Long型だと、テーブルに数値が入っていない状態でした。
(これを、LongPtr型やLongLong型だと問題ないです)
 
テーブルの対象のフィールドも
標準的な操作方法で、手作業で数値型で作成したので
特別、変わったことはしておりません。
 
上記、不具合に対して、
コンパイルエラーでの警告(赤色で警告)になるようにできるような
エラー設定の仕方をご存知の方がいらっしゃれば、教えて頂きたいです。
(エラーの設定は、デフォルトで使用しております)
 
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
<さいごに>
Office365版で実際改修しながら覚えるしかないとは思っているのですが、
会社の環境もどうなるか未知数ですし(現行、会社ではLong型でも問題ない)
会社で実行できるわけでもない状態です。
 
ただ、会社でかなり複雑なシステムを組んでおりますので、
急に状況が変わっても、改修に時間がかかりそうですので、
リスクが高いと感じております。
 
よって、先を見通しておければと考えております。
 
いずれにしても、
皆さまが、このLong型→LongPtr型・LongLong型の改修につきまして
どのようなスタンスでおられるのか、
どのように改修されておられるのかを
知りたく質問させて頂きました。
 
以上、宜しくお願い致します。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

投稿日時: 20/03/07 11:48:40
投稿者: yyysss0129

引用:
上記、不具合に対して、
コンパイルエラーでの警告(赤色で警告)になるようにできるような
エラー設定の仕方をご存知の方がいらっしゃれば、教えて頂きたいです。
(エラーの設定は、デフォルトで使用しております)
 
 
申し訳ございません。
ここは、
Office365版で、Long型を使用した場合に、
赤色(赤字)の警告で、ユーザーにわかりやすく知らせてくれるような
エラーの設定、という意味です。
 

回答
投稿日時: 20/03/11 12:51:36
投稿者: sekka2

Office365 64bit版を使っています。
試してみましたが、「Dim i As Long」でエラーも出ず実行できます。
ただ、テーブルTbl1のフィールドfld1は長整数型でテストしました。
  
2017年に32bit版のOffice2007からOffice365 64bit版へ移行しましたが、コードで修正したのは
Declare Functionしてるところくらいで、ほぼ修正はありませんでした。
当時は32bit版と64bit版が並行稼働していました。
64bit版で多少、動作が変わって(64bit版にバグが残っていて?)コンパイル定数VBA7を使ってコードを分けたところもありましたが、まあ、あきらめて修正しました。

投稿日時: 20/03/15 07:25:55
投稿者: yyysss0129

 sekka2様
 
ご回答ありがとうございました。
Longで問題なかったですか・・・
 
私もフィールドは長整数型で設定しておりましたが
上手くいかなかったのですが・・・
 
Office365 64bit版でもいろいろあるのか
何か、こちらでそれ以外の理由があるのか
もう少し調査してみます。
 
Declare Functionの所は、明示的にエラーがわかりますので
私もなんどか直した経験があります。
その点は、ProfessionalPlus版でも、Office365版でも同様でした。
 
いずれにしても
大丈夫だったというご意見は、少し安心致しました。
 
やはり、マイクロソフトに問い合わせてみるのが
一番、最初にやることですね。
 
大変助かりました。ありがとうございました。
 
 

トピックに返信