おすすめ本

最近のトラックバック

  • event (夢茶爺&苦茶爺のPC奮戦備忘録)

AccRanking

Ad

« 2016年2月 | メイン | 2016年4月 »

2016年3月

2016年3月16日 (水)

VB.NETでのXMLファイルをINIファイル風に使う方法について

INIファイルは簡単にプログラムの動作パラメータなどを保存しておくには便利な機能です。 この機能をXMLファイルで出来る様にクラスを作成してみました。 「VB.NETでのINIファイルからのデータ取得・書込について」の記事で作成したINIファイル用クラスにほぼ似せています。

XMLファイルの構造は以下の様になります。
Xml1

以下にXMLファイルを取り扱うクラスのソースを示します。

このクラスを利用する例を以下に記します。 尚、このクラスですが各関数でエラーが発生した時には Throw ex で返していますので、 呼び出し元では Try...Catch でエラー処理の記述が必要です。
(以下の例ではそれはしていませんが…)
このプログラムを実行すると、XMLファイルは以下の様に変更されます。 Xml2
デル株式会社
■関連記事
VB.NETでのINIファイルからのデータ取得・書込について

世界でいちばん簡単なVisualBasicのe本[最新第4版] VisualBasicの基本と考え方がわかる本
.NET開発テクノロジ入門2016年版Visual Studio 2015対応版

2016年3月15日 (火)

VB.NETでのINIファイルからのデータ取得・書込について

INIファイルというと今更感がありますが、 簡単にプログラムの動作パラメータなどを保存しておくには便利な機能です。 私もプログラムの変更なしに、外からタイミングの時間の値を後から少し変えたい場合によく使います。

INIファイルの構造は以下の様になります。
----------
[SECTION1]
KEY1=keydata1
KEY2=keydata2

[SECTION2]
KEYA=keydataA
...
----------

■セクション

[] で囲まれた部分がセクションで、各セクションの中にキー文字列を宣言します。

■キー 各セクションの中に宣言される文字列で、その値を = で定義します。
セクションが異なれば、同じキーが在ってもOKです。

■コメント

先頭に ;(セミコロン) を置くとその行はコメント行とみなされます。
また、行の途中に ;(セミコロン) が在ると、それ以降はコメントであるとみなされます。

■エスケープシーケンス

キーの値の文字列として ;(セミコロン) :(コロン) =(等号) #(シャープ)  の各文字を含めたい場合があります。その時には各文字の前に \(円マーク) を置きエスケープしてやります。
(以下のソースのクラスではエスケープシーケンスの設定と解除を関数化しています)

以下にINIファイルを取り扱うクラスのソースを示します。


このクラスを利用する例を以下に記します。

INIファイルへの書込みでエスケープしないといけない文字を含んでいますので、 このプログラムを実行し「TEST.INI」をテキストエディタで確認すると、  \(円マーク) が付加されて書き込まれているのがわかるはずです。

Ini1


デル株式会社

■関連記事
VB.NETでのXMLファイルをINIファイル風に使う方法について

Visual Basic 2013逆引き大全 555の極意【電子書籍】[ 増田智明 ]

価格: 2,527円
(2016/09/29 14:32時点 )

感想:0件

2016年3月14日 (月)

Oracleでのログインエラーでアカウントがロックされた場合の、強制ログインを使った対処方法

オラクルでログイン処理で何回もエラーを起こした場合には、既定回数を超えるとアカウントがロックされてしまいます。

以下のSQLの実行を見てください。(SQLコマンドラインから実行しています)
なお、既定回数はデフォルトでは10回の様です。10回目の「CONNECT」でアカウントがロックされました。


このTESTユーザのアカウントのロックを解除する為に、強制的にログインします。 「/ AS SYSDBA」でのログインはOS認証で「SYSDBA」の権限を持つログインになります。


「ALTER USER」命令によりアカウントをアンロックしています。
尚、強制ログインの方法は「CONNECT SYSTEM/MANAGER AS SYSDBA」などもあります。

