Rakuten

  • 楽天ダウンロード

おすすめ本

天気予報

最近のトラックバック

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

カウンタ

VC

admax

カテゴリ「VB.NET」の77件の記事 Feed

2017年11月18日 (土)

VB.NET:FTPサーバへのアクセスでエラー発生(慌てたが、ログインユーザのパスワード期限切れ)について・覚え書き

FTPサーバへファイルをアップするプログラムを作成したのですが、 久々に動作させてみたら、エラーが発生してしまいました。
ついこの間、1か月前ぐらいまでは動作していたので少し慌ててしまって、 ちょっと青ざめてしまいました。

プログラムでのTry...Catchでエラーの内容をログで確認すると以下の様な感じでした。 (最後のソースの場所については割愛した部分があります) 原因としては、FTPのユーザのログインでエラーが発生しているようです。
このときのプログラムは抜粋ですが以下の様な感じです。

そこでログインエラーの原因を探るために、Windowsのコマンドプロンプトを起動し、 FTPサーバーに接続してみようと思いました。 (ユーザのIDは伏せてありますが、FTPユーザは「ftpuser」という名前です) 上記のエラーメッセージを見ると「The password for this account has expired.」が 返ってきていて、パスワードが期限切れでした。
「ftpuser」のパスワードを再設定し、事無きを得ました。 (パスワードを無制限にしておけばいいのですが)

.NET開発テクノロジ入門2016年版Visual Studio 2015対応版

楽天市場

2017年11月 2日 (木)

VB.NET:Oracleファンクションを呼出す時の方法について・覚え書き

Oracleファンクションを呼出す時の方法ですが、最近使ったので覚え書きとして一般的な例を記します。

ファンクションの例として入力及び戻り値が同じで、 各データ型(Number型、Varchar2型、日付型)の3個のファンクションを定義します。
ファンクションのソースは以下の通りです。 ソースをご覧になれば分かりますが、これらのファンクションは特に複雑な処理は行わず、 入力値に1を加算したり、文字列を付加して値を返す簡単なものです。

これらのファンクションのみを使う場合は DUAL 表を使えば通常のSELECT文でテストできます。 例えば、以下の様なSQL文を実行してみます。 ここでは、TEST_FNC3の出力のカラム幅が80桁になって表示が乱れるので あえてカラム幅を20桁に設定する COLUMN 命令を使っています。

SELECT文の出力を見れば、入力値に対して処理された値が返ってきているのが分かると思います。

この処理をVB.NETから操作する例は以下の通りです。 (フォーム上のボタンクリックイベントの中に処理を記述してあります)
■関連ページ
OracleSQLのその他・Tips等について
ODP.NET について

ひと目でわかる VisualBasic 2013/2012データベース開発入門 (MSDNプログラミングシリーズ)


楽天市場

2017年11月 1日 (水)

VB.NET:Oracleプロシージャを呼出す時の方法について・覚え書き

Oracleプロシージャを呼出す時の方法ですが、最近使ったので覚え書きとして一般的な例を記します。

プロシージャの引数は、入力がNumber型、Varchar2型、日付型の3個で、 出力は入力の値を更新して結果を返す、Number型、Varchar2型、日付型の3個で定義します。
プロシージャのソースは以下の通りです。 ソースをご覧になれば分かりますが、このプロシージャは特に複雑な処理は行わず、 入力値に1を加算したり、文字列を付加する簡単なものです。

このプロシージャをVB.NETから操作する関数の例は以下の通りです。 先ず、オラクルに接続後、プロシージャ名を指定してでOracleCommand生成します。 その後、OracleCommandParameters オブジェクトに入力及び、出力の引数を追加してやります。 各 OracleParameter の生成で注意する点は、データがVarchar2型で、データ長を設定する必要があります。 データ型のサイズが分かっているNumber、Date等は必要無いようです。

