MW211 EXIT

devlog
MSSQL/日付変換のストアドプロシージャ
2014年12月12日
日付変換関係のいろいろな処理を含んだストアドプロシージャは以下の通り。
┌──────────────────────────────────────┐
│CREATE PROCEDURE PROCEDURE_日付変換                                         │
│    @yyyymmdd char(8) = ''                                                  │
│AS                                                                          │
│BEGIN                                                                       │
│    DECLARE @return     int                                                 │
│    DECLARE @date       date                                                │
│    SET @return = 0                                                         │
│    IF @yyyymmdd = ''                                                       │
│        SET @yyyymmdd = CONVERT(NVARCHAR, GETDATE(), 112)                   │
│    BEGIN TRY                                                               │
│        SELECT @date = DATEFROMPARTS(substring(@yyyymmdd, 1, 4),            │
│                                     substring(@yyyymmdd, 5, 2),            │
│                                     substring(@yyyymmdd, 7, 2))            │
│    END TRY                                                                 │
│    BEGIN CATCH                                                             │
│        RETURN(-1)                                                          │
│    END CATCH                                                               │
│PRINT @date                                                                 │
│    RETURN(@return)                                                         │
│END;                                                                        │
└──────────────────────────────────────┘
分類:MSSQL
ExcelVBA/サブウインドウを開きつつ
2014年12月11日
サブウインドウを開きつつメインウインドウをいじりたい場合。

┌──────────────────────────────────────┐
│UserForm.Show                                                               │
└──────────────────────────────────────┘
通常は、サブウインドウが前面に表示されると奥にあるメインウインドウには
アクセスできない。
それはそれで使えるのだが、同時並行でメインウインドウも使いたい場合。

以下のように「vbModeless」をつける。
┌──────────────────────────────────────┐
│UserForm.Show vbModeless                                                    │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/ユーザ名とコンピュータ名を取得する
2014年12月09日
┌──────────────────────────────────────┐
│Private Function getユーザ名() As String                                    │
│    Dim objWSH As Object                                                    │
│    Set objWSH = CreateObject("WScript.Network")                            │
│    getユーザ名 = objWSH.UserName & "[" & objWSH.ComputerName & "]"         │
│End Function                                                                │
└──────────────────────────────────────┘
上記のような感じ。
「ユーザ名[コンピュータ名]」で取得できる。
分類:ExcelVBA
MSSQL/自動採番の取得
2014年12月08日
┌──────────────────────────────────────┐
│CREATE TABLE 表 (                                                           │
│    [キー]              [int] IDENTITY(1,1) NOT NULL,                       │
│    [列]                [int]               NULL,                           │
│    CONSTRAINT [主キー] PRIMARY KEY CLUSTERED (                             │
│        [キー]              ASC                                             │
│    )                                                                       │
│);                                                                          │
└──────────────────────────────────────┘
上記のような自動採番する表があって、
採番直後にその値を取得する方法には以下がある。
                                          ┌─────┬─────┬─────┐
                                          │セッション│ スコープ │ テーブル │
┌──┬─────────────────┼─────┼─────┼─────┤
│案1│SELECT MAX(キー) FROM 表;         │   全て   │   全て   │ 指定のみ │
├──┼─────────────────┼─────┼─────┼─────┤
│案2│SELECT IDENT_CURRENT('表');       │   全て   │   全て   │ 指定のみ │
├──┼─────────────────┼─────┼─────┼─────┤
│案3│SELECT @@IDENTITY;                │ 自身のみ │   全て   │   全て   │
├──┼─────────────────┼─────┼─────┼─────┤
│案4│SELECT SCOPE_IDENTITY();          │ 自身のみ │ 自身のみ │   全て   │
└──┴─────────────────┴─────┴─────┴─────┘
  セッションが「全て」のものは、同時に他から更新された場合、
  その影響を受けてしまう。
  スコープが「全て」の場合は、トリガなどにより連動した結果も反映されてしまう。
  よって、案4が一番安全なようだ。
