DMLトリガーに関数、パラメータにfrom Insertedは

rebootで書いた 一括insertがうまくいかない件は
https://docs.microsoft.com/ja-jp/sql/relational-databases/triggers/create-dml-triggers-to-handle-multiple-rows-of-data
これかな?
insertトリガーに仕込んだ関数のパラメータにselect from insertedと書いてるからと思う。
と言うか違いない。

reboot

開発中のDBアプリ、システム復元で3ヶ月分戻ってしまった。
バックアップしてるつもりがしてなかった
一ヶ月ほど呆然としていたがリブートです。

sqlserverでselectした結果をinsertですが
トリガーでカラムに関数など仕込んでいるとうまくいかない
トリガーのwhere条件を 
where id=(select id from inserted)
から
where id in(select id from inserted)
にすればよいのだが
ほかがうまくいかない

wordpressは設定で日本語にすれば簡単に日本語にできるのですね
今日気がつきました。

型変換と文字抽出

VBAでは
型変換は
CstrとかCintなど
文字抽出は
mid関数

SQLServerでは
型変換は
cast(文字列 as nvarchar) など
文字抽出は
substring(文字列,i,n)
iは最初の文字位置 最初の文字を1 nは文字数
最後まで抽出はnを100とか1000とか大きめに書きます

続MERGE ODBCエクスポート

MERGEの続き。前回の
TableAはSQLServerのテーブルで
TableBはMySQLのテーブルです。

TableBはフロントエンドにMSAccess2016がありますので
VBAからDoCmd.TransferDatabaseでODBCエクスポート
リンクテーブルですがAccessがなんとかしてくれるでしょう

DoCmd.TransferDatabase acExport, “ODBC データベース”, “接続文字”, acTable, “TableB”, “TableB_sql”, False

https://msdn.microsoft.com/ja-jp/library/office/ff196455.aspx

接続文字は面倒くさければリンクテーブルをデザインビューで開いて
プロパティで接続文字がどこかに出ているはずです。
コピペで貼り付ける。

あとはSQLServerへ接続して
TableB_sqlがあればdropをexecuteメソッドで書いて
上のexportを書いて前回のmergeのクエリを書く。

SQLServerのストアドプロシージャに仕込んでおいて
VBAからcn.execute ”exec プロシージャ名” が良いかも

かなりな更新系のクエリのはずですがやはり早い。

ゼロフィル

そうゼロフィル 0fill です。

SQL Server では
7桁ゼロフィル
select right(‘0000000’+cast((27) as varchar),7)
もしくは
select right(‘0000000′ + format(27,’00’),7)

で良いのかな、一応合っているような

文字型で帰ってくるので注意

訂正 select right(‘0000000′ + format(27,’00’),7) はもっと簡単で良い?
format(27,’0000000′)
3桁なら
format(27,’000′)
これなら忘れない

SQL ServerでもFormat(日付,’***’) VBAで四捨五入もできるFormat()

たしかconvert使って’111’みたいな・・
そんなの覚えられません。使うときは検索 
と諦めてましたが
vbaと同様Format(getdate(),’yyyymmdd’)とかできるらしい
戻り値は文字ですけど

そしてVBAにはISO丸めはあっても四捨五入する関数はないと思っていたら

format(2.36,”0.0″) は 2.4 と四捨五入してくれるらしい

ただし 2.4は文字型 です

UTF-8 bom エディタ

今日、仕事中にMySQLのダンプファイルを開く必要に迫られた。
一部の手直しなので復旧させずに一部のテキストをコピーした方が早いのだが
適当なエディタがない。
300M を超える容量でOPEN OFFICE で開けるがちょっと重たい
TeraPadでは開けない
windowsのメモ帳の折り返しをしなければサクサク動くが
メモ帳はBOM付きUTF8でないと文字化け

BOMなし、BOM付き 両方読めて巨大ファイルも開けるエディタは・・
そんなの準備する時間もないので慌てましたが
NonCodeNetという変換ツールがありました。

access2016のバージョンを戻す

頻繁にバージョンが更新されますがバグは改善されませんので古いバージョンに戻します。
cmd.exeで
C:\Program Files\Common Files\microsoft shared\ClickToRun>officec2rclient.exe /update user updatetoversion=16.0.8201.2102

8201.2102がバージョン
バージョンは
https://support.microsoft.com/ja-jp/help/2770432/how-to-revert-to-an-earlier-version-of-office-2013-or-office-2016-clic
で調べる

サロゲートペア文字

フロントエンドAccess2016バックエンドmysql5.7の
DBアプリで「通称つちよし」という漢字を入力保存するとフリーズ
はて?何年か前もそういう漢字に遭遇したような・・
mysqlはuft8でだいたいの環境依存文字は問題ないはず。
Google先生に聞いてみると
土の下に口、で通称つちよし サロゲートペア文字というらしい
一文字で4バイトあり、スマホの絵文字と同じ。
つまり絵文字が入らないならこの字も入らない。
uft8は3バイト文字までしか格納できない。
uft8mb4にすれば良いらしい。
mysqlの文字コード、参照を変更
テーブルも変更して入力すると・・エラー
コンソールからinsertすると文字表示はできないけど
query OK 
でもAccessからは入力できない。

そういえば検索してもうまくいってるのはweb系ばかり
ということはODBC周りが変換できないのかな?

どうしてもできないのでサロゲート文字をトラップしたら
2バイトずつコード化してmysqlに格納
Accessにはコードで持ってきて変換することにした。

サロゲートペア文字のコードは2バイトずつ
上の句、下の句で構成されていて
それぞれサロゲートという領域のコードらしい。
2日ほど悩んでました。

この掲示板も表示できない

Accessのバグ

もう一つ書いておきます
7月のOffice updateでフォームなどのテキストボックスで
反転と実際の文字選択がずれるというバグ
こんなひどいバグすぐ修正されるだろうと思ったらまだ放置
Accessのバグはよく放置されます。
VB.NET移行も考えようかなあ