ぐ~たら ぷろぐらまー にっき

最近すぐ忘れるけー。

<SQLServer>バックアップ

自分めも。

めったにしないもんだから、毎回はまります。

何も考えずバックアップすると怒られます。
なんでかなー。

f:id:nekobasu6126:20181001141751p:plain


「メディアオプション」で「新しいメディアセットにバックアップし、すべての既存のバックアップセットを消去する」
を選択するとできました。

f:id:nekobasu6126:20181001142903p:plain



ここ、参考にさせていただきました。
助かりました。

SQLServer:完全バックアップを別データベースに復元する方法siguniang.wordpress.com

「ファイルを開く」ダイアログボックスの表示

めも

    ''' <summary>
    ''' 「ファイルを開く」ダイアログボックスの表示
    ''' </summary>
    ''' <param name="pFileName">初期表示するファイル名</param>
    ''' <param name="pDirectory">初期表示するディレクトリ</param>
    ''' <param name="pFilter">ファイルのフィルタ</param>
    ''' <param name="pFilterIndex">ファイルの種類 の初期設定</param>
    ''' <param name="pTitle">タイトル</param>
    ''' <param name="pMultiselect">複数のファイルを選択可能にする (初期値 False)</param>
    ''' <returns>ファイルのフルパス</returns>
    Public Function OpenFileName(Optional ByVal pFileName As String = "",
                                 Optional ByVal pDirectory As String = "C:\",
                                 Optional ByVal pFilter As String = "CSVファイル(*.csv)|*.csv;|すべてのファイル(*.*)|*.*",
                                 Optional ByVal pFilterIndex As Integer = 1,
                                 Optional ByVal pTitle As String = "ファイルを選択してください",
                                 Optional ByVal pMultiselect As Boolean = False) As String

        Dim ofd As New OpenFileDialog()

        ofd.FileName = pFileName
        ofd.InitialDirectory = pDirectory
        ofd.Filter = pFilter
        ofd.FilterIndex = pFilterIndex
        ofd.Title = pTitle
        ofd.Multiselect = pMultiselect

        ' ダイアログボックスを閉じる前に現在のディレクトリを復元する (初期値 False)
        'ofd.RestoreDirectory = True
        ' [ヘルプ] ボタンを表示する (初期値 False)
        'ofd.ShowHelp = True
        ' [読み取り専用] チェックボックスを表示する (初期値 False)
        'ofd.ShowReadOnly = True
        ' [読み取り専用] チェックボックスをオンにする (初期値 False)
        'ofd.ReadOnlyChecked = True
        ' 存在しないファイルを指定した場合は警告を表示する (初期値 True)
        'OpenFileDialog1.CheckFileExists = True
        ' 存在しないパスを指定した場合は警告を表示する (初期値 True)
        'OpenFileDialog1.CheckPathExists = True
        ' 拡張子を指定しない場合は自動的に拡張子を付加する (初期値 True)
        'OpenFileDialog1.AddExtension = True
        ' 有効な Win32 ファイル名だけを受け入れるようにする (初期値 True)
        'OpenFileDialog1.ValidateNames = True

        ' ダイアログを表示し、戻り値が [OK] の場合は、選択したファイルを表示する
        If ofd.ShowDialog() = DialogResult.OK Then

            If pMultiselect Then

                '複数選択の場合
                Dim strResult As String = ""
                For Each nFileName As String In ofd.FileNames
                    strResult = strResult & "," & ofd.FileName
                Next nFileName
                OpenFileName = strResult

            Else

                OpenFileName = ofd.FileName

            End If

        Else
            'キャンセルの時
            OpenFileName = ""
        End If

        ofd.Dispose()

    End Function

「名前をつけて保存」ダイアログボックスの表示

