前の10件 | -

DATABASEの存在チェック [SQL Server]

----------------------------------------------------------
(実行環境)

Microsoft SQL Server 2005 Express Edition
----------------------------------------------------------

SQL Serverにある名前のDATABASEが存在するか否かのチェック(確認)がしたい。
この場合、こちらの方法を使う。

SQL Server上のDBの名称一覧を取得し、調べたい名称を条件に加えれば存在チェック処理となる。

SQLのWhere条件を、副問い合わせで複数設定したい [SQL Server]

----------------------------------------------------------
(実行環境)

Microsoft SQL Server 2005 Express Edition
----------------------------------------------------------

SQLのSelect文で、引っ張ってくる条件を他のテーブルの条件で指定したい場合、副問い合わせを行う。

Ex)
  SELECT  項目1
         ,項目2
         ,項目3
  FROM  テーブル1
  WHERE  項目1 = (SELECT 項目A
               FROM テーブル2
               WHERE  項目B = ’hoge’)


ここで、副問合わせで取得するデータ数が1つ以下なら問題ないが、
複数行ある場合は、この文だとエラーとなる。

この場合は、”=” → ”IN” とするとOK。

”IN”の使い方知らなかったけど、色々便利に使えるっぽい。
入門書にも書いてるけど、使ってなかったなぁ~。




DataBaseのRestore(復元) [SQL Server]

----------------------------------------------------------
(実行環境)

Microsoft SQL Server 2005 Express Edition

----------------------------------------------------------

 VB.NETのコード上で、バックアップをとったDBを復元(Restore)したい。

できれば上書きではなく新規作成で、かつ、SQL文だけでお手軽に。。

 

色々紹介してくれるサイトがありましたが、こちらで紹介されている方法で対処。

これでバックアップを復元した新しいDBを作成できました。

上書きするには、「with Replace」構文とかなんとかが必要らしいですが、なんだかうまくいかず。。

一度Dropして削除してから新しく作ることでとりあえず対処。。

邪道な。。ゴミでるし。。

そのうちしっかり上書きしたいw


関数に渡す省略可能の引数に配列を渡す方法 [VB.NET]

----------------------------------------------------------
(開発・実行環境)

Microsoft Visual Studio 2005 Tools for Applications

Microsoft Visual Basic 2005
----------------------------------------------------------

 関数に引数を渡すのに、Optionalで渡すと省略可能になるので何かと便利なのですが、配列がわたせない。。

(Optionalで渡す場合は既存値を設定しなければいけないので。。)

 

でも規定値をNothingに設定したら渡せます。

または、Overloadsして引数の違う関数を作るとか。

 

助かった♪

 

参考:http://oshiete1.goo.ne.jp/qa1184886.html


DataGridViewで数値順に並び替える [DataGridView]

----------------------------------------------------------
(開発・実行環境)

Microsoft Visual Studio 2005 Tools for Applications

Microsoft Visual Basic 2005
----------------------------------------------------------

 DataGridViewのColumnヘッダをクリックしてソートする際、文字列順に並び変わる。

これを、特定のColumnにおいて、数値順に並び替えたい。

CellStyleのFormatを数値にしても効いてくれない。

どうもDataGridView全体で制御されてるみたい?

 

この場合、SortCompare イベントを使って解決。

イベント内に以下のコードを書くのみ(適宜カスタムしてね)。

     If e.Column.Index = (特定のColumn) Then
            e.SortResult = CInt(e.CellValue1) - CInt(e.CellValue2)
            e.Handled = True
        End If

たったこれだけなんて・・・。

このイベントは秀逸だわ。

 

参考)

http://dobon.net/vb/dotnet/datagridview/customsort.html

http://oshiete1.goo.ne.jp/qa3026757.html

 

(追記)

ただし、上記の e.SortResult プロパティはInteger の値を設定するため、値が大きいものについてはオーバーフローするので注意を要する。


SQL Server 2005 Express Edition のサーバ名 [SQL Server]

----------------------------------------------------------
(実行環境)

Microsoft Visual Studio 2005 Tools for Applications によるアプリケーション

Microsoft SQL Server 2005 Express Edition

----------------------------------------------------------

今日は「実行環境」です。

 

 SQL Server 2005 Express Edition のサーバ名(デフォルト)はこれ。

    "(local)\SQLEXPRESS"

 上記の「\ 」は「円マーク」です。

 Expressじゃないものは、 (local)ですね。

 

インストーラでExpressを必須コンポーネントで入れるときは、

SQL Server でつなぐときに参照するxmlファイルのサーバ名に注意。


空っぽのテーブルにデータを一括で挿入する [SQL Server]