■関連ページ
OracleSQLのその他・Tips等について
ODP.NET について

ひと目でわかる VisualBasic 2013/2012データベース開発入門 (MSDNプログラミングシリーズ)

楽天市場

2017年10月26日 (木)

VB.NET:While文を使って一連の処理を中断する方法

VB.NETでは繰り返し処理を行う為に、While 文、Do…While 文、For 文などを使います。
While 文であれば以下の様な感じで、While の判定式で判定結果がFalseになった時点でループを抜けます。 While の判定式を True にすると、無限ループになってしまうので、 ループ内から抜け出すためには以下の様に Exit While 文を使います。 ところで、この無限ループを使うことで一連の処理を下方向に向かって順次記述することができます。
私がよくやる方法なのですが、データのエラー処理などで、いくつかのエラーチェック処理を連続で行い、 全てのチェックが正常で在った場合にOKとする場合などに無限ループを使います。 上記のソースではエラーチェック関数の中身は記述しませんが、CheckProc1()~CheckProc3() が存在する前提です。
この様にすれば、If 文の入れ子をしなくても、エラーチェック処理を上から下に向かって連続して記述できます。 ソースを見た時に各チェック処理の頭が揃い、見やすくするために行っています。何かのご参考になれば幸いです。

基礎Visual Basic 2015 基礎シリーズ

デル株式会社

2017年10月18日 (水)

VB.NET:2017/10/11のWindows Updateで「外部データベース ドライバー」エラー

今月の12日にソフトを提供している客先から、「外部データベースドライバー(1)で予期しないエラーが発生しました」 のエラーが表示されて、正常動作しないとの連絡が在りました。
前日までは問題無く動作はしていたが、急に今回のエラーが発生したとのことでした。

原因特定のため、取り敢えずこちらでも同じ動作をさせてみたところ、やはり同じエラーが発生しました。
ソースを確認すると、エラーが発生した部分は「Provider=Microsoft.Jet.OLEDB.4.0;Data Source=...」を利用して エクセルからデータをアクセスに登録する処理で起きていました。

ちょっと焦ってしまい、頭がパニックになったのですが、昨日までは正常だったことと 私のPCでも同じ現象になるので、Windows Updateが問題なのではと疑いました。

ネットで調べてみると、今回の「OLEDB」の件だけではなく、いろんな不具合が報告されていました。 それで、Windows Updateを戻してソフトを起動みると、問題無く動作する様になりました。 (対象となるのは【KB4041681】の様です。)

Microsoftには、今回の不具合の修正を行ってほしいものです。

デル株式会社

2017年9月27日 (水)

VB.NET:ActiveReports.NET 9.0J で複数のセクションレポートを統合する印刷処理

GrapeCityの「ActiveReports.NET 9.0J」を使っているのですが、 1個の印刷処理内で、どうしても複数のセクションレポートを統合する必要が発生しました。

昔の「ActiveReports」だと空の印刷オブジェクトを作っておいて、 それに各印刷オブジェクトを追加してやる方法が在った様に覚えていたのですが、 ネットで探してもそのような例は見つかりませんでした。

1個のセクションレポートに対して後から発生する他のセクションレポートを 追加していく方法しかネットには載っていませんでしたので、 何とか改良して複合的に行える様にしたのが、以下の例です。

この例の前提として、「rptEven」「rptOdd」というセクションレポートの クラスが作成済みであることとします。

最初に印刷オブジェクトを統合するセクションレポートオブジェクトとして「rptMain」を 宣言します。
その後、10回のループで偶数と奇数の回数の時にそれぞれ「rptEven」「rptOdd」 のオブジェクトを生成して、「rptMain」の印刷オブジェクトに追加しています。

偶数回と奇数回での処理で、「rptMain」が「Nothing」であるかを確認し、 初回の処理を行っています。
実際には奇数回の「rptMain」が「Nothing」であるかの確認は必要はありませんが、 ループ処理において、どちらが先に来てもいいように考えました。