めも

   ''' <summary>
    ''' 「名前をつけて保存」ダイアログボックスの表示
    ''' </summary>
    ''' <param name="pFileName">初期値ファイル名</param>
    ''' <param name="pDirectory">初期値フォルダ</param>
    ''' <param name="pFilter">[ファイルの種類]に表示される選択肢</param>
    ''' <param name="pFilterIndex"></param>
    ''' <param name="pTitle">タイトル</param>
    ''' <returns>選択したファイルのフルパス</returns>
    Public Function SaveFileName(ByVal pFileName As String,
                                 Optional ByVal pDirectory As String = "\\tsclient\C\",   '"C:\"
                                 Optional ByVal pFilter As String = "CSVファイル(*.csv)|*.csv;|すべてのファイル(*.*)|*.*",
                                 Optional ByVal pFilterIndex As Integer = 1,
                                 Optional ByVal pTitle As String = "保存先のファイルを選択してください") As String

        'SaveFileDialogクラスのインスタンスを作成
        Dim sfd As New SaveFileDialog()

        '初期値ファイル名
        sfd.FileName = pFileName

        '初期値フォルダ
        sfd.InitialDirectory = pDirectory

        '[ファイルの種類]に表示される選択肢
        sfd.Filter = pFilter
        sfd.FilterIndex = pFilterIndex

        'タイトルを設定する
        sfd.Title = pTitle

        'ダイアログボックスを閉じる前に現在のディレクトリを復元するようにする
        sfd.RestoreDirectory = True
        '既に存在するファイル名を指定したとき警告する
        sfd.OverwritePrompt = True
        '存在しないパスが指定されたとき警告を表示する
        sfd.CheckPathExists = True

        'ダイアログを表示する
        If sfd.ShowDialog() = DialogResult.OK Then
            'OKボタンがクリックされたとき、選択されたファイル名を取得する
            SaveFileName = sfd.FileName
        Else
            'キャンセルのとき
            SaveFileName = ""
        End If

    End Function

指定した名前の列がデータテーブルに含まれるかの確認

メモ

DataColumnCollection.Contains メソッド (String) (System.Data)

   ''' <summary>
    ''' 指定した名前の列がデータテーブルに含まれるかの確認
    ''' </summary>
    ''' <param name="pColName">列名</param>
    ''' <param name="pTable">データテーブル</param>
    ''' <returns>存在する:True / 存在しない:False</returns>
    Public Function dtColumnExist(pColName As String, pTable As DataTable) As Boolean

        Dim Col As DataColumnCollection = pTable.Columns

        If Col.Contains(pColName) Then
            Return True
        Else
            Return False
        End If

    End Function

<SQL> Lag関数

SQLServer2012以降

同じ結果セットの前の行からデータにアクセスする。
現在の行の値と前の行の値を比較できる。

やりたいことは、
年月毎に持っているデータで、当月金額と前月金額を表示したい。
前月金額は先月のデータの当月金額を表示したい。
内部結合で考えていたけど、Lag関数というのがあるらしいので調べてみた。

LAG (scalar_expression [,offset] [,default])  
    OVER ( [ partition_by_clause ] order_by_clause )  


LAG (Transact-SQL) | Microsoft Docs

SELECT 年月日,部門CD,当月仕掛,lag(当月仕掛,1,0) over(partition by 部門CD order by 年月日) as 前月仕掛
FROM Table1


f:id:nekobasu6126:20180831160940p:plain

すっきりしていいんだけど、途中のデータが抜けた場合に困るかも。
2018年06月の次に2018年08月のデータが入った場合、6月データ見にいくみたい。

なのでやっぱり内部結合でダラダラ書こうかな。

With MM As
(
SELECT [部門CD] as '部門CD',[部門名] as '部門名' FROM TableBMN
)
 SELECT MM.[部門CD],MM.[部門名],TBL2.前月仕掛,Tbl.*
FROM MM
LEFT OUTER JOIN (SELECT * FROM Table1 WHERE left([年月日],6)='201807') as Tbl 
ON MM.[部門CD] = tbl.[部門CD]
LEFT OUTER JOIN (SELECT 部門CD,前月仕掛 FROM Table1  WHERE left([年月日],6)='201806') as Tbl2 
ON MM.[部門CD] = Tbl2.[部門CD]

年月はパラメータで渡す、と。

はてなブログでソースコード

ソースコードをブログの中に埋め込む方法

まず、編集方法は「はてな記法」にする。

「>||」「||<」

これで囲むと枠が出る。

http://hatenablog.com/


おぉ。

 >|vb|
 ・・・ソースコード
 ||<

VBでいいのかな。

   Private Sub setColReadOnly()
        For Each Col As KeyValuePair(Of Tuple(Of Integer, String, Boolean, Boolean, String), String) In dcColumns
            dgv.Columns(Col.Key.Item2).ReadOnly = Col.Key.Item3
        Next
    End Sub

おぉ。