新・門外不出のOracle現場ワザ ?エキスパートが明かす運用・管理の極意【電子書籍】[ 五十嵐建平, 大塚信男, 小田圭二, 村方仁, 谷敦雄, 宮崎博之, 神田達成 ]

価格: 2,894円
(2016/09/29 14:00時点 )

感想:0件


楽天市場

■関連記事
Oracleファンクションのソースを表示する方法について・覚え書き
Oracleでのログインエラーでアカウントがロックされた場合の、強制ログインを使った対処方法
OracleでのPostgreSQLの「generate_series」(連続値の生成関数)的な使い方(LEVEL疑似列)
ORA-28002: the password will expire within 7 days がログイン時に発生
ORA-28001 the password has expired でユーザに接続不可

VB.NETの入力コントロールのフォーカス移動を「Enter」キーで行う

VB.NETのフォームに張り付けた入力コントロールの遷移は通常は「Tab」キーで行えますが、 「Enter」キーでも次の入力コントロールへフォーカスを移動したい要求は少なからずあります。

普通の人はテキストボックスに何かを入力し、入力の最後に「Enter」を押したくなります。 キーボードの配置(形)からしても1個の入力後は「Enter」を押すことが前提の様な感じがします。

さて、複数のTextBoxを並べたFormを例にしますが、画面的には以下の様な感じです。 この画面で、各TextBoxで「Enter」キーを押下した時に、次のコントロールにフォーカスを移動させます。

Enter1



次のコントロールにフォーカスを移動させるためのメソッドが、Formコントロールのメソッドとして在ります。 以下のメソッドがそうです。
-----
SelectNextControl(ctl As System.Windows.Forms.Control, forward As Boolean, tabStopOnly As Boolean, nested As Boolean, wrap As Boolean) As Boolean
-----

引数内容
ctl 検索を開始する位置にある System.Windows.Forms.Control
forward タブ オーダー内を前方に移動する場合は true、後方に移動する場合は false
tabStopOnly System.Windows.Forms.Control.TabStop プロパティが false に設定されているコントロールを無視する場合は true、それ以外の場合は false
nested 入れ子になった (子コントロールの子) 子コントロールを含める場合は true、それ以外の場合は false
wrap タブ オーダーの最後のコントロールに到達した後、タブ オーダーの最初のコントロールから検索を続行する場合は true、それ以外の場合は false



このメソッドをKeyDownイベントで呼出せる形でメソッド化し、 FormのKeyDownで呼出してやるか、または、フォームのコンストラクタでKeyDownイベントにハンドラとして追加してやります。
以下のソースでは、コンストラクタでKeyDownイベントにハンドラを追加しています。



■「Enter」キーによるコントロールの移動メソッド時にビープ音の消音

入力コントロールで「Enter」キーを押下するとビーとBeep音がなります。 これを止めるには、KeyDownイベントで「Enter」の次のコントロール移動をした様に、 KeyPressイベントで、「Enter」キー入力時にイベント処理のキャンセルを行うことです。
デル株式会社

VB.NETのオブジェクト型(Object)から各数値データ型(Integer,Long,Decimal,Double)変換について

花粉予報が気になる時期になってきました。「花粉」という言葉に春を感じますが、みなさんは如何でしょうか。

春と言えばフレッシュな社会人や学生さんを連想しますが、VB.NETを始めたころも春だった様な...

そこでこのブログのVB.NET関連の記事ですが、データ変換などと基本的なものを取り上げました。 オブジェクト型から各種のデータ型への変換関数を以下のソースに示します。 オブジェクト型から変換する場合、いろいろな方法がありますが、 各データ型への変換メソッド「Parse」を使うのが一番簡単です。 この「Parse」ですが、変換に失敗を Try ... Catch で捉えられるのでエラー発生時にデフォルト値を返します。

これらの関数を利用する場面ですが、 データベースからの数値データを取得する場合にNULLデータを0に変換したい時によく使っています。


このソースは単に「Public Function」と宣言していますので、 静的なModuleかSharedなクラスで宣言してどこからでも参照出来る様にすればいいと思います。

