突如、pcからbluetoothが消えてデバイスマネージャーにも出なくなる。
エラーコードは45で結構みなさん遭遇しているようです。
いろいろ調べて試したけど復旧できず、OSクリーンインストールまでしたけど出てこない。
CMOSクリアでやっと解決しました。
簡単なのに、、、最初にやるべきでした。
Just another WordPress site
突如、pcからbluetoothが消えてデバイスマネージャーにも出なくなる。
エラーコードは45で結構みなさん遭遇しているようです。
いろいろ調べて試したけど復旧できず、OSクリーンインストールまでしたけど出てこない。
CMOSクリアでやっと解決しました。
簡単なのに、、、最初にやるべきでした。
accessフォームで動的ヒントテキストというものを使ったのですが、以前書いた通り開発機のみで表示されない件について。
その後フォームをよく見ているとカーソルが微妙に点滅しているのに気が付きました。
ひょっとしてと思って例の高DPI設定を変更すると表示されるようになりました。
ドメコンのままでは難しくてできなかった
降格した後AD削除
SQL server express インスト
サーバ名 \\.\pipe\microsoft##wid\tsql\query のWIDからSUSDBデタッチ
expressの新しいインスタンスにアタッチ
新しいログイン NT AUTHORITY\NETWORK SERVICE サーバロール publicとsysadmin ユーザーマッピング SUSDBにpublicとwebservice
以下はregeditで
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Update Services\Server\Setup
SqlServerName は インスタンス名
SqlDatabaseName は SUSDB
\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Update Services\Server\Setup\Installed Role Services
UpdateServices-WID を UpdateServices-Database に変更
なぜ移行したというとSSMSでデータ圧縮とかインデックス再構築とかやりたかったから。
ここまで来てexpressではできないことが判明
でもクエリではできるらしい。
クエリ例
dbcc shrinkdatabase(susdb,10)
exec sp_MSforeachtable @command1=’if object_id(”susdb.?”) is not null dbcc DBREindex(”susdb.?”);’
難しかった
最近のwindowsはsymbolなしでdebugできると書いたけど違っていました。
巨大なデータはどこに?と見てみるとちゃんと C:\symbols が知らぬ間にできてました
ソリューションを開く、イミディエイトウィンドウを開く、入力してもインテリセンスは出ない。
ブレークポイントなど置いてステップイン、エディターがデバッグモードになるとインテリセンスが出る。
その後はデバッグ中止して、普通の状態でも出る。
一度ソリューションを閉じて開く、デバッグ開始しなくても出る。
もう一度閉じて開くと出なくなる。
IDE再起動はもちろん出なくなる。
シンボルをローカルに置いても同じ症状。
4Kモニターのスケーリングを変えても同じ。
あまり困ることはないけど気になります。
visual studio2019で win10でもwindows server2019でも同様です。
前回の
1 2 3 4 5 6 7 |
Call Ary関数 For j = 0 To UBound(Ary関数, 1) For I = 1 To UBound(Ary関数, 2) objCells(j + 1, I + 2) = Ary関数(j, I) Next Next |
この部分耐えがたい遅さです。
vb.netの二次元配列はまあまあ我慢できますがVBAはデータが多くなるとだめです。
一次元目の要素(項目数)が少なければ一次元配列を並べた方が速いです。
さらに速いのはレコードセットから直接ループさせつつ書き込む。
すごく速いのでvb.netもデータテーブルから直接書き込むようにしました。
プロセスも今の所残っていません。コードが冗長になりますけど。
VBAからもできるでしょうと思ったけど・・
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 |
Public Function Excelbinding() Dim objExcel As Object Dim objExApp As Object Dim objWorkbook As Object Dim objWorkbooks As Object Dim fpath As String fpath = "xlsファイルのパス" Dim objSheets As Object Dim objSheet1 As Object Dim objSheet2 As Object Dim objSheet3 As Object Dim objCells As Object Dim I As Integer Dim j As Integer Set objExcel = CreateObject("Excel.Application") Set objExApp = objExcel.Application objExApp.Visible = True Set objWorkbooks = objExApp.Workbooks Set objWorkbook = objWorkbooks.Open(fpath) objExcel.DisplayAlerts = False 'System.Threading.Thread.Sleep(5000) Set objSheets = objExApp.Sheets Set objSheet1 = objSheets(1) objSheet1.Delete Set objSheet1 = objSheets(1) Set objSheet2 = objSheets("シート名") objSheet2.Copy Before:=objSheet1 Set objSheet3 = objSheets("シート名 (2)") '前回と同じコピーに流し込む Set objCells = objSheet3.Cells Call Ary関数 For j = 0 To UBound(Ary関数, 1) For I = 1 To UBound(Ary関数, 2) objCells(j + 1, I + 2) = Ary関数(j, I) Next Next objWorkbook.SaveAs (fpath) objExApp.Quit objExcel.DisplayAlerts = True Set objCells = Nothing Set objSheets = Nothing Set objSheet1 = Nothing Set objSheet2 = Nothing Set objSheet3 = Nothing Set objWorkbook = Nothing Set objWorkbooks = Nothing Set objExApp = Nothing Set objExcel = Nothing end function |
今までは意識してなかったけどVBAではオブジェクト解放は要らない?
プロセスは残らないが・・
とりあえずset=nothingで安心することに。
前回の続きです。
excelを開いて、あるワークシートのコピーを最前列に追加、
適当なセルから順に配列の値を流し込んで保存して閉じる。
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 68 69 70 71 72 73 |
Dim objExcel As Object = Nothing Dim objExApp As Object = Nothing Dim objWorkbook As Object = Nothing Dim objWorkbooks As Object = Nothing Dim fpath As String fpath = "ファイル.xlsのパス" Dim objSheets As Object = Nothing Dim objSheet1 As Object = Nothing Dim objSheet2 As Object = Nothing Dim objSheet3 As Object = Nothing Dim objCells As Object = Nothing Dim i As Integer Dim j As Integer Try objExcel = CreateObject("Excel.Application") objExApp = objExcel.Application objExApp.Visible = True 'objExApp.EnableEvents = False objWorkbooks = objExApp.Workbooks objWorkbook = objWorkbooks.Open(fpath) objExcel.DisplayAlerts = False 'System.Threading.Thread.Sleep(5000) objSheets = objExApp.Sheets objSheet1 = objSheets(1) objSheet1.delete '前回の入力は削除 Marshal.ReleaseComObject(objSheet1) objSheet1 = objSheets(1) objSheet2 = objSheets("シート名") objSheet2.Copy(Before:=objSheet1) Marshal.ReleaseComObject(objSheet1) Marshal.ReleaseComObject(objSheet1) 'なぜか2回解放が必要 Marshal.ReleaseComObject(objSheet2) objSheet3 = objSheets("シート名 (2)") objCells = objSheet3.Cells Call Ary関数() '別にpublic function Ary関数()で作成、二次元配列 For j = 0 To UBound(Ary関数, 1) For i = 1 To UBound(Ary関数, 2) objCells(j + 1, i + 2) = Ary関数(j, i) 'この辺は入れたい場所でいろいろ変化 Next Next Marshal.ReleaseComObject(objCells) Marshal.ReleaseComObject(objSheet3) Marshal.ReleaseComObject(objSheets) objWorkbook.SaveAs(fpath) Marshal.ReleaseComObject(objWorkbook) Marshal.ReleaseComObject(objWorkbooks) objExApp.Quit() objExcel.DisplayAlerts = True Marshal.ReleaseComObject(objExApp) Marshal.ReleaseComObject(objExcel) objCells = Nothing objSheets = Nothing objSheet1 = Nothing objSheet2 = Nothing objSheet3 = Nothing objWorkbook = Nothing objWorkbooks = Nothing objExApp = Nothing objExcel = Nothing Catch ex As Exception Throw End Try |
難しい
以前ここでExcel出力のことを書いたけど
裏技的で推奨できない。
正攻法で行くことにしました。
Excel参照設定もクライアント環境で違うでしょうから依存しない実行時バインディングで・・
excelのプロセスが残らないようにするのが大変でした
まずは単純に開いて5秒待って閉じるだけ
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 |
Public Shared Sub Excelmain2() Dim objExcel As Object = Nothing Dim objExApp As Object = Nothing Dim objWorkbook As Object = Nothing Dim objWorkbooks As Object = Nothing Dim fpath As String fpath = "xlsファイルのパス" Try objExcel = CreateObject("Excel.Application") objExApp = objExcel.Application objExApp.Visible = True objWorkbooks = objExApp.Workbooks objWorkbook = objWorkbooks.Open(fpath) System.Threading.Thread.Sleep(5000) objExcel.DisplayAlerts = False Marshal.ReleaseComObject(objWorkbook) Marshal.ReleaseComObject(objWorkbooks) objExApp.Quit() objExcel.DisplayAlerts = True Marshal.ReleaseComObject(objExApp) Marshal.ReleaseComObject(objExcel) objWorkbook = Nothing objWorkbooks = Nothing objExApp = Nothing objExcel = Nothing Catch ex As Exception Throw End Try End Sub |
開いて閉じるだけでも変数が多くて混乱します
次に開いてセルに文字代入して保存して閉じる。
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 |
Public Shared Sub Excelmain3() Dim objExcel As Object = Nothing Dim objExApp As Object Dim objWorkbook As Object = Nothing Dim objWorkbooks As Object Dim fpath As String fpath = "xlsファイルのパス" Dim objSheets As Object = Nothing Dim objSheet As Object = Nothing 'Dim objRange As Object = Nothing Dim objCells As Object = Nothing Try objExcel = CreateObject("Excel.Application") objExApp = objExcel.Application objExApp.Visible = True objWorkbooks = objExApp.Workbooks objWorkbook = objWorkbooks.Open(fpath) System.Threading.Thread.Sleep(5000) objSheets = objExApp.Sheets objSheet = objSheets(1) objCells = objSheet.Cells objCells(2, 2) = "hogehoge:" & Now Marshal.ReleaseComObject(objCells) Marshal.ReleaseComObject(objSheet) Marshal.ReleaseComObject(objSheets) objExcel.DisplayAlerts = False objWorkbook.SaveAs(fpath) Marshal.ReleaseComObject(objWorkbook) Marshal.ReleaseComObject(objWorkbooks) objExApp.Quit() objExcel.DisplayAlerts = True Marshal.ReleaseComObject(objExApp) Marshal.ReleaseComObject(objExcel) objCells = Nothing objSheets = Nothing objSheet = Nothing objWorkbook = Nothing objWorkbooks = Nothing objExApp = Nothing objExcel = Nothing Catch ex As Exception Throw End Try End Sub |
セルに代入するだけで変数が増えました。
これを踏み台にdatatableの数値を配列を使ってExcelのセルに代入する。
1 |
netstat -nao | find "ポート番号" | find /c /v "" |