hakeの日記

Windows環境でプログラミングの勉強をしています。

C# - コマンドライン環境での外部アセンブリの参照方法

Json.NETを試した時のメモ。

  1. 本家サイトから入手し、展開したNewtonsoft.Json.dllを適当なフォルダの置く(例:c\:foo)
  2. /libおよび/referrenceオプションを付けてコンパイルする。
csc.bat  program.cs  /lib:C:\foo  /reference:Newtonsoft.Json.dll

 

ソースにusingでアセンブリを追加する。

using System;
using Newtonsoft.Json;

以下略

EXCEL VBAメモ - 複数ファイルを同時オープンする場合のFileNumberの取得

マクロを組んでいて少し悩んだのでメモ
テキストファイルを読み書きする際にはFreeFile関数でFileNumberを取得して、ファイルに割り当てて使用するが、以下の様に事前にFileNumberを取得すると書き込み用ファイルのオープンで「ファイルは既に開かれています」というエラーになった。
原因は、変数 fni および fno に同じ値 1 が割り当てされていた為。

Sub test()
    Dim fni As Long
    Dim fno As Long

    fni = FreeFile
    fno = FreeFile
    Open ThisWorkbook.path & "\test1.csv" For Input As #fni
        Open ThisWorkbook.path & "test2.csv" For Append As #fno
            '処理
        Close #fno
    Close #fni
End Sub

 

この様な場合は、最初のFileNumberでオープンした後に次のFileNumberを取得する。

    fni = FreeFile
    Open ThisWorkbook.path & "\test1.csv" For Input As #fni
        fno = FreeFile
        Open ThisWorkbook.path & "test2.csv" For Append As #fno

EXCEL VBAメモ - SQLite3データベースのアクセス(SQLiteForExcel使用)

ExcelからODBCドライバをインストールせずにSQLite3へアクセスする方法

準備(64bit環境の場合)

  • Releases · govert/SQLiteForExcel · GitHub からSQLite For Excelの最新版を入手(現時点ではSQLiteForExcel-1.0.zip)しアーカイブの中から、SQLiteForExcel_64.xlsmをとりだして使用する。32bit環境では同梱されているSQLite3_StdCall.dllを同じ場所に置く必要があるようですが64bit環境では不要の様です。
  • SQLite Home Pageからsqlite3.dllを入手して別途コピーする。(現時点の最新は、sqlite-dll-win64-x64-3260000.zip)

 

動作確認

sqlite3.dllの置き場所に注意

    #If Win64 Then
        ' I put the 64-bit version of SQLite.dll under a subdirectory called x64
        InitReturn = SQLite3Initialize(ThisWorkbook.Path + "\x64")
    #Else

して、SQLiteForExcel_64.xlsmのSqlite3Demoモジュール中の AllTestsプロシージャを実行する。結果はDebug.Printでイミディエイトウィンドウに表示されるのでエラーが無ければOK

問題点

自分の環境(Winows10 1809 / Excel for Office 365(64bit) )ではTestBackupプロシージャの実行でExcelが落ちましたので、この機能は使用しないことにします。
 

続きを読む

EXCEL VBAメモ - SQLite3データベースのアクセス(SQLite ODBC使用)

ExcelからODBC経由でSQLite3へアクセスする方法

準備

  • SQLite ODBC Driver からSQLite ODBC Driverをダウンロードしてインストールする。64bit版はsqliteodbc_w64.exe(現時点の最新はVer.0.9996)
  • インストールを行うとsqlite3.dllがC:\Windows\System32に見つからないというメッセージが出るのでSQLite Home Pageからダウンロードして別途コピーする。(現時点の最新は、sqlite-dll-win64-x64-3260000.zip)

 

アンインストール時の注意点

インストールすると、C:\Windows\System32にいくつかのsqlite3*.*というファイルがコピーされるが通常のアンインストールで削除されないファイルがあるので完全にアンインストールを行う場合には手動で削除する必要がある。
 

参考

ODBCの操作については以下を参考にする

 

続きを読む

SQLite - 重複の除去(DISTINCT)

指定したカラムで重複ているものを除去して出力する

sqlite> select * from AAA;
tt          ii          rr
----------  ----------  ----------
aaa         1           1.0
aaa         1           2.0
aaa         2           3.0
aaa         2           4.0

sqlite> select distinct tt from AAA;
tt
----------
aaa

sqlite> select distinct tt,ii from AAA;
tt          ii
----------  ----------
aaa         1
aaa         2

sqlite> select distinct tt,ii,rr from AAA;
tt          ii          rr
----------  ----------  ----------
aaa         1           1.0
aaa         1           2.0
aaa         2           3.0
aaa         2           4.0

SQLite - 出力レコード数の制限(LIMIT, OFFSET)

LIMIT句で出力するレコード数を、OFFSET句で最初からスキップするレコード数を指定する。

sqlite> select * from AAA;
tt          rr
----------  ----------
aaa         8.0
bbb         7.0
ccc         6.0
ddd         5.0
aaa         4.0
bbb         3.0
ccc         2.0
ddd         1.0

sqlite> select * from AAA limit 1;
tt          rr
----------  ----------
aaa         8.0

sqlite> select * from AAA limit 3 offset 2;
tt          rr
----------  ----------
ccc         6.0
ddd         5.0
aaa         4.0

sqlite> select * from AAA order by rr limit 3 offset 2;
tt          rr
----------  ----------
bbb         3.0
aaa         4.0
ddd         5.0