MySQL ODBC Connector

ODBC8.0connector(32)がいつまにかリリースされていました
32bitアプリは忘れられていなかった
これでAccessから  寿司絵文字が あれ?ここにもはいる? 
 つちよし は? 入る!
いや公開すると表示できない フォントによるのかな?

MySQLはutf8mb4でODBCもコンパチだから入るだろうと
AccessからMysqlへ向かって入力するとなぜかODBCエラー
まあいいか

インストーラーでインストしたら前のドライバを自動削除していた。
親切と言えば親切だろうが知らずに動かしていたら大変な目にあいました。
すべて入れ替えるとは限らないのに・・

Accessのクエリでdistinct

Accessでクエリ作成 SQLビューでクエリ文から作成するとき

select distinct columnA,columnB from Table

と作ってフォームのソースにすると参照のみになってしまい、更新や追加ができない

デザインビューを見てもdistinctが付いているのはわからないので
つけたことを忘れると何が起こっているのかわからず慌ててしまう

PowershellからSQLserver構成2

続きです。
間違いはないはずですがバッチファイルを流すとうまく行きません

powershellにSQLモジュールロードではなく
SQLpowershellを使うとなぜかうまく行きます
スクリプトは全く同じ

これで構成はなんとかクリア
あとはmdfのアタッチ

PowershellからSQLserver構成

SQLserverなどインストした後 構成マネージャーでTCP/IP接続有効とか名前パイプ有効とか設定必要だが
それをpowershellから施行したい

sqlpsというのを読み込んで
getsmoobjectと言うのも使えるようにして・・

調べていろいろやったがなぜか原因不明のエラーを返される

$Tcp=$wmi.GetSmoObject(“ManagedComputer[@Name='”+$Env:computername+”‘]/ ServerInstance[@Name=’インスタンス名’]/ServerProtocol[@Name=’Tcp’]”)
$Tcp.IsEnabled=$true
$Tcp.Alter()

うまくいったのはこんな感じ
違いは変数を省略しただけ
うまくいったけど納得できない

ちなみ名前パイプは
$Np=$wmi.GetSmoObject(“ManagedComputer[@Name='”+$Env:computername+”‘]/ ServerInstance[@Name=’インスタンス名’]/ServerProtocol[@Name=’Np’]”)
$Np.IsEnabled = $true
$Np.Alter()

これでパッケージが完成する、させたい

recordset.recordcount が-1を返した

VBAからMySQLのバックエンドDBへ

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
cn.ConnectionString = “MySQL接続文字列”

rs.open “select 略”,cn,adopenkeyset,adlockoptimistic
debug.print rs.recordcount
以下略
が-1になってびっくり

いろいろ調べて
cn.CursorLocation = adUseClient
cn.ConnectionString = “MySQL接続文字列”
でちゃんとcountしてくれました。

ではSQLserverではと
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
cn.ConnectionString = “SQLserver接続文字列”

rs.open “select 略”,cn,adopenkeyset,adlockoptimistic
debug.print rs.recordcount
以下略
はちゃんとcountします。CursorLocationは

書かなくても
cn.CursorLocation = adUseClient と書いても
cn.CursorLocation = adUseServer と書いても同じ

でした。

うーん

identity

下の続き

SSMS でテーブルデザインでidentityシードを見るといつまでも1 
になっているのでおかしいと思っていたら
最初に作ったときのデフォルト値が表示されるらしいのでずっと1なのね

訂正データベース複製とTRUNCATE@SQLserver

identityリセット
truncate table でリセットされると思っていたら維持されてました

つまりSQLserverではtruncate tableしてもidentityはリセットされない。されるのはMySQL

そこでSQLserverでは

exec sp_MSforeachtable @command1=’if objectproperty(object_id(”データベース
.?”),”tablehasidentity”)=1 dbcc checkident(”データベース
.?”,reseed,0);’

でデータベース内テーブル一括リセットOK
SSMSのテーブルデザインでidentityシード見ても変化ないけど
レコード挿入するとちゃんとリセットされてます。
SSMSのバグかな? 自分の方がバグでした

Visual Studio 2017 のセットアッププロジェクト

タイトルの必須コンポーネントにSQLserverExpress2017が出てこない。
bootstrapperのなんとかを作れば良いとGoogle先生がおっしゃるが
苦労した件

そもそもこの必須コンポーネントがリンクしている場所が
“略\Microsoft Visual Studio 14.0\SDK\Bootstrapper”ではなくて
“略\Microsoft SDKs\ClickOnce Bootstrapper”

ここに気づくまで2日かかる

しかもproduct.xmlが古いのか半分ぐらい読み込んでいない。

うちだけの環境かもしれないけど・・
VB6とかVSTO2015とか共存しているから崩れているのかも・・

VBAエディターで

AccessのVBAで
dim A,B,C,D as String
と宣言したら A,B,C,D 全部Stringだと思っていたら
StringになっていたのはDだけで
A,B,CはVariant たぶん

今まではたまたまうまくいっていただけでした。
先ほど気がつきちょっとショック
まだまだ未熟なり

わかったようでわっかってない

1バイト=8ビット
ビットは 0 or 1
半角文字は8ビットで表せるので通称1バイト文字
全角文字は通称2バイト文字

なので半角数字で最大バイト数1
は8ビットだから最大の数は
11111111
2進法なので10進法に換算すると
1×27+1×26+1×25+1×24+1×23+1×22+1×21+1×20
=128+64+32+16+8+4+2+1=255
まじめに書けばこうなるが
11111111の次の数は100000000
十進法では28だから1引いて256-1=255 でもある

そこを踏まえてSQLserverでtinyintは1byteだから
0~255
ということになる