もっと簡単な方法があるかもしれませんが、何かの参考になればと思います。

ゼロから分かるActiveReports帳票開発入門 (CodeZine BOOKS)


デル株式会社

2017年6月26日 (月)

VB.NET:SpreadSheetGearを使って印刷処理

以前はVB.NETからエクセルを使って印刷処理を行うプログラムを作成したことがありました。

エクセル上に雛形となるシートを作成しておいて、そのシートをコピーし、 該当するデータを指定されたセルに当てはめて、印刷を行うというものです。
連続帳票ではなく、A4単票の印刷ではよく行ったものです。

エクセル印字をVBのプログラムから行うためには、エクセルのインストールが必須だったり、 「Microsoft.Office.Interop.Excel」を使ったCOM参照での処理が必要だったりします。
このCOM参照が曲者で、参照を開放しないとエクセルのプロセスがメモリ上に残ったままになったりします。 メモリに残ったままだと、次の印刷ができなかったりと、いろいろ悪さをします。 COM参照をしっかり開放してやれば、問題はないのですが...

やはりパソコンにエクセルがインストールしていないと動かないのがネックです。
そこで、サードパーティ製でエクセル互換のツールが無いかと探したら、 「XLSOFT」から直接エクセルファイルを操作できるツールが出ていました。
それが「SpreadSheetGear」という製品です。(外国製の様で、日本語対応したもののようです)

このツールですがDLLファイルを参照設定して利用しますが、上記のエクセルのCOM参照のオブジェクト内の 関数とほぼ同等の名称を使用している様です。

今回は印刷処理での利用がメインなので、サンプル等を見てみたのですが、 「WorkbookView」を使った印字例はあるのですが、このオブジェクトを使用しない例が なかったので以下の様なソースで試すと、とりあえず印刷はできました。 (何かのご参考までに...)


EXEと同じフォルダに存在する「TEST.xlsx」内の先頭のシートを単に印刷するサンプルです。

.NET開発テクノロジ入門2016年版Visual Studio 2015対応版

デル株式会社

2016年11月24日 (木)

Windows10(x64)に「VisualBasic6.0」をインストール

最近、VisualBasic6.0(VB6.0)で動作しているシステムをWindows10に載せる物件が発生しました。 VB6.0といえば、15年ぐらい前からの古い開発環境です。
昔はVB6で結構システムを作成したものですが、大部分は「.NET」への移行が終わっています。

ただし、VB6で作られていてもシステムのプログラム本数が多い場合には「.NET」への移行には 大変な費用が掛かってしまいます。

そのため、客先ではそのままのソースでWindows10に載せ替えができないかということになります。 お客にしてみれば、以前と同じ動作をさせたい場合には「.NET」への移行は必要ないことになります。 VB6で作成したEXEがそのままWindows10で動作すれば何も問題無いことになります。

そこでWindows10へのVB6のインストールを行い、使用しているコントロールの検証を行うことになりました。 先ずはVB6のインストールなのですが、以下の様に少し引っ掛かった部分がありましたので、注意が必要です。

  • VB6の「SETUP.EXE」を「管理者として実行」で起動します。
  • インストールの手順に従って進めていきます。
  • しかし、最後のところで「システム設定を更新しています」で止まってしまいました。

 (いくら待ってもインストールは終了しません)

  • インストールを強制終了し、再度インストール開始します。
  • 再度のインストールでも最後の「システム設定を更新しています」で時間が掛かっている模様でした。
  • 仕方なく再度のインストールで、カスタム設定のところの「データアクセス」をOFF設定でインストールがOKになりました。
  • 更に「VB6.0 Service Pack 6」をインストールします。


(今回のシステムのデータベースはOracleなので、アクセス用には「oo4o」を使うので、 VBの「データアクセス」は特に必要ありませんでした)


