■閉鎖した昔のブログの記事復活
[2025/12/24] OracleSQL 入門のホームページの引っ越しについて (No.467)
[2025/05/14] chmファイル(Microsoft Compiled HTML Help)を開けない場合の対処方法 (No.463)
[2025/05/14] VB.NET:アプリケーションのエントリポイント(Mainメソッド)について (No.435)
[2025/05/14] VB.NET:ADO.NETを使用したSQL-ServerのテーブルのCSV出力 (No.434)
[2025/05/13] EXCEL:CSVファイル読込で、先頭ゼロのデータをそのまま表示させる方法 (No.433)
[2025/05/14] chmファイル(Microsoft Compiled HTML Help)を開けない場合の対処方法 (No.463)
[2025/05/14] VB.NET:アプリケーションのエントリポイント(Mainメソッド)について (No.435)
[2025/05/14] VB.NET:ADO.NETを使用したSQL-ServerのテーブルのCSV出力 (No.434)
[2025/05/13] EXCEL:CSVファイル読込で、先頭ゼロのデータをそのまま表示させる方法 (No.433)
-
「OracleSQL入門」ということで以下のサイトを運営していましたが、
こちらの忍者ホームページに引っ越しました。
内容は以前のままです。
■以前のホームページURL
www.mitene.or.jp/~rnk/
■忍者ホームページURL
RNKのホームページ(https://rnkhp.okitsune.com/index.htm)
よろしくお願いいたします。
PR -
古いソフトのヘルプファイル(ファイル拡張子は CHM )の場合が開けないことがあります。 chmファイルは古い規格で内部的にHTMLで書かれているようです。 そのため、最近はWindows のセキュリティの関係から直接は見れない様になっています。
以下の方法でセキュリティ関係を解除してやれば見ることができます。
chmファイルの名前の所で右クリックをして、「プロパティ」を選択します。 そこで「ブロックの解除」のボタンをクリックします。
「ブロックの解除」のボタンがグレー表示になりますので、 「適用」ボタンまたは「OK」ボタンをクリックします。
その後、chmファイルをダブルクリックで起動すれば内容が見えるはずです。
=====
2016/04/02:の時の情報
-
アプリケーションのエントリポイントとは、そのアプリケーションが開始した時に、呼び出されるメソッドのことです。
VB.NETでは、Mainメソッドがエントリポイントですが、 WindowsフォームアプリケーションプロジェクトにはMainメソッドが見当たりません。 エントリポイントであるMainメソッドは、コンパイラによって自動的に作成されます。 以下の様にプロジェクトのプロパティ設定で「スタートアップ オブジェクト」を Form1 に 設定すれば自動でMainメソッドが生成され、その中で Form1 を生成し、表示する様になっています。
しかし、 Form1 の表示前に何かをしたいことがある場合、 例えば、アプリケーションの二重起動のチェックだとか、データベースのオープン処理などがあります。 その場合には、新しいモジュールかクラスを追加し、その中に Sub Main を宣言します。 以下は Sub Main をモジュールに宣言したときの例です。
(ファイル名は MainModule.vb としました)
Module MainModule 'アプリケーションのメイン・エントリポイント <STAThread()> Sub Main() '----- 'メインフォームを表示する前に必要な初期処理を行う・・・ '----- '例:二重起動をチェックする If Diagnostics.Process.GetProcessesByName(Diagnostics.Process.GetCurrentProcess.ProcessName).Length > 1 Then MessageBox.Show("多重起動はできません。") Return End If 'メイン画面の表示(ここでは例としてForm1の表示) Dim frm As New Form1 Application.Run(frm) '----- 'メインフォームが閉じた後で必要な終了処理を行う・・・ '----- End Sub End Module
尚、この MainModule を有効にするには、プロジェクトのプロパティ設定で 以下の様にする必要があります。
「アプリケーションフレームワークを有効にする」のチェックを外し無効にします。
無効にすることで、「スタートアップ オブジェクト」のコンボボックスに MainModule が現れますので、それを選びます。
モジュールではなく、クラスで行う場合は以下の様になります。
Public Class ClsMain 'アプリケーションのメイン・エントリポイント <STAThread()> Shared Sub Main() '----- 'メインフォームを表示する前に必要な初期処理を行う・・・ '----- '例:二重起動をチェックする If Diagnostics.Process.GetProcessesByName(Diagnostics.Process.GetCurrentProcess.ProcessName).Length > 1 Then MessageBox.Show("多重起動はできません。") Return End If 'メイン画面の表示(ここでは例としてForm1の表示) Dim frm As New Form1 Application.Run(frm) '----- 'メインフォームが閉じた後で必要な終了処理を行う・・・ '----- End Sub End Class
このソースの例では、二重起動のチェックを行っていますが、その他、データベースのオープン等 メイン画面が表示される前までに行いたい処理を、初期処理の部分に記述できます。
=====
2016/04/02:の時の情報
-
ADO.NET を使用した SQL-Server のテーブルをCSVファイルに出力する簡単な関数を作成してみました。
CSVファイルを作成する関数への引数は、データベース名とデータソース名と、SQL文、それとCSVファイル名とCSV内のカラムヘッダを 出力するかのフラグになります。
CSV出力処理関数内では SQL-Server への接続をオープンし、指定されたSELECT文を実行します。 SELECT文の結果の行が在れば、1行づつデータを取得します。 初回の行の処理の場合には、リーダーオブジェクトからカラム名を取得しヘッダ行を書き込みます。 その後、各データ行をCSVファイルに書き込みます。 CSVの各データは強制的にダブルクォートで囲む様にしていますので、 データ内のダブルクォートはエスケープ処理しています。
Public Class Form1 'フォーム上に張り付けたボタンでの処理 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click SqlToCsv("TEST", ".\SQLEXPRESS12", "SELECT * FROM TEST1 ORDER BY CODE", "TEST.CSV", True) End Sub ''' <summary>指定SQL文のCSVファイル出力</summary> ''' <param name="Database">データベース名</param> ''' <param name="DataSource">データソース名</param> ''' <param name="SQL">SELECT文</param> ''' <param name="CsvFilePath">CSVファイルパス</param> ''' <param name="fHeader">カラムヘッダ出力指示</param> Private Sub SqlToCsv(ByVal Database As String, ByVal DataSource As String, ByVal SQL As String, _ ByVal CsvFilePath As String, ByVal fHeader As Boolean) 'CSVファイル書込Encoding(Shift-JIS) Dim Enc As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS") 'CSVファイルオープン Dim SWrt As New System.IO.StreamWriter(CsvFilePath, False, Enc) 'SQL-Server接続文字列 Dim DBConnection As String = "Persist Security Info=false;Integrated Security=SSPI;" & _ "Database=" & Database & ";Data Source=" & DataSource & ";" 'SQLコネクションクラス Dim Conn As New System.Data.SqlClient.SqlConnection(DBConnection) Conn.Open() 'コマンドオブジェクト Dim Cmd As New System.Data.SqlClient.SqlCommand(SQL, Conn) 'TESTデータ取得(リーダーオブジェクト) Dim Reader As System.Data.SqlClient.SqlDataReader = Nothing Reader = Cmd.ExecuteReader() '読込行数が存在?? If Reader.HasRows Then Dim fFirst As Boolean = True '読込 While Reader.Read() = True If fHeader = True And fFirst = True Then fFirst = False Dim ColName As String = "" 'カラム数分の処理 For i As Integer = 0 To Reader.FieldCount - 1 'カラム名取得し、ダブルクォートで囲む ColName = SuroundDblQuotes(Reader.GetName(i)) 'カラム名書込 SWrt.Write(ColName) 'カンマ書込 If i < Reader.FieldCount - 1 Then SWrt.Write(","c) End If Next '改行書込 SWrt.Write(vbCrLf) End If Dim ColData As String = "" For i As Integer = 0 To Reader.FieldCount - 1 'データ取得し、ダブルクォートで囲む ColData = SuroundDblQuotes(Reader.GetValue(i).ToString()) 'データ書込 SWrt.Write(ColData) 'カンマ書込 If i < Reader.FieldCount - 1 Then SWrt.Write(","c) End If Next '改行書込 SWrt.Write(vbCrLf) End While End If 'CSVファイルクローズ SWrt.Close() 'クローズ Conn.Close() End Sub ''' <summary>文字列をダブルクォートで囲む</summary> Private Function SuroundDblQuotes(ByVal str As String) As String If str.IndexOf(""""c) > -1 Then '文字列をダブルクォートをダブルクォートでエスケープ str = str.Replace("""", """""") End If Return """" & str & """" End Function
尚、今回のテーブルは以下の生成文で生成しました。
CREATE TABLE TEST1 ( CODE VARCHAR(8) NOT NULL ,DATA1 VARCHAR(16) ,DATA2 VARCHAR(16) ,DATA3 VARCHAR(16) ,CONSTRAINT TEST1_PKC PRIMARY KEY (CODE) ); INSERT INTO TEST1 VALUES('00000001', 'A000001', 'BBBBBB1', 'C001'); INSERT INTO TEST1 VALUES('00000002', 'A000002', 'BBBBBB2', 'C002'); INSERT INTO TEST1 VALUES('00000003', 'A000003', 'BBBBBB3', 'C003'); INSERT INTO TEST1 VALUES('00000004', 'A000004', 'BBBBBB4', 'C004');
結果的にCSVファイル内容は以下の様になります。
"CODE","DATA1","DATA2","DATA3" "00000001","A000001","BBBBBB1","C001" "00000002","A000002","BBBBBB2","C002" "00000003","A000003","BBBBBB3","C003" "00000004","A000004","BBBBBB4","C004"
=====
2016/03/22:の時の情報
-
エクセルでCSVファイルを読込む場合、先頭がゼロのデータが消されてしまい左寄せの様な表示になります。 例えば電場番号や商品コードなどでは、先頭にゼロが存在することは自然なことなので、 ゼロがサプレスされてしまうと不都合が在ります。
以下の様なCSVファイルをエクセルに読込んでみます。
エクセルの結果はやはり先頭ゼロが在りません。
そこで先頭ゼロのカラムデータは値をダブルコーテーションで囲んで先頭に = (イコール)を 置いてやります。 以下の様にCSVファイルを変更してやります。
エクセルの結果は先頭ゼロが表示される様になりました。
上図のセルの値からも分かるように、値が ="0012345" とCSVファイルの値そのものになるので 注意が必要です。これをそのまま印刷しても 0012345 とちゃんと表示されます。
=====
2016/03/25:の時の情報