----------------------------------------------------------
(開発・実行環境)

Microsoft Visual Studio 2005 Tools for Applications

Microsoft Visual Basic 2005

Microsoft SQL Server 2005

----------------------------------------------------------

マスタデータを一気にテーブルに流したいので、txtファイルから BULK INSERT ステートメントを実行する。

BULK INSERT        テーブル名
FROM                'C:\ファイル名.txt'
WITH(
    DATAFILETYPE = 'char',
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n'
)


INSERTするファイルは、SQL Server のデータを持ってるテーブルから予めエクスポートして取得しておく。

このときのコピー元ソースは「Microsoft OLE DB Provider for SQL Server」,

変換先は「フラット ファイル変換先」、

ファイル名は参照からディレクトリを選んでファイル名を指定してやる。

 

参考

http://d.hatena.ne.jp/tomoyamkung/20080910/1221018887


CREATE DATABASE ステートメント実行時のエラー [VB.NET]

----------------------------------------------------------
(開発・実行環境)

Microsoft Visual Studio 2005 Tools for Applications

Microsoft Visual Basic 2005

Microsoft SQL Server 2005

----------------------------------------------------------

 

VB から SQL Server にプログラムで新規にDBを作る場合、CREATE DATABASEステートメントを実行する。

が、普段 SELECT したり INSERT したりするのと同じように実行すると、

「CREATE DATABASE ステートメントは、複数のステートメントを含むトランザクション内では許可されません。」

とエラーが発生する。

 

こちら を参考にすると解決。(ありがとうございます!MSDN意味不明だもん。。)

自動コミットメントモード。。なんじゃそりゃ。。

 

トランザクションじゃない、ってことは、コミットしたりロールバックしたりしない、ってことか。

要は、SqlClient.SqlTransaction型の変数を使って、

BeginTransactionとか、

Rollbackだとか、

Commitなんかをしない、ってことかね。

なるほど。

 

ちなみに、CREATE TABLE は、SqlTransaction有りでも無しでも両方通った。

 

 

(追記)2009/10/30

バックアップファイルを作成する、BACKUP DATABASE ステートメントでも、CREATE DATABASE と同様の挙動が見られた。


ComboBoxを読み取り専用にして、表示を見られるようにしたい [コントロール]

----------------------------------------------------------
(開発・実行環境)

Microsoft Visual Studio 2005 Tools for Applications

Microsoft Visual Basic 2005

----------------------------------------------------------

取得したデータをComboBoxに表示したいけど変更はかけたくない。

要はReadOnly=Trueな状態にしたい。

でもReadOnlyプロパティは無いし、Enabled=Falseにしたら文字読みにくいし。。

 

ってわけで先輩が素敵な関数(イベントのサブルーチン)を与えてくれた♪

ComboBoxをEnabled=Falseのときに、ComboBox内の要素を指定した色に描画してくれるイベント。


    Private Sub cboAssetsDiv_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles cboAssetsDiv.DrawItem

        If Me.cboAssetsDiv.Enabled = True Then
            'Me.cboAssetsDiv.DrawMode = DrawMode.Normal
            Exit Sub
        End If

        '背景を描画する
        '項目が選択されている時は強調表示される
        e.DrawBackground()

        Dim cmb As ComboBox = CType(sender, ComboBox)
        '項目に表示する文字列
        Dim txt As String
        If cmb.FindString(cmb.Text) < 0 Then
            cmb.Items.Add(cmb.Text)
            'cmb.Items.Add(dt)
            cmb.DropDownStyle = ComboBoxStyle.DropDown
        End If
        txt = cmb.Text

        '使用するブラシ
        Dim b As Brush = New SolidBrush(SET_COLOR)
        '文字列を描画する
        Dim ym As Single = (e.Bounds.Height - _
            e.Graphics.MeasureString(txt, cmb.Font).Height) / 2
        e.Graphics.DrawString(txt, cmb.Font, b, _
            e.Bounds.X, e.Bounds.Y + ym)
        b.Dispose()

    End Sub


SET_COLORに文字色をセット。

 

DrawItemイベントは、DrawModeプロパティがNormalじゃないときに発生する。(デフォルトはNormal)

制御したいタイミングで、Enabled と DrawMode を切り替えて、上記のDrawItemイベントを走らせることで、表題の件を実現できるかと。

Enabled=Trueでは走らないようにしましょう。面白いことになるから・・・w

 

まぁ、ここまですんの?って感じだけど。

ComboBoxの読み取り専用制御、色々やり方はあるかと思いますが、一つありがたいソースをGet。


前の10件 | -

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。