Access ヒントテキスト

Accessのフォームでヒントテキストを初めて使ったのですが

開発機 windows server 2016 で Access2016のフォームでテキストボックスのヒントテキストが表示できません。
コマンドボタンは表示されます。
コマンドボタンのヒントが出た状態でマウスを素早く該当テキストボックスへスライドさせると表示されます。

いろいろ試してもダメで諦めてaccde作成、クライアントでruntime版で動かすと問題なく動きます。

選択ソート 二次元配列

ついでに選択ソートも

QuickSort 二次元配列

もともとはDictionaryでソートする必要があったので配列のソートを調べたのでした
dictionaryに入っているkeyとitemを二次元配列にしてソートする
もっと良い方法があると思いますが・・とりあえず
関数化したけど要素で型変換必要なので意味がなかった

VBAで配列をソート Quicksort

quicksortも作ってみました
無限ループに何度もはまりました
コード表示のプラグインも入れてみました

ちなみにquicksortのアルゴリズムはここ
再帰プロシージャはここを参考にさせてもらいました。

最速です

VBAで配列をソート テーブルを使う

テーブルに入れると言う手もあります
これが一番簡単
SQLserverとつながっているなら一時テーブルに入れ込む

VBAで配列をソート 選択ソート

バブルソートは時間がかかる
quick sortはササッと書くのは難しい
ので選択ソート

こんな感じで

openrowsetで既存Excelファイルへexport

vb.netでSQLserverテーブルをクエリして既存excelファイルに出力

accessのVBAからなら
docmd.transferspreadsheet acexport,acspreadsheettypeexcel9,”クエリ”,”ファイルパス”
でしたがvb.netでは難しいです

SQLserverにはopenrowsetというクエリでexportできるようなのでvb.netからExecutenonqueryで操作

SQLserverで準備
SQLserverは64bitでaccess32bitがすでにインストされているのでACEの32bitが既存
SQLserverのリンクサーバに64bitのACEのプロバイダ登録が必要なので
https://knowledge.autodesk.com/ja/support/autocad/learn-explore/caas/sfdcarticles/sfdcarticles/JPN/How-to-install-64-bit-Microsoft-Database-Drivers-alongside-32-bit-Microsoft-Office.htmlを参照にACEの64bit版をちょっと強引にインスト

SQLserverのリンクサーバーにACE登録

SQLserverでmasterデータベースで以下クエリ発行
exec sp_configure ‘show advanced options’,1;
reconfigure;
exec sp_configure ‘ad hoc distributed queries’,1;
reconfigure;
exec sp_MSset_oledb_prop N’Microsoft.ACE.OLEDB.12.0′ ,N’AllowInProcess’,1;
reconfigure;
exec sp_MSset_oledb_prop N’Microsoft.ACE.OLEDB.12.0′ ,N’DynamicParameters’,1;
reconfigure;

exportするクエリは
insert into openrowset(‘Microsoft.ACE.OLEDB.12.0’,
‘Excel 8.0;DATABASE=ファイルパス;imex=0;hdr=1;’,
‘SELECT カラム FROM [excelのワークシート名$]’)
select カラム from sqlserverテーブル where 条件カラム=パラメータ

接続文字がとっても厳格、ここまで試行錯誤数日
vbaでは列名含めて新しいワークシートに出力できたが
openrowsetはワークシートと列名は作成しておく

クエリが問題なければvb.netからExecutenonqueryで出力

最初VB.NETのコードでゴリゴリとやっていたけど難しくて断念
openrowsetもかなり難しいし環境が違えば同様にはいかないだろうし後日再検討しよう

integer と long 続

たとえば
VBAのinteger -32,768 ~ 32,767
216=65536 だが
負数もあるので半分になっているらしい
.NET Framework の16 ビット符号付き整数と同じ?
符号付きは負数あり

VBAのLong -2,147,483,648 ~ 2,147,483,647
.NET Framework の32 ビット符号付き整数ということになるかな?
では
Long(VBA)=integer(VB.NET)=System.Int32=int(SqlServer)

SQL Serverにおいてtinyintだけは
符号なしなので
.NET Framework 風に言えば8ビット符号なし整数
0 ~ 255