■閉鎖した昔のブログの記事復活
[2025/05/12] VB.NET:OleDBを使ったエクセルファイルへのアクセス (No.403)
[2025/05/11] PostgreSQL:CSE(PostgreSQL)テーブルにCSVデータ入力(インポート) (No.402)
[2025/05/11] PostgreSQL:CSE(PostgreSQL)テーブル内容のCSVデータ出力 (No.401)
[2025/05/11] PostgreSQL:CSE(PostgreSQL)テーブル作成とコンソールのグリッドからのデータ入力 (No.400)
[2025/05/11] PostgreSQL:CSE(Common SQL Environment)からPostgreSQLへの接続 (No.399)
[2025/05/11] PostgreSQL:CSE(PostgreSQL)テーブルにCSVデータ入力(インポート) (No.402)
[2025/05/11] PostgreSQL:CSE(PostgreSQL)テーブル内容のCSVデータ出力 (No.401)
[2025/05/11] PostgreSQL:CSE(PostgreSQL)テーブル作成とコンソールのグリッドからのデータ入力 (No.400)
[2025/05/11] PostgreSQL:CSE(Common SQL Environment)からPostgreSQLへの接続 (No.399)
-
前回はCOMオブジェクトを使ってエクセルファイルのアクセスを行いましたが、今回はOleDBを使います。
COMオブジェクトだとプロセスがメモリに残ることを気にしないといけませんが、OleDBでは気にしなくても良いようです。
以下のソースでは引数としてエクセルファイルのファイル名を指定しています。
関数の先頭で、関数内で使用するOleDB接続クラス、OleDBデータアダプタクラス、データテーブルクラスの宣言を行っています。 最初にOleDB接続クラスを使ってエクセルとの接続を行います。 ファイルの拡張子が「xlsx」と「xls」では接続されるOleDBが異なります。 「xls」では「Microsoft.Jet.OLEDB.4.0」だったのですが、「xlsx」では「Microsoft.Ace.OLEDB.12.0」になります。
次に、OleDBデータアダプタクラスを使ってエクセルシートのデータにアクセスします。 エクセルのシートをデータベースのテーブルの様に扱えます。 SQL文の中のFROM句で「Sheet1$」と記述している部分がそうです。 抽出範囲を指定する場合にはソースの様に「Sheet1$A1:C10」とすれば、 A,B,Cカラムの1行目から10行目までの指定になります。
データアダプタを作成後、データアダプタのメソッド「Fill」でデータテーブル、 エクセルのシートからデータを全て取り込みます。 後は、データテーブルから1行ずつデータ行を取得しデータ処理を行います。
以下のソースはテストですので単にデータを文字列として連結して表示しています。
関数の終了処理では使用したオブジェクトの解放を行います。
''' <summary>エクセルファイル処理</summary> ''' <param name="strXlsxFileName">xlsxファイル名</param> Private Sub TestXlsx2(ByVal strXlsxFileName As String) 'OleDB接続クラス Dim oleCon As System.Data.OleDb.OleDbConnection = Nothing 'OleDBデータアダプタクラス Dim oleAdp As System.Data.OleDb.OleDbDataAdapter = Nothing 'データテーブルクラス Dim adoTbl As System.Data.DataTable = Nothing Try 'EXCELとの接続 Try oleCon = New System.Data.OleDb.OleDbConnection() If System.IO.Path.GetExtension(strXlsxFileName).ToLower = "xlsx" Then oleCon.ConnectionString = "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & _ System.IO.Path.GetFullPath(strXlsxFileName) & ";Extended Properties=Excel 12.0;" Else oleCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ System.IO.Path.GetFullPath(strXlsxFileName) & ";Extended Properties=Excel 8.0;" End If oleCon.Open() Catch ex As Exception MsgBox("...EXCELオープン失敗") Exit Sub End Try 'EXCELデータを全て取得(仮にA,B,Cカラムの10行分) Dim strSQL As String = "SELECT * FROM [Sheet1$A1:C10]" Try oleAdp = New System.Data.OleDb.OleDbDataAdapter(strSQL, oleCon) adoTbl = New System.Data.DataTable oleAdp.Fill(adoTbl) Catch ex As Exception MsgBox("...EXCELデータ取得失敗") Exit Sub End Try '文字列の連結 Dim strTest As String = "" Dim adoRow As System.Data.DataRow For Each adoRow In adoTbl.Rows strTest &= adoRow(0).ToString.Trim strTest &= adoRow(1).ToString.Trim strTest &= adoRow(2).ToString.Trim Next MsgBox(strTest) Finally If Not adoTbl Is Nothing Then adoTbl.Clear() adoTbl.Dispose() End If adoTbl = Nothing If Not oleAdp Is Nothing Then oleAdp.Dispose() End If oleAdp = Nothing If Not oleCon Is Nothing Then oleCon.Close() oleCon.Dispose() End If oleCon = Nothing End Try End Sub
尚、今回の処理で以下のエラーが出た場合はMicrosoftの再頒布可能コンポーネントをインストールして下さい。
「'Microsoft.Ace.OLEDB.12.0' プロバイダはローカルのコンピュータに登録されていません。」
■Microsoftのリンク先 Microsoft Access データベース エンジン 2010 再頒布可能コンポーネント
=====
2016/01/27:の時の情報
PR -
「CSE」を使ってPostgreSQLのデータベースのテーブルに、CSVデータ入力(インポート)を行ってみます。
まず最初に、前回のCSVデータ出力で出力された「dt_data1.csv」ファイルをCSEで入力してみます。 「DBエクスプローラ」に表示されているテーブル「dt_data1」の上で右クリックします。 メニューの中から、真ん中下あたりの「データをインポート」を選びます。
「データをインポート」を選択した後に以下の図の様に、「インポートするファイルを指定して下さい」ダイアログが表示されます。 「dt_data1.csv」を選択し「開く」ボタンをクリックします。
インポート処理のメッセージがコンソールに表示されます。 「dt_data1.csv」のデータはテーブルの中に既に存在しますので、3行のエラーが表示されます。 当然インポート処理は失敗となります。
そこで、新しいCSVファイルをテキストエディタで作成してみます。 「dt_data1-inp1.csv」として以下の図の様に3件のデータを作成します。
再度「DBエクスプローラ」に表示されているテーブル「dt_data1」の上で右クリックし、「データをインポート」を選択します。 今回は「dt_data1-inp1.csv」のファイルを選択します。
インポート処理の様子が下図の様に、コンソールウインドウに表示されます。
インポートされたか確認する為、「DBエクスプローラ」に表示されているテーブル「dt_data1」の上で右クリックし、 「全データを開く」を選択します。
これで、CSEでのCSVファイルのインポートの説明を終わりますが、 上の例でも示しましたが、インポートするCSVファイルのデータが、テーブルに既にあるデータと キーが重複する場合は注意が必要です。
=====
2015/03/23:の時の情報
-
「CSE」を使ってPostgreSQLのデータベースのテーブルからCSVデータ出力を行ってみます。
「DBエクスプローラ」に表示されているテーブル「dt_data1」の上で右クリックします。 メニューの中から、真ん中あたりの「全データをエクスポート」を選びます。
「全データをエクスポート」を選択した後の表示が以下の図の様に、「ファイルの保存先」を指定するダイアログが表示されます。 初めてこの処理を行う時のデフォルトのフォルダは「CSE.EXE」が存在するフォルダです。 ファイル名のデフォルトは「テーブル名.csv」ですので、今回は「dt_data1.csv」となります。
エキスポート処理のメッセージがコンソールに表示されます。
エキスポートされたCSVファイルをテキストエディタで開いてみます。 各データは全て値の前後に「"」(ダブルコーテーション)で囲まれていて、文字列として出力されています。
■さらに、データの条件付けを行ってのCSV出力を行ってみます。
「DBエクスプローラ」に表示されているテーブル「dt_data1」の上で右クリックします。 メニューの中から、「条件を指定してデータをエクスポート」を選びます。
「条件を指定してデータをエクスポート」を選択した後の表示が以下の図の様に、「検索条件 - dt_data1」が表示されます。
「出力列を指定」及び「オーダー列を指定」を指定して、エキスポートを行います。 両方にチェックを入れると以下の表示になります。画面は最初のカラムの「datano」に検索条件として「in (2,3)」として 「datano」が2または3のデータを抽出します。さらに「オーダー」にもチェックを入れて「datano」順とします。
上図で「OK」ボタンをクリックすると、以下の「ファイルの保存先」を指定するダイアログが表示されます。 先ほどとは異なるファイル名(dt_data1-1.csv)を指定してみます。
エキスポートされたCSVファイルをテキストエディタで開いてみます。 「datano」が2および3のみのデータのみであり、「datano」順になっています。
以上の様に比較的簡単にテーブルの内容をCSVファイルに出力することができます。
この機能だけでも「CSE」を使ってみる価値はあると思います。
=====
2016/01/22:の時の情報
-
「CSE」を使ってPostgreSQLのデータベースにテーブルを作成し、データを簡単に入力してみます。
最初にテーブルの作成を行います。CSEのメイン画面で以下の図の様にCREATE文をキー入力し、 実行ボタン(ツールバーの「!」もしくは、「メニュー」⇒「データベース」⇒「実行」)をクリックします。
コンソールには実行結果が表示されます。
作成されたテーブルが「DBエクスプローラ」に表示されますので、テーブル「dt_data1」の上で右クリックします。 メニューの中から、一番上の「全データを開く」を選びます。
「pg_hba.conf」はPostgreSQLがインストールされているフォルダ内の「data」フォルダ内に存在します。
「全データを開く」を選択した後の表示が以下の図の様に、コンソールに「dt_data1」の内容を表示されます。 このグリッドにデータを入力していきます。(図は3件のデータを入力した様子)
グリッドにデータを入力後、「メニュー」⇒「データベース」⇒「編集の反映」を選択します。 以下の確認メッセージが表示されますので、「OK」をクリックします。
テーブルへの登録のメッセージがコンソールに表示されます。
再度「DBエクスプローラ」のテーブル「dt_data1」上で「全データを開く」を選択すれば、 入力されたデータがコンソールの部分に表示されるはずです。
=====
2016/01/20:の時の情報
-
久々にCSE「Common SQL Environment」を使ったPostgreSQLへの接続を行う必要がありましたので、 その時のやり方をまとめてみました。
PostgreSQLと言えば「pgAdminⅢ」がありますが、CSEも使い勝手がいいので利用しています。
まず最初にPostgreSQLのクライアント認証の設定を変更する為に「pg_hba.conf」の編集を行います。
「pg_hba.conf」はPostgreSQLがインストールされているフォルダ内の「data」フォルダ内に存在します。
(私の環境では C:\Program Files\PostgreSQL\9.2\data に存在します)
「localhost」からアクセスをする場合は、「pg_hba.conf」をテキストエディタで開いて、 以下の様に設定して下さい。(「#」はコメント行です。)
# IPv4 local connections: #host all all 127.0.0.1/32 md5 host all all 127.0.0.1/32 trust
尚、全てのアクセスを許可する場合は、以下の様に設定して下さい。
# IPv4 local connections: #host all all 127.0.0.1/32 md5 host all all 0.0.0.0/32 trust
上記の修正が終わった後で、「pg_hba.conf」を上書き保存し、PostgreSQLのサービスを再起動します。
次に、「libpq.dll」をCSEが存在するフォルダに入れます。
このDLLですが、現在のCSEの紹介されているページのリンクは切れている様ですので、 以下のURLのところで該当するファイル(「日本語Windows版 libpq」..... libpq-6.5jp.zip)をダウンロードし 回答して、「libpq.dll」をコピーします。(URLは直接リンクではありませんので、文字列をコピペして下さい)
「http://www.psn.ne.jp/support/database/psql.html」
CSEの起動を行い。「メニュー」の「データベース」⇒「接続」を選択します。
コンソール画面に「接続されました」の表示がされたら、接続が完了したことになります。
=====
2016/01/18:の時の情報