さらに使用している市販のコントロール類の検証です。 GrapeCityによれば SPREAD7.0J  ActiveReport2.0 はWindows10での動作は補償対象外ですが 動作させてみると特に問題無く動く様です。

あと、 ActiveComm 1.0 の検証も行いましたが、特に問題無く動作する様です。 RS232Cポートを持っているWindows10のPCと、WindowsXPのPCとをクロスケーブルで接続し、 データの送受信が行えることを確認しました。

これらのコントロールは、GrapeCityでは動作を保証していないので、 自己責任 となりますが。



次のシステム改変時期には、VB6から「.NET」への移行が必要になるかと思います。
その時には、「.NET」から別の物になっていたりして…

中古パソコン 【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:57時点 )

感想:1件

2016年11月14日 (月)

ASP.NET:スレッド毎のグローバル変数(ThreadStatic)

ASP.NETでグローバル変数を使う場合には、注意が必要です。 ASPは1個のプロセスとして動作するため、グローバル変数として宣言された変数は1カ所にしか存在しません。

そのため、複数のユーザから同時にアクセスが在った場合、そのグローバル変数を上書きする様な ことがあれば、問題が発生します。

この問題を解決するためには、 ThreadStatic を用いて、 その変数をスレッドで静的と宣言すれば、各ユーザ毎には別のグローバル変数が対応付けられます。

ASP.NETではアクセスが在ったときには、スレッドを生成し、 使い終わった時にはそれを廃棄せずにプールする様です。 次のアクセス時にはプールされたものが使われる可能性があるので、 上記のグローバル変数を使う前には必ず初期化が必要だと思います。

デル株式会社

2016年11月 1日 (火)

【VisualBasic6.0】マウスのホイールボタンを使う方法

久々にVB6を動かすことがあったのですが、マウスのホイールボタンには対応していなくて ソースを見るのが「.NET」とは勝手が違いました。

VB6は相当古いソフトなのでマウスのホイールボタンには対応していないのですが、 調べてみると、ホイールボタンに対応するDLLをMicroSoftが提供していました。

■「VB6MouseWheel.exe」ファイルのダウンロード

Microsoft の以下サポートページより、「VB6MouseWheel.EXE パッケージ」をダウンロードします。

http://support.microsoft.com/kb/837910/ja(マイクロソフト サポート オンライン)

■「VB6MouseWheel.exe」ファイルの展開

「VB6MouseWheel.exe」を適当なフォルダにダウンロードし、実行すると以下のファイルが解凍されます。

・EULA.txt
・Main.bas
・VB6IDEMouseWheelAddin.dll
・VB6IDEMouseWheelAddin.vbp
・VBA Mouse Wheel Fix.reg


■「VB6IDEMouseWheelAddin.dll」ファイルのレジストリ登録

「VB6IDEMouseWheelAddin.dll」を適当なフォルダにコピーして、レジストリ登録を行います。
私は、「C:\Program Files (x86)\Microsoft Visual Studio\VB98\」フォルダにコピーしました。
(64bitマシンだったので「x86」ですが)

その後で、Windowsシステムツールの「コマンドプロンプト」を管理者として実行し、ウインドウを開きます。 以下のコマンドを実行して、レジストリ登録を行います。

regsvr32 "C:\Program Files (x86)\Microsoft Visual Studio\VB98\VB6IDEMouseWheelAddin.dll"

■VB6のアドイン設定

VB6 の開発環境を開き、メニューの [アドイン] から [アドインマネージャ] を起動します。
[アドイン マネージャー] ボックスの一覧で、[MouseWheel Fix] を選択し、 [ロード/アンロード] チェックボックスと、[起動時にロード] チェックボックスをオンにします。
最後に「OK」ボタンをクリックし、開発環境を再起動すると、マウスのホイールが使用できるようになります。

Mousewheel



これでやっと、ソースを見るのが少し楽になりました。

デル株式会社