VB.NET

2013年5月11日 (土)

データテーブルのレコード削除について

.Deleteは削除のフラグをつけるだけということで、
カウンタもそのまま使えるはずなのだが、上手くいかない。
どうも、
DBから検索してsqlAdpを使って作った場合は.Deleteは削除のフラグをつけるだけだが
自分でデータを入れて作ったデータテーブルでは.Deleteで削除され、rows.countも
減ってしまうようだ。

修正前
例えば3件目が削除対象だった場合、intI=2のレコードが削除され元4件めがintI=2の位置に来て
4件目のチェックが抜けてしまった。
本来の「.Deleteは削除のフラグをつけるだけ」なら上手くいく。
        Dim intI As Integer
        For intI = 0 to dTabNew.Rows.Count - 1
            If dTabNew.Rows(intI)("売上高_金額") = 0 And dTabNew.Rows(intI)("売上原価_金額") = 0 Then
                dTabNew.Rows(intI).Delete()
            End If
        Next

上手くいかなかったので修正した文

        Dim intI As Integer
        Do Until intI = dTabNew.Rows.Count
            If dTabNew.Rows(intI)("売上高_金額") = 0 And dTabNew.Rows(intI)("売上原価_金額") = 0 Then
                dTabNew.Rows(intI).Delete()
            Else
                intI += 1
            End If
        Loop

2013年4月 2日 (火)

VisualSourceSafeに手動で追加する方法

知らないうちにVB.NETのソリューションのVSSのマークがはずれていた。
新しいプロジェクトを追加しても+のマークがつかない。
VSを閉じ、ソリューションのファイルを手動で削除し、VSSで最新を取得して
VSを起動したが、ダメ。
試行錯誤したが、VSSからプロジェクトをはずす逆をやれば良いのだった。
ソース管理の変更の出し方
VisualStudioの
ファイル―ソース管理―ソース管理の変更

2013年2月 5日 (火)

VB.NETでデバッグがフリーズ

画面Aのボタンをクリックして帳票プレビューする処理をデバッグしようと
したところ、デバックモードに移らずフリーズしてしまった。
<原因>
画面AのプロパティTopMostが知らないうちにTrueになっていたため。
TopMostがTrueになると、TopMostがTrueになっていない全てのフォームの上に
常に表示される。
(VisualStudio2010)

2012年9月24日 (月)

画面に前の値が残る

ある画面を開いて閉じた後、また開くと前回の値が入力エリアに残ることがある。
これは、ShowDialogで開くと起こる。
新しく開きたい場合はShowを使う。

2012年7月23日 (月)

VisualSourceSafeからはずす方法

VSS(VisualSourceSafe)を利用しているソースを、VSS管理からはずしたい場合、
VisualStudioの
ファイル―ソース管理―ソース管理の変更
で表示されるソース管理の変更ダイアログで、解除したいプロジェクトを選択し
「バインドの解除」クリックする。

2012年7月20日 (金)

プロジェクトのビルド順を正しくする

ソリューションのビルド(またはリビルド)を行った際、先にビルドしておかないと
いけないプロジェクトが後になりエラーになることがある。
正しい順番でビルドさせるには、依存関係を設定しておく必要がある。

ソリューション右クリック―プロジェクトの依存関係
で設定する。

2012年7月 2日 (月)

VB2010 インストーラー作成でインストール先を指定する方法

1.Setupプロジェクトをクリック
2.ソリューションエクスプローラーの上部に表示される専用のボタンのうち、
  左から2番目のファイルシステムエディターをクリック
3.表示されたファイルシステムの、アプリケーションフォルダーを右クリックし
  プロパティを選択
4.プロパティのDefaultLocationにインストール先のパスを指定する。
  [Manufacturer]等はSetupのプロパティで指定した値。

2012年4月23日 (月)

StreamWriterの挙動について

①別のプロセスで開いている場合
writer = New StreamWriter("(パスとファイル名)", True, System.Text.Encoding.GetEncoding("Shift-JIS"))
実行時、
 ①-1 メモ帳で該当ファイルを開いていても、そのファイルはプログラムが使用する。
 ①-2 EXCELで該当ファイルを開いていたら、
 「システムエラーが発生しました。
 別のプロセスで使用されているため、プロセスはファイル'(パスとファイル名)'
 にアクセスできません。」エラーになる。
② 上記①-2の後、EXCELを閉じても、プログラムを閉じずに再実行すると同エラー。
  これは、下記★の行を追記することで解消。
Try
  writer = New StreamWriter("(パスとファイル名)", True, ・・・
  ・・・・
Catch ex As Exception
     Call clsMessage.DisplayMessage("CO", 17, vbCrLf & ex.Message)
        If m_writer IsNot Nothing Then m_writer.Dispose() ←★ 
        Return False
End Try

使用バージョン:VB2010

2012年4月 4日 (水)

更新SQLを実行後戻り値を取得する

ExecuteNonQueryで更新SQLを実行後、戻り値を取得したかった。
できるまで、結構苦労した。

Dim Sql As New StringBuilder    '参照[System.Text]
Dim param As SqlClient.SqlParameter 'SQLパラメーター

'パラメータを設定←SQL文の中ではパラメーターの宣言は不要となる
param = sqlCmd.Parameters.Add("@RET", SqlDbType.SmallInt)
'パラメータの入出力タイプを設定
param.Direction = ParameterDirection.Output

Sql.Append("IF EXISTS (SELECT BU_CD FROM  T_PAY_UNITPRICE WHERE YM = '")
Sql.Append(cboYM.Text.Replace("/", ""))
Sql.Append("' AND BU_CD = '")
Sql.Append(.GetData(p_intR, GridCol.cBU_CD))
Sql.Append("')")
Sql.Append(vbCrLf)
Sql.Append("BEGIN")
Sql.Append(vbCrLf)
Sql.Append("SET @RET = 2")
Sql.Append(vbCrLf)
Sql.Append("UPDATE ・・・・
Sql.Append("END")
Sql.Append(vbCrLf)
Sql.Append("ELSE")
Sql.Append(vbCrLf)
Sql.Append("BEGIN")
Sql.Append(vbCrLf)
Sql.Append("SET @RET = 1")
Sql.Append(vbCrLf)
Sql.Append("INSERT INTO ・・・・

'SQL実行
sqlCmd.CommandText = f_CreateSQL(intR, p_shtKBN, dtDTTM.ToString("yyyyMMddHHmmss"))
sqlCmd.Transaction = sqlTr
sqlCmd.ExecuteNonQuery()
shtType = sqlCmd.Parameters("@RET").Value

2012年3月28日 (水)

Optional引数の省略値が効かない

Public Shared Sub s_WriteProof(p_intRow As Integer, p_shtType As Short, p_strDTTM As String, _
                                   Optional p_shtFixKBN As Short = 99, Optional p_blnFix As Boolean = Nothing, _
                                   Optional p_strYM As String = "")
のように宣言したプロシージャ内で、p_shtFixKBN を指定せずに呼び出しても

p_shtFixKBNの値が0になっていた。

<対応策>

Optional p_shtFixKBN As Short = 99

Optional ByRef p_shtFixKBN As Short = 99

と修正すると省略値が効いた。

Version:VisualBasic2010