デル株式会社

2016年3月13日 (日)

VB.NET:2個のSpread間での[Enter]キー、矢印キーなどでフォーカス移動を行う方法

2個のSPREADコントロールをフォームに貼って、それぞれ2列×5行のシートを同じ様に設定します。
基本的な設定はSPREADコントロールのデザイナで設定していますが、以下の様な表示になります。

Spread1


今回の動作の想定は以下の様に考えます。
・セルは全てテキスト入力で「←」「→」はセル内での左右移動
・「Tab」、「Enter」、「Ctrl」+「←」、「Ctrl」+「→」はアクティブセルの移動
 但し、左SPREADのDATA2の最下行セルの場合、右SPREADのDATA1の先頭セルに移動
 また、右SPREADのDATA1の先頭セルの場合、左SPREADのDATA2の最下行セルに移動

今回の処理では以下の処理が肝になります。


■初期処理でのSPREADのキー動作設定

そのままですと、矢印キーなどでアクティブセルの移動ができないのでキー制御をフォームロード時に行います。
・入力マップの変更で編集中セルでの「Enter」キー動作を指定します。 ・各セルをTextCellTypeにしますが、「矢印キー」の動作を、「矢印キー」のみはカーソルのセル内のみ左・右移動で、 「Ctrl」+「矢印キー」はセル編集を終了し、アクティブセルのカーソル方向移動に設定します。

■Advanceイベントでの処理

AdvanceイベントはSPREADコントロールからフォーカスが移動する場合に発生します。 今回の場合は以下のキー入力でイベントが発生します。
・DATA1カラムで「Shift」+「←」、「Tab」、「Enter」
・DATA2カラムで「Shift」+「→」、「Tab」、「Enter」
・DATA1カラム及びDATA2カラムの先頭行で「↑」
・DATA1カラム及びDATA2カラムの最下行で「↓」

左SPREADでのAdvanceイベントで、DATA2カラムで最下行の場合、イベントの「e」引数の「Cancel」プロパティを Falseにすることでデフォルト処理をさせることで、右SPREADにフォーカスが移動します。

右SPREADでのAdvanceイベントで、DATA1カラムで先頭行の場合、イベントの「e」引数の「Cancel」プロパティを Falseにすることでデフォルト処理をさせることで、左SPREADにフォーカスが移動します。

■EditModeOnイベントでの処理

尚、現在のセルを分かりやすくするために、EditModeOnイベント(編集開始時処理)で編集中セルの背景色を変更しています。

デル株式会社

■関連記事
VB.NET:SpreadでのEnter時にセルを右移動させる方法
VB.NET:Spreadでフォーカスを持っていない時にセル枠を表示しない設定
VB.NET:Spreadのヘッダカラム及び、通常のカラムの連結
VB.NET:Spreadのシートへの簡単な一覧データの設定について
VB.NET:Spreadのシートのセルにボタン、テキスト、チェックボックスのセルタイプの設定
VB.NET:Spreadのセルのボタンクリック時のイベント処理
VB.NET:Spreadのセルへのデータ設定の描画速度アップ
VB.NET:Spreadのセルのチップウインドウで別に設定された文字列を表示する
VB.NET:Spreadでデータ一覧表示を簡単に行う方法について
VB.NET:Spreadデータ一覧表示での行選択処理(CellDoubleClickイベント , KeyDownイベント)
VB.NET:Spreadデータ一覧表示での行選択処理(CellDoubleClickイベント , KeyDownイベント)その2
VB.NET:Spreadデータ一覧表示での自動ソート実行時に複数のソート条件を指定する方法について
VB.NET:Spreadで異なるSPREADコントロール間でシートデータのコピーを行う方法
VB.NET:SpreadでのCSV出力とCSV入力を使って、異なるSPREADコントロール間でシートデータのコピーを行う方法
VB.NET:SpreadシートのPDF出力と表示を行う方法
VB.NET:Spreadの数値セルタイプを使ってデータメンテナンスのプログラムに使う方法
VB.NET:Spreadのテキストセルでバイト数入力制限を掛ける方法
VB.NET:Spreadのチェックボックス型セルにはCheckChangedイベントを、ボタン型セルにはClickイベントの発生方法


楽天市場

2016年3月12日 (土)

OracleでのPostgreSQLの「generate_series」(連続値の生成関数)的な使い方(LEVEL疑似列)

前回、PostgreSQLにおいて、複数行の整数を返すことができる関数「generate_series」を紹介しましたが、 Oracleでは関数ではなく階層問合せ用の「LEVEL疑似列」を使うことで可能になります。

以下のSQLの実行を見てください。(SQLコマンドラインから実行しています)

階層問合せにおいて「CONNECT BY」句は親子関係の条件を指定するのですが、 この場合は 「LEVEL疑似列」自身がそのまま、それ自体として条件づけられるので、 「LEVEL <= 5」により5個以下のレベル値が返るようです。 私自身もよくわかっていないのですが...

さらにこのSQL文をテーブルとして扱えば、以下の様にもできます。
■関連ページ
SELECT文に関する基礎的なこと
SELECT文に関する基礎的なこと2
副問い合わせを含むSELECT文について
集合演算子を使ったSELECT文について
CASE式を使ったSELECT文について

楽天市場

デル株式会社

2016年3月11日 (金)

あるフォルダに置いて起動するとそのフォルダがカレントディレクトリになるバッチ(BAT)ファイル

たまにDOSプロンプトを開いて作業を行いたい場合があります。
ただ、フォルダの階層が深い場合にはDOSプロンプトを開いてそのディレクトリに 「CD」コマンドでチェンジすることが面倒なときがあります。

その時は、以下のバッチファイルをそのディレクトリに置いて実行します。

Bat1


「dos.bat」が該当するバッチなので、それを起動します。

Bat2

2016年3月10日 (木)

PostgreSQLではオラクルの様なDUAL表は存在しません

PostgreSQLでシステム日付を取得する場合には、以下の様なFROMの無いSQL文で行います。 PostgreSQLではFROMが必要なければ記述することはありません。

PostgreSQLの「SQL Shell(psql)」で実行します。


定数を同時にSELECT取得することもできます。


ここで、PostgreSQLの面白い関数について紹介します。 それが「generate_series」で複数行の整数を返すことができます。

関数 動作内容
generate_series(start, stop) グラフィックstartからstopまでの刻み1で連続する値を生成
generate_series(start, stop, step) startからstopまでの刻みstepで連続する値を生成



以下にその例を示します。


1番目の様にSELECT文のなかのカラムを記述するところにいれてもいいですし、 また、2番目の様にFROM句でテーブル扱いにしてもOKです。 さらに、3番目ではテーブルの別名として「NumTbl(NumVal)」(仮にここでの命名)とすると 生成される数値を「NumTbl」テーブルのカラム名「NumVal」で参照ができます。

この3番目の方法を使うことでいろいろ応用が利くと思います。 以下は、今日からの3日間を羅列するSQL文になります。



デル株式会社


楽天市場

2016年3月 9日 (水)

Windowsの古いヘルプファイル(*.hlp)を見られる様にする方法

このブログで「CSE」についての記事が在りますが、 「CSE」でヘルプを見ようと思うと以下の様な表示になります。

Help1


「CSE」は古いソフトなのでヘルプファイルが「.hlp」の拡張子で 形式が古いので、Windows7等ではそのままでは表示できません。

古いソフトに付属するヘルプファイル(".hlp" の拡張子を持つ32 ビット ヘルプ ファイル)を 表示するためには、Microsoftが提供する以下のプログラムをインストールする必要があります。

■Windows7用
Windows 7 用 Windows Help プログラム(WinHlp32.exe)

■Windows8用
Windows 8.1 用 Windows Help プログラム (WinHlp32.exe)

上記のプログラムをインストールしたら、「CSE」のヘルプファイルが見られる様になりました。

Help2


デル株式会社