タグ

ブックマーク / foolexp.wordpress.com (6)

  • ADO – 愚者の経験

    クライアントでテキストファイル(csv)を処理してテーブルに 取り込む操作があったのですがそれが遅いとの事。 普通に「insert into xxxxx values(zzzzzzz,zzzz,zzzz)」系の 文字列にして、ADODB.Commandにセットしていたんですが 良かれと思ってあることをしていたのです… Dim InsertSQL As String Dim ValuesSQL As String Dim Row As String Dim rCount As Long Dim fNO As Long fNO = FreeFile InsertSQL = "insert into xxx(xxxx,xxx,xx,x)" Open filePath For Input As #fNO Do Until EOF(fNO) rCount = rCount + 1 Line Inpu

    ADO – 愚者の経験
    mnru
    mnru 2020/09/26
  • コンストラクタで引数を入れたい

    VBAのクラスによくあげられる問題点として 「Class_Initializeイベントに引数が持てない」というものがあります。 なのでNewの後に必ず何かメソッドを実行したり、標準モジュールを経由してインスタンス化するなどいろいろしてきたわけですが、Implementsを使った面白い方法がありましたので紹介します。 参考URL:http://hpcgi1.nifty.com/MADIA/VBBBS2/wwwlng.cgi?print+200511/05110142.txt 参考というかまんまです。 IConstructorクラス

    コンストラクタで引数を入れたい
    mnru
    mnru 2020/03/25
  • VBAの擬似継承

    Implementsは「親クラスの実装をすべて書く」というのが最大のネックです。 プロパティ「Value1」「Value2」の値を足したり引いたりするだけでも Implementsした場合は「親クラス_Value1」と「親クラス_Value2」のプロパティの定義が必須です。 違いだけ記述しつつ、多態性を利用するにはどうすればいいか考えました。 最終的にどうなるかというと ・親クラスと対になる操作クラス(自分で命名)を定義 ・操作クラスは親クラスのインスタンスを持つ(変数名「This」とする) ・子クラスは親クラスをImplementsして、操作クラスのインスタンスを持つ(変数名「Base」とする) ・操作クラスの親クラスのインスタンス(This)に子クラスを代入する(ImplementsしているのでOK) ・親クラスには多態性を利用したいものだけを定義 ・操作クラスでは多態性を利用しないプ

    VBAの擬似継承
    mnru
    mnru 2020/03/23
  • Accessでaccdbを使わずに他のDBを使ってみる – SQLite編1

    Accessと同じくファイルDBで、しかもAndroidなどにも広く使われている「SQLite」を バックエンドに置きAccessのaccdbと比べて利点があるのかを調べてみます。 まず接続からいきます。 どうやら「SQLite」用のOLEDBプロバイダは家で開発しておらず、サードパーティ製を使うしかないようです。ODBCドライバもサードパーティならあるようです。ここではOLEDBプロバイダを利用して実験します。 SQLite OLE DB Provider:http://cherrycitysoftware.com/ccs/providers/provsqlite.aspx SQLiteのテーブル等を作成するために管理ツールも準備します。「tkSQLite」を使いました。 tkSQLite:http://reddog.s35.xrea.com/wiki/TkSQLite.html 早速

    Accessでaccdbを使わずに他のDBを使ってみる – SQLite編1
    mnru
    mnru 2018/11/12
  • Access 自分自身を最適化

    Access2007以降になって自分自身を最適化するのは難しくなっています。 そこで同じディレクトリにVBScriptを作って、パスを渡して最適化させるものを作りました。 Compact.vbs Option Explicit ‘***注意*** ‘他にAccessプログラムが起動してあると失敗します。 Dim Shell Dim accdb ‘Accessを終了するまでの時間稼ぎ MsgBox “最適化を開始します。”, vbInformation, “最適化開始” Set Shell = CreateObject(“WScript.shell”) ‘Accessファイルパスを引数で渡して最適化を実行する For Each accdb In WScript.Arguments Shell.Run “cmd /c ” & accdb & ” /compact”, 0 WScript.Sle

    Access 自分自身を最適化
    mnru
    mnru 2017/02/03
  • [SQL]動的にin句を変化させるような時の代替案

    ふと気づいた。 select * from table1 where id in(@param) というような形で「@paramに動的な複数値をカンマ区切りで渡したい」と いう要望は結構ある。しかしこの状態では期待した結果にならないので executeやsp_executesql(動的SQL実行)を使う execute ('select * from table1 where id in('+@param+')') これは期待通りの結果になるのだが、いかんせんAccessと相性が悪いため (カラム名が解決できないのでコントロールソースが手入力になるなど)SQLCLRを使って カンマ区切りをテーブルにして返す関数(Split)を作成すると良いと最初は思いました。 苦労してSQLCLRを調べたりしたんですがそんなことしなくてもできます。 もちろん動的実行しなくてもできます。こうすればよかったん

    [SQL]動的にin句を変化させるような時の代替案
    mnru
    mnru 2015/06/15
  • 1