分類:MSSQL
MSSQL/数値項目を文字列に変換する
2014年12月07日
【案1】キャストする
┌──────────────────────────────────────┐
│CAST([数値項目] AS varchar)                                                 │
└──────────────────────────────────────┘
  一番オーソドックスなやり方か。

【案2】型を変更する
┌──────────────────────────────────────┐
│CONVERT(varchar, [数値項目])                                                │
└──────────────────────────────────────┘
  これもオーソドックスなやり方か。

【案3】文字列に変更する
┌──────────────────────────────────────┐
│LTRIM(STR([数値項目]))                                                      │
└──────────────────────────────────────┘
  STR()で変換するのだが、左側に余計なスペースも入ってしまうので
  LTRIM()でこれを除去する。
分類:MSSQL
ExcelVBA/プルダウンで入力可不可
2014年12月06日
プルダウンメニュー(ComboBox)で、直接入力を可とするか否かの設定
┌────┬─────────────────────────────────┐
│入力可  │UserForm.ComboBox.Style = fmStyleDropDownCombo                    │
├────┼─────────────────────────────────┤
│入力不可│UserForm.ComboBox.Style = fmStyleDropDownList                     │
└────┴─────────────────────────────────┘
分類:ExcelVBA
WSH/実行パスにスペースが混じった場合
2014年12月05日
┌──────────────────────────────────────┐
│Dim objShell                                                                │
│Set objShell = WScript.CreateObject("WScript.Shell")                        │
│objShell.Run "~.exe"                                                       │
└──────────────────────────────────────┘
「WScript.Shell」の「Run」メソッドで実行ファイルのパスにスペースが
混じっていた場合、エラーとなってしまう。

画一的な解決策。
「""""」で囲う(実質「"」で囲ってことになる)。
┌──────────────────────────────────────┐
│objShell.Run """" & "~.exe" & """"                                         │
└──────────────────────────────────────┘
これなら、変数を介した時とかも画一的に対応できる。
分類:WSH・VBS
ExcelVBA/起動直後のブレークポイント
2014年12月04日
ExcelVBAでデバッグする時にブレークポイントを設定するが
「ThisWorkbook」などで起動直後に動作するプログラムに設定するのが難しい。
なぜなら、ブレークポイントは保存されず
エディタで設定しようとすると、エディタを起動するまでに動作済みとなるため
捕捉ができないからだ。

そんな時に便利なのが「Stop」命令。
┌──────────────────────────────────────┐
│Stop                                                                        │
└──────────────────────────────────────┘
プログラム中に記述して、保存すれば、起動時にそこで止まってくれるのだ。
いわば、ブレークポイントを保存する機能のようなもんだ。
分類:ExcelVBA
MSSQL/ユーザ関数の引数省略の罠
2014年12月03日
┌──────────────────────────────────────┐
│CREATE FUNCTION [dbo].[ユーザ関数] (@引数1 int,                             │
│                                    @引数2 int = 1)                         │
│:                                                                          │
└──────────────────────────────────────┘
上記(引数2)のように、引数を省略して既定値を活かす指定をした場合
「ユーザ関数(1)」でOKかと思いきやエラーとなる。
「ユーザ関数(1,DEFAULT)」と「DEFAULT」を明記してあげなければならないらしい。
分類:MSSQL
MSSQL/BULK INSERTによるCSV取込
2014年12月02日
一発でできる。すごい。
┌──────────────────┬───────────────────┐
│BULK INSERT [DB].[dbo].[表]         │                                      │
│    FROM 'ファイルフルパス'         │                                      │
│    WITH                            │                                      │
│    (                               │                                      │
│        FIELDTERMINATOR   = ',',    │区切り文字                            │
│        ROWTERMINATOR     = '\r\n', │改行文字                              │
│        FIRSTROW          = 2,      │明細開始行(ヘッダ行の有無)            │
│        LASTROW           = 0,      │明細終了行(フッタ行の有無) 0は末尾まで│
│        CHECK_CONSTRAINTS,          │制約をチェックする                    │
│        FIRE_TRIGGERS               │トリガを起動させる                    │
│    );                              │                                      │
└──────────────────┴───────────────────┘
分類:MSSQL
前へ 1 … 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 … 156 次へ