1903で令和対応させるには上記必要らしい
VBAで配列をソート Quicksort
quicksortも作ってみました
無限ループに何度もはまりました
コード表示のプラグインも入れてみました
ちなみにquicksortのアルゴリズムはここ
再帰プロシージャはここを参考にさせてもらいました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
Public Function QuickSort(ParamAry As Variant) As Variant Dim newAry() As String Dim I As Long Dim j As Long Dim K As Long Dim Anker As Long Dim TopAry() As String Dim BtmAry() As String j = 0 K = 0 If Not UBound(ParamAry) >= 0 Then Exit Function End If Anker = CLng(ParamAry(0)) For I = 1 To UBound(ParamAry) If ParamAry(I) < Anker Then ReDim Preserve TopAry(j) TopAry(j) = ParamAry(I) j = j + 1 End If If ParamAry(I) >= Anker Then ReDim Preserve BtmAry(K) BtmAry(K) = ParamAry(I) K = K + 1 End If Next I Dim n As Long n = 0 If j > 0 Then TopAry = QuickSort(TopAry) For I = 0 To UBound(TopAry) ReDim Preserve newAry(n) newAry(n) = TopAry(I) n = n + 1 Next I End If ReDim Preserve newAry(n) newAry(n) = Anker n = n + 1 If K > 0 Then BtmAry = QuickSort(BtmAry) For I = 0 To UBound(BtmAry) ReDim Preserve newAry(n) newAry(n) = BtmAry(I) n = n + 1 Next I End If QuickSort = newAry 'If UBound(ParamAry) = 1 Then 'Exit Function 'End If End Function |
最速です
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
1809 新元号 表示可能になる
表題の通りです
新元号 Access
5/1夜だがまだwin10_1809は新元号和暦表示できない
LANの半分は表示できるのでなんとか業務は可能だがこのままGW明けまでMicrosoft未対応を想定して可及的にパッチみたいな物を・・
うちの業務システムでは和暦表示は gee/mm/dd 形式だけだから
Public Function FormatZ(paramA As Variant, paramB As Variant)
If IsDate(CStr(paramA)) = True Then
If paramB Like “gee/mm/dd*” And CDate(paramA) >= CDate(“2019-5-1”) Then
FormatZ = Replace(Format(paramA, paramB), “H3”, “R0”)
Else
FormatZ = Format(paramA, paramB)
End If
Else
FormatZ = Format(paramA, paramB)
End If
これで良いかな?
とりあえずしばらくしのげれば良いので関数作って
moduleで必要な物はFormatZに変えておく
クエリも令和が出そうなものは捜して置換
フォームのソースがクエリのものがあるはずだが面倒なので現場で対応しよう
新元号 windows WSUS
先月から気になっていたのですがWSUSサーバで新元号対応更新プログラムのKB4493473がインストール済みまたは該当なしになっていたのですがインストールはされてません
今日確認するとやはり新元号表示不能です
マニュアルで対応必要でした 以下参照
https://sccm.jp/2019/04/27/post-1484/
windows10 1809 は今日5/1調べたけどまだ未対応のようです
windows10でupdate最新状態にしておけば大丈夫とあちこちで見るけど
最新状態だと1809になってるはずなのでほとんどのPCが表示できない
ということになってないのかなあ
文字
文字は良くわからないです
VBAのasc関数で asc(“文字”) は 文字のshift_jisコードを返すようですがなぜそれがascなのかよくわかりません
甘んじて受け入れて
SQLserverにはasc関数はない、ascii関数がある。ではこれはutf8かutf16コードを返すのだろうと妄想するとこれは間違い
アスキーコードを返す
SQLserverにはunicode関数がある。調べると文字のunicodeを返すと出てくる。unicodeは文字の集合でコードではないと覚えたけどと混乱
SQLserverで
unicode(‘、’)は12289
VBAで
ascw(“、”)は12289
12289は16進数にすると3001でコード表では「、」のutf16コード
ますます混乱
うちの環境では
VBAのasc関数はsjisのコード ascw関数はutf16のコードが返ってくる
SQLserverのascii関数はunicodeを返すらしいがutf16のコードと同じ値が返ってくる
ではunicode=utf16なのかというとそうではないと覚えていたのだが・・
宿題にします。
VBAでSQLクエリを書くとき
VBAからデータベースへ向かってクエリを書くときいろいろと忖度してあげる必要がある
SQLserverのbit型はaccessで見るとbitの0はAccessの0でありfalse、bitの1はAccessの-1でありtrue
そこを踏まえて
Accessのフォームから・・
cn.execute “update sqlTable set BitColumn=case when ” & AccessForm.checkbox & “=-1 then 1 else ・・
となんだかおかしいようだがおかしくない
日付型を扱う時も
cn.execute “update sqltable set DateColumn=cast(format(日付,’yyyy/MM/dd’) as dattetime)・・・
MMを忖度せねばいけないがAccess側にいると忘れてしまう事がある。気がつけば良いが久しぶりに遭遇してmmと書いてしまうと気がつかないで慌ててしまう
VBAから#table 続き
TableAのADODBレコードセットを取ってデータ取得
TableBの複製を一時テーブルにexecuteメソッドでselect into
tableAのデータをパラメータに
update #table・・・
一時テーブルできないとき
レコードセットのcursorlocationがaduseserver でかつ
レコードセットを閉じないまま
一時テーブル作成
これがエラー
作成前に変数に代入してレコードセット閉じれば可
cursorlocationがaduseclientなら閉じないままでも作成できる
できる時の方が多い
できないときはcursorlocationをチェック
MySQL ODBC Connector
ODBC8.0connector(32)がいつまにかリリースされていました
32bitアプリは忘れられていなかった
これでAccessから 寿司絵文字が あれ?ここにもはいる?
つちよし は? 入る!
いや公開すると表示できない フォントによるのかな?
MySQLはutf8mb4でODBCもコンパチだから入るだろうと
AccessからMysqlへ向かって入力するとなぜかODBCエラー
まあいいか
インストーラーでインストしたら前のドライバを自動削除していた。
親切と言えば親切だろうが知らずに動かしていたら大変な目にあいました。
すべて入れ替えるとは限らないのに・・