Rakuten

  • 楽天ダウンロード

    楽天市場

おすすめ本

天気予報

最近のトラックバック

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

カウンタ

VC

admax

« 2016年1月 | メイン | 2016年3月 »

2016年2月

2016年2月29日 (月)

VB.NET:Spreadでフォーカスを持っていない時にセル枠を表示しない設定

今回は、簡単なTIPSですが、SPREADがフォーカスを持っていない時にセル枠の表示をしない設定があります。
SPREADはフォーカスを持っているときには、以下の様にアクティブセルの枠が太枠で表示されます。

Focusframe1_3


SPREADコントロールの「RetainSelectionBlock」プロパティをFalseにすれば枠が通常のものになります。

SPREADからボタンにフォーカスを移動すると、以下の様になります。 (ボタンのクリック時イベントの処理には何も記述していないので、 ボタンをクリックすることでフォーカスは移動します。)

Focusframe2_4

■関連記事
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データ一覧表示での行選択処理(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:2個のSpread間での[Enter]キー、矢印キーなどでフォーカス移動を行う方法
VB.NET:Spreadの数値セルタイプを使ってデータメンテナンスのプログラムに使う方法
VB.NET:Spreadのテキストセルでバイト数入力制限を掛ける方法
VB.NET:Spreadのチェックボックス型セルにはCheckChangedイベントを、ボタン型セルにはClickイベントの発生方法


VB.NET:SpreadでのEnter時にセルを右移動させる方法

データの一覧や、エクセルライクでの入力などでよく「SPREAD for Windows Forms」を使用しています。 このSPREADですが、Microsoft純正のGridViewなどよりは使い勝手がいいのですが、使い方の癖がありますので、今後はいろんなTIPSを載せていこうかなと思っています。

先ずは最初に簡単なところで、SPREAD上で「Enter」キーを押下した時に次のセルに移動させる方法です。 以下の様に通常は、フォームのLoad時イベントなど設定してやります。 この例ではForm1にSpreadコントロールのspdListを貼り付けてあります。

■関連記事
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:2個のSpread間での[Enter]キー、矢印キーなどでフォーカス移動を行う方法
VB.NET:Spreadの数値セルタイプを使ってデータメンテナンスのプログラムに使う方法
VB.NET:Spreadのテキストセルでバイト数入力制限を掛ける方法
VB.NET:Spreadのチェックボックス型セルにはCheckChangedイベントを、ボタン型セルにはClickイベントの発生方法


CSEからORACLEへの接続

前回では、CSEから「PostgreSQL」に接続する方法を載せましたが、今回はオラクルへの接続についてです。

CSEでオラクルのデータベースに接続するには、「ociw32.dll」というDLLが必要な様です。 この「ociw32.dll」は通常このDLLはOracleホームディレクトリ以下のbinディレクトリに格納されています。

今回の接続テストは、同一PC上でオラクルとCSEをインストトールし行いました。 OSはWindows7で、オラクルは「Oracle Database 11g Express Edition」をインストールしました。 そこで、環境変数の「ORACLE_HOME」を設定されていることを確認します。
「Oracle Database 11g Express Edition」は、デフォルトでインストールすれば 「ORACLE_HOME」の値は「C:\oraclexe\app\oracle\product\11.2.0\server」になっているはずです。
それとPATHが通っていることを確認します。 「C:\oraclexe\app\oracle\product\11.2.0\server\bin;」が、 環境変数の「Path」に設定されていることを確認します。 (このパスは「ociw32.dll」が存在するフォルダです)

では実際にオラクルへの接続を行います。 下図はCSEからの接続時の様子です。 テストユーザとして「TEST」での接続を行います。 尚、このユーザは既にパスワードを「TEST」とし、「DBA」権限を与えてあります。 接続文字列として「localhost:1251/xe」を指定します。

接続文字列は host[:port][/service_name]です。
・host:接続先サーバのIPアドレス(今回は同一PC上なので「localhost」)
・port:ポート番号(デフォルト:1521)
・service_name:接続先のデータベース・サービスの名前です。Oracle Database XEのサービス名はXEです

Cse1

接続後は以下の表示になります。

Cse2

実際にSQLの実行を行ってみます。
システム時刻の取得を行いました。

Cse3

■関連記事
CSEからPostgreSQLへの接続
CSEの使い方、PostgreSQLテーブル作成とコンソールのグリッドからのデータ入力
CSEを使用してPostgreSQLテーブルの内容をCSVデータ出力(エキスポート)
CSEを使用したPostgreSQLのテーブルにCSVデータ入力(インポート)
スッキリわかるSQL入門 ドリル215問付き! スッキリわかるシリーズ



中古パソコン 【Windows7】 [T14B] 東芝 dynabook R731/B Core i5 2520M 2.5GHz 2GB 250GB 13.3ワイド DVD Multi Win7 Pro 【中古ノートパソコン】【ノートパソコン】【PC】【アウトレット】【中古】【1ヶ月保証】【RCP】【おすすめ】

価格: 20,800円
(2016/11/24 11:18時点 )

感想:1件

2016年2月23日 (火)

VB.NETのスレッドタイマ(System.Threading.Timer)を使った割込み処理について

VB.NETのコンソールプログラムでのタイマ割込み処理を行う場合、 スレッドタイマ(System.Threading.Timer)を使った方法があります。

フォームを持ったプログラムの場合には、Windowsタイマ(System.Windows.Forms.Timer)を 使えば簡単に割込み処理ができます。フォームにWindowsタイマのコントロールを張り付けて 各種のプロパティを設定すればOKです。

ただ、コンソールプログラムではフォームが無い場合が普通です。 そのため、タイマコントロールとは違う、スレッドタイマを使います。 以下のソースを見てください。

Main関数の処理の最初で、タイマイベント用の関数を宣言しています。 この関数はタイマ割込みが発生した時に実行する関数で、
次の行で生成されるタイマスレッドから実行されるデリゲートです。 タイマの間隔は1000msecに設定しています。

タイマイベントの関数では、タイマ割込みが在った証拠のフラグをONしているだけで、 メイン側ではそのフラグのONを見て、対応する処理を行っています。 例としては、現在時刻を表示しているだけです。

無限ループの中で、Sleep関数で待ち時間を使っています。 このSleep関数の行が無い状態でこのプログラムを実行すると、 CPU時間が非常に多く割かれてしまいます。 Sleepを入れることで、CPU時間はほぼ0%に近くなるはずです。


このソースは無限ループの処理になっていて、無限ループを抜ける処理については 考えていませんので、何か対策が必要です。
無限ループの方法はあまりスマートでは無いのですが、常駐させる様なプログラムでは有効ではないでしょうか。


2016年2月22日 (月)

マイナス金利について

最近、日銀が「マイナス金利」政策を発表した。銀行から預かったお金に対してマイナスの金利を付けると言う。
金利がマイナスとは少々違和感が在るのですが、通常金利と言えばプラスのものばかりかと思っていたが
プラス金利では預けたお金にプラスして戻ってくる感じをマイナスで考えれば、
預けたお金から金利を差し引いて戻ってくるということらしい。

銀行としてみれば日銀にお金を預けるよりも他で運用した方が金利分のマイナスがなくなるのでは。
ということでお金が市中に出回るということらしい。
本当にお金が回るかはこれからの景気や政策に掛かっているのだろうけれど。

このマイナス金利に銀行側も反応し、銀行の口座に関しても金利を下げだした。
ある銀行などは、0.0001%とかにするらしいが、ここまでくればほとんど金利ゼロ。
もし本当に個人の口座がマイナス金利になれば、タンス預金の方がましになるかもしれない。
しかし、お金を管理することから考えれば、銀行に預けておいた方が安全ではある。

地方銀行なども預かっているお金は多いが、貸出先が無いのでお金の運用にこまるらしい。
本当は、個人口座にもマイナス金利を導入したいのではと思う。
以前のネット銀行では口座維持手数料を取っているところもあったが、今は無い様である。

今後、マイナス金利が続くようであれば、これに乗じて銀行も口座維持費を払ってほしいのは山々なのでしょうが。

このマイナス金利で景気が良くなればいいのですが、株価も下げ幅が激しかったりで
今年はどうなるのでしょうか。

2016年2月17日 (水)

BCPコマンドでUnicode文字形式を使用したデータのインポート及びエクスポート(SQL Server)について

以前の記事の中で「SQL Server」の「BCP」コマンドを取り上げましたが、 その時のコマンドは以下の様になっていました。 このコマンドは出力されるファイルが文字形式として書き込まれます。 (データベースの中のネイティブ形式ではないということです) このコマンドで出力されるテキストファイルのコードは「Shift-JIS」形式になるはずです。
これに対応するインポートコマンドは同様に「-c」オプションをつけて以下の様になります。 今回はUnicodeでのインポート・エクスポートの必要がありましたので、「-c」オプションを「-w」に変えて行います。
以下はエキスポートコマンドです。 このコマンドで出力されるテキストファイルのコードがUnicodeとなります。
以下はインポートコマンドです。

■関連記事
VB.NET:ADO.NETを使用したSQL-ServerのテーブルのCSV出力
ADO.NET での DataReader の入れ子エラー
ADO.NET を使用した SQL-Server へのアクセス・クラス
SQL-Serverの自動採番(IDENTITY値)の取得・リセット
SQL-Serverのストアド・ファンクションではUPDATEなどが実行できない
SQL-Serverのユーティリティ(BCPコマンド)を利用したテーブルへのインポート・エキスポート
SQL-Serverのプロシージャ生成のバッチ実行
SQL-Serverの関数・プロシージャのVB.NETでの実行

達人に学ぶDB設計 徹底指南書【電子書籍】[ ミック ]

価格: 2,808円
(2016/09/29 13:53時点 )

感想:1件


VB.NETの関数の参照型データの引数での値渡しと参照渡しの違いについて

VB.NETの関数で参照型データ(オブジェクト型)を引数にする場合、値渡しと参照渡しで少し挙動が異なります。
先ず以下のソースを見て下さい。2個の ArrayList 変数を生成し、それぞれ値渡しと参照渡しの値設定関数をコールしています。 「SetArrList1」と「SetArrList2」がコールされる関数ですが、この二つの関数は内部の処理は全く同じ様な処理で 引数の宣言が「ByVal」か「ByRef」かの違いだけです。
「SetArrList1」と「SetArrList2」共に、ArrayListにデータを5個追加する処理をしていますが、 値渡しでも、参照渡しでも渡された引数のArrayListの中のデータが変わることがわかると思います。
「SetArrList1」と「SetArrList2」実行後のデータ表示でそれが分かります。

このソースの実行結果を見てみます。

Rst1


結果からみて注意することは、参照型データを引数で渡す時には値渡しであっても、 その参照型のメソッドを使って参照型の中のデータは変更できるということです。

そこで、次に渡された引数に対して変更を行った場合にはどうなるのかを見てみます。
先ほどのソースに「SetArrList1New」「SetArrList2New」の関数を追加します。 それぞれは内部で、新規にArrayListを生成し、1件のデータを追加後、引数の変数に設定しています。 引数の宣言が「ByVal」か「ByRef」の違いがあるだけです。

Rst2_2


結果から分かることは、「ByVal」の引数ではコール元のArrayListの変数「Lst1」は変化しないことです。 また、「ByRef」の引数の方は、「Lst2」の中身が変わってしまっています。 「Lst2」が参照するArrayListの場所が上書きされています。

「ByRef」の場合は、関数内で引数を書き換えてしまうと、最初に渡されてきたデータの参照が どこかに行ってしまい、宙ぶらりんでどこからも参照できなくなる可能性がありますので、注意が必要です。

■関連記事
VB.NETの関数の戻り値が参照型について
VB.NETの配列のReDimについて
VB.NETの配列は参照型
VB.NETの値型と参照型について
VB.NETの文字列型(String)について


2016年2月16日 (火)

リモートデスクトップでローカルPCのドライブをアクセスしたい場合

リモートデスクトップでリモート接続されたサーバーから、 アクセスしているローカルPCのドライブをアクセスしたい場合はリモート接続の「編集」で設定します。
リモート接続のアイコンの上で右クリックし、「編集」をクリックします。

Remotex


「リモートリソース」タブをクリックします。

Remote0


「ローカル デバイスとリソース」の枠の中の「詳細」ボタンをクリックします。

Remote1


ドライブの中から、リモート側からアクセスしたいドライブにチェックします。 その後、「OK」ボタンをクリックし、「全般」タブに戻り、「保存」をクリックすれば 現在の状態が保存され、次の接続に有効になります。

Remote2


この設定で接続すれば、接続されたサーバーのエクスプローラ等からローカルPCのドライブが 見える状態になるので、後は通常のドライブの感じで利用できる様になります。

■リモート接続のアクティブウインドウの画面キャプチャ


最近まで知らずにいましたが、リモートデスクトップ関連で小ネタを一つ。
リモート接続のウインドウの中で、アクティブなウインドウのキャプチャを取る場合 「Alt」+「PrtScrn」(AlterキーとPrintScreenキーの同時押下)ではなく以下の キーの組み合わせになります。

「Ctrl」+「Alt」+「-」(テンキーのマイナスキー)

2016年2月 2日 (火)

VB.NETの関数の戻り値が参照型について

VB.NETの関数内で、あるクラスなどを「New」で実体(インスタンス)を生成し その参照値を戻り値として返すことができます。

この使い方ですが、VB.NETを使い始めた時にすぐには理解できませんでした。
この関数を何回もコールしてもOKなのか?
「New」で生成されたクラスの実体は使わなくなった時にどうなるのか?
夜も眠れない(大げさですが)感じでした。

それでは、以下のソースを例に説明します。

これを実行させると以下の様な表示になります。
==============
Lst1(0) = 0
Lst1(1) = 0
Lst2(0) = 1
Lst2(1) = 1
Lst2(2) = 1
==============


関数「GetArrList」はArrayListクラスを生成し、 指定された要素数までを初期値で設定しそのクラスの参照を返します。

「GetArrList」で生成されたArrayListの実体はVB.NETのヒープと呼ばれるメモリ領域に確保され その参照が、関数内の変数「List」に返されます。 この変数「List」を使って、ArrayListのメソッドを使用しデータ設定を行います。 その後、「List」の値そのものを「Return」命令で返してやります。

メイン側では、「GetArrList」から返される値を、ArrayList型の参照変数に代入します。
2回「GetArrList」をコールすることで別々のArrayList型のデータを生成できます。 1回目で「GetArrList」が「New」で確保されるメモリ領域と、2回目では別のメモリ領域になります。 「New」はその都度、新しいメモリ領域を確保し、その参照を返してきます。

この確保されたメモリ領域ですが、そのまま放置しておくとどうなるのでしょうか。
放置しておくとそのまま残った状態になります。

残ったままでは問題なので、メモリから消し去ることが必要です。 ヒープに確保されたメモリは、その参照が無くなった時点で、 システムが適当にクリアしてくれます。
一般にガベージコレクション(ゴミ集め)と言われています。

それでArrayList型の参照変数である「Lst1」を「Nothing」にしてやります。 参照を無くしてやることになります。

尚、今回の例では、「Main」関数がすぐに終わる形なっていますので 「Nothing」を設定しなくても「Main」関数が終了時点で使っていた メモリは全て廃棄されるはずですので、心配はいりませんが。

ただし、プログラムが複雑になってきて参照型変数を多く使う場合は その変数が必要なくなった時点で廃棄する必要があると思います。


デル株式会社

■関連記事
VB.NETの関数の参照型データの引数での値渡しと参照渡しの違いについて
VB.NETの配列のReDimについて
VB.NETの配列は参照型
VB.NETの値型と参照型について
VB.NETの文字列型(String)について


2016年2月 1日 (月)

VB.NETの配列のReDimについて

配列の領域を拡張する方法として「Redim」命令が在ります。 この命令に「Preserve」を付けて宣言すると、既に存在していた要素の内容が引き継がれて配列が拡張されます。

 ReDim Preserve 配列名(指標上限値)

このReDimの動作なのですが、以下のソースを見てください。

これを実行させると以下の様な表示になります。
==============
ArrX(0) = 10
ArrX(1) = 20
Arr(0) = 1
Arr(1) = 2
Arr(2) = 3
==============


4行目で配列変数「ArrX」には「Arr」がコピーされますが、 「ReDim」命令後、配列変数「ArrX」を通して要素を10倍し、 「ArrX」と「Arr」の要素の値を全て表示させると全く別物であることがわかります。

最初の「Arr」の宣言で確保された配列の領域と、 ReDim命令で確保された配列の領域が異なるものであることがわかります。
つまりReDim命令は、指定された配列の領域を拡張する場合、 新たに別の領域に指定された大きさで配列を生成した後で、 拡張前の配列から要素の値をコピーする様です。

Arrredim


ReDim命令をどんどん繰り返して使用するとメモリ領域に使わない配列が増えていきます。 更に、拡張時に毎回メモリ確保の処理と、拡張前配列からのデータのコピーが セットで行われるので、処理時間も掛かります。
以下の様なことを行うと、処理時間が数秒かかってしまいます。 Integer型の配列なので数秒ですが、構造体などの領域の大きいものの配列ならば もっと時間が掛かります。

「ReDim」を使う時は気をつけたいものです。

そこで、配列の替わりに使えるものとして、「ArrayList」があります。 以下に「ArrayList」の例がありますが、使い方は配列と変わらない感じです。 ただ、要素を増やす場合は「ArrayList」の「Add」メソッドを使って行います。

■関連記事
VB.NETの関数の参照型データの引数での値渡しと参照渡しの違いについて
VB.NETの関数の戻り値が参照型について
VB.NETの配列は参照型
VB.NETの値型と参照型について
VB.NETの文字列型(String)について