• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:postgresとVBでデータを読み込み項目指定で)

【PostgreSQL】VBでデータを読み込む方法について

このQ&Aのポイント
  • PostgreSQLとNpgsqlを使用してVBでデータを読み込む方法について知りたいです。
  • 読み込んだレコードを項目ごとに分ける際に、配列番号ではなく項目名称を使用して取得する方法を教えてください。
  • NpgsqlDataReaderの操作方法について、理解が不十分です。DataTableなどに変換する方法も教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.1

> 配列番号でなく、項目名称を用いて String でオーバーロードされていますので、そのまま使えます。 http://www.postgresql.jp/document/NPGSQL/api/Npgsql.NpgsqlDataReaderItem.html > DataTableか何かに変換できれば良いのですが。。 DataAdapter を使って下さい。 Microsoft の設計と同じなので、SqlClient とかMSDNの説明を参考にした方がいいと思います。 (postgresqlのドキュメントは上記サイトのように最低限の説明しかないので、分かっている 人のためのヘルプになっているようです) DataReader と DataAdapter では性質が違います。データ量が多いときに使い分け しますが、使い方が分かっていないなら処理のトータル時間は変わりませんので DataAdapter を使ったらいいと思います。

webuser
質問者

お礼

有難う御座います DataAdapter を試してみます

webuser
質問者

補足

DataReader か DataAdapter かという問題ではなく、DataReaderでも項目名で指定して値が取れる事が分かりました。 item("")とすれば良いだけでした。 stritm1 = npgDR.item("item1") stritm2 = npgDR.item("item2")

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • vb .net Winアプリでコンボボックスに値を

    vb .net Winアプリでコンボボックスに値をセットする方法を教えて下さい。 table1 都道府県コード,都道府県名(カナ),都道府県名 01,ホッカイドウ,北海道 02,アオモリケン,青森県 03,イワテケン,岩手県 のテーブルがあり、既に読み込んでいます。 このデータをコンボボックスにセットしたいです。 Dim NpgsqlConnection1 As NpgsqlConnection Dim NpgsqlCommand1 As NpgsqlCommand Dim NpgsqlDataAdapter1 As NpgsqlDataAdapter Dim String1 As String Dim DataTable1 As DataTable NpgsqlConnection1 = New Npgsql.NpgsqlConnection NpgsqlConnection1.ConnectionString = gstrCnct NpgsqlConnection1.Open() String1 = "select * from table1;" NpgsqlCommand1 = New NpgsqlCommand NpgsqlCommand1.Connection = NpgsqlConnection1 NpgsqlCommand1.CommandText = String1 NpgsqlDataAdapter1 = New NpgsqlDataAdapter(String1, NpgsqlConnection1) DataTable1 = New System.Data.DataTable NpgsqlDataAdapter1.Fill(DataTable1) ' 一括の方法でもOK ' Me.ComboBox1.??? = ???? ' ぐるぐるしながらセットでもOK ' Me.ComboBox1.??? = Space(0) ' Me.ComboBox1.??? = "ミセンタク" ' Me.ComboBox1.??? = "未選択" For Each DataRow1 As DataRow In DataTable1.Rows ' Me.ComboBox1.??? = DataRow1("都道府県コード") ' Me.ComboBox1.??? = DataRow1("都道府県名(カナ)") ' Me.ComboBox1.??? = DataRow1("都道府県名") Next DataRow1 ■要件 メインの情報は都道府県名ですが、 めくった時に 都道府県コード,都道府県名(カナ),都道府県名 を見せる形で作りたいです。 都道府県コードは取り出す必要があります。 データ 1行目は空白,ミセンタク,未選択 2行目以降はtable1から取り出した値。 以上、よろしくお願いします。

  • Npgsql+VB2008環境にてDataAdapterでのデータの追

    Npgsql+VB2008環境にてDataAdapterでのデータの追加できない この環境で、以下のプログラムを書いていますが、なぜか追加されません。問題はどこにあるのでしょうか。あとトランザクション処理も加えたいのですが。NpgsqlのVBサンプルがなくて・・・まして.NETをはじめたばかりで。初歩的なことですいません。 宜しくお願いします。 Dim strCnn As String strCnn = /* PostegreSQL接続文字列 */ Dim Cnn = New NpgsqlConnection(strCnn) Dim npgDataSet As DataSet = New DataSet Dim npgDataAdapter As Npgsql.NpgsqlDataAdapter npgDataAdapter = New Npgsql.NpgsqlDataAdapter("SELECT * FROM T_Zip;", Cnn) npgDataAdapter.Fill(npgDataSet, "T_Zip") Dim npgCommand = New NpgsqlCommand("INSERT INTO T_Zip(ZipCode, Address) VALUES (:Code,:Adr);", Cnn) npgCommand.Parameters.Add("Code", SqlDbType.NVarChar, 10, "ZipCode") npgCommand.Parameters.Add("Adr", SqlDbType.NVarChar, 50, "Address") npgDataAdapter.InsertCommand = npgCommand Dim dt As New DataTable npgDataAdapter.Fill(dt) Dim tempRow = dt.NewRow() tempRow.BeginEdit() tempRow("ZipCode") = "487-0023" tempRow("Address") = "AAAA" tempRow.EndEdit() dt.Rows.Add(tempRow) npgDataAdapter.Update(npgDataSet, "T_Zip")

  • vb.bet リストボックスの2項目の表示

    vb.net始めて3ヶ月の超初心者ですのでよろしくお願いいたします。 リストボックスにYearと売り上げ高の2項目をIndexにもとづいて表示します。Variable、Indexなどはできているものとします。 このようなイメージです。 YEAR SALES 2007  1000 2008  2000 2009  2500 2010  3000 Dim strYear as string Dim intSales as integer Dim intFill as integer Dim strDisplay as String For intFill = 0 To 3 Me.lstBoxTotalYear.Items.Add(strYear(intFill)) これをつかうと、YearしかMe.lstBoxTotal...に入れられませんでした。2個いれたらErrorになりました。一方では、strDisplayをつくってYearとSalesをつなげて strDisplay = strYear & intSales.ToStringをつくったのですがこれもはねられました。 YearとSalesを2個いれるにはどうしたらいいでしょうか。或いは、他のCommandなどがありますでしょうか。Internetや他の本をみてもみつかりませんでした。 よろしくお願いいたします。

  • VB2008改行できません

    VB2008改行できません お願いします。 メロンパン 3個 240円 コロッケパン 2個 … という風にしたいのですが、 一行目が表示され、2行目の「コロッケパン」を入れた瞬間、 1行目が消え、 コロッケパンのみが表示されます。 なぜでしょうか。 正しいコードと、どのような理屈でそうなるのか頂けると嬉しいです。 Public Class Form1 Dim cm, a As String Dim kosu, en As Integer Private Sub ShapeComboBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ShapeComboBox.SelectedIndexChanged cm = ShapeComboBox.Text End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click kosu = TextBox1.Text Select Case ShapeComboBox.SelectedIndex Case 0 en = kosu * 120 Case 1 en = kosu * 180 Case 2 en = kosu * 240 End Select txtKaimono.Text = cm + kosu.ToString(" ##個") + en.ToString(" #,###円") + vbCrLf End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Application.Exit() End Sub End Class

  • Outlookのメールを送信するマクロ

    お世話になっております。 Microsoft Outlook2003使用で メール送信のマクロを見様見真似で作ってみたのですが、本文部分がうまくいきません(Best regardsしか表示されません)。 どうすれば正しく反映されるでしょうか? シートのB1にToアドレスを記入していてTo_addressと名前付 以下、Cc_addressとSubjectも同様にしています。 本文の文章は何行かあり、途中で空白行も入れたいのですが、そこまでまだ手がつけられていません。 本文の文章が3行あるとすると、このマクロではComment1、Comment2、Comment3と名前付しています。 Sub SendEmail() Dim OlApp As Outlook.Application Dim mItem As Outlook.MailItem Dim cell As Range Dim Subj As String Dim EmailAddr As String Dim Recipient As String Dim Msg As String Dim Message As String Dim Sender As String Dim Comments As String Dim Comments2 As String Dim report As String Worksheets("Sheet1").Activate 'Create Outlook object  Set OutlookApp = New Outlook.Application 'Get the data Subj = Range("Subject") EmailAddr = Range("To_address") CCAddr = Range("Cc_address") Body = Range("Comment1") & ("Comment2") & ("Comment3") 'Compose message Msg = Msg & Comment1 & vbCrLf & vbCrLf Msg = Msg & Comment2 & vbCrLf & vbCrLf Msg = Msg & "Best regards," & vbCrLf & vbCrLf 'Create Mail Item Set mItem = OutlookApp.CreateItem(olMailItem) With mItem .To = EmailAddr .CC = CCAddr .BCC = BCCAddr .Subject = Subj .Body = Msg .Display End With End Sub 宜しくお願い致します。

  • DAOでデータベースを二つ開くには?

    環境 Windows2000 VB6 DAOで同じデータベースを開くためのやり方がわかりません。 下記のようにマスタのキーを使用して他のテーブルの 内容を更新したいのですが よろしくお願いします。m(__)m Dim ws As Workspace Dim db As Database Dim qd As QueryDef Dim rs As Recordset Dim STRSQL As String dim strsql2 as string Set ws = DBEngine.Workspaces(0) Set db = ws.Databases(0) STRSQL = "SELECT KEY FROM マスタ" Set qd = db.CreateQueryDef("", STRSQL) Set rs = qd.OpenRecordset() Do While Not rs.EOF strsql2 = "Update data from マスタ where key = " & rs!key ???? rs.MoveNext Loop rs.Close qd.Close db.Close

  • vb2010でmdbデータの任意の項目で検索

    VB初心者でソフト開発をやり始めたのですが行き詰まって困っています。 助けてください。よろしくお願いします。 ・ACCESSのmdb形式のデータは下記の構成になっています。  1列: ID      integer サイズ指定無し 自動設定   2列: 名前    string  サイズ指定無し  3列: 性別    string  サイズ指定無し  4列: 電話番号 string  サイズ指定無し  テーブル名:sampleTable  フォームにテキストボックスを項目数配置してIDを設定してボタンを押すと各テキストボックスに  検索されたデータが帰ってきて表示されるものです。 ・下記のようなプログラムで「ID」を指定して検索が出来るのは確認済みです。  これを「名前」を指定して検索出来るように改造したいのですがどのようにすれば  良いのかお教え頂きたくお願いいたします。  たぶん ”strSelectSql =・・・・・の部分かと思うのですがよろしくお願い致します。   (色々試しましたがうまくいきません・・・。) Public Class Form1 Dim MjstrPath As String Dim MjstrID As String 'ID Dim MjstrSimei As String '名前 Dim MjstrSexnam As String '性別 Dim MjstrTel As String '電話番号  '-----------------------------  'データを検索する  '----------------------------- Function MDB_SELECT(ByVal PistrMakPath As String) As Boolean MDB_SELECT = False Dim strDatbasePara As String 'データベースパラメータ Dim ObjCnn As New ADODB.Connection Dim ObjRst As New ADODB.Recordset Dim strSelectSql As String     MjstrSimei= TextBox4 strDatbasePara = "Provider=Microsoft.Jet.OLEDB.4.0;" + _ "Data Source=" + PistrMakPath + ";" + _ "Jet OLEDB:Engine Type=5;" Try ObjCnn.Open(strDatbasePara) ' strSelectSql = "Select * from sampleTable" _ ' + " where ID = " + MjstrID strSelectSql = "Select * from sampleTable" _ + " where ID = " + MjstrID  '<--- 問題か? ---        ’where 名前= "+ MjstrSimei ではだめでした ObjRst.Open(strSelectSql, ObjCnn, _ ADODB.CursorTypeEnum.adOpenKeyset, _ ADODB.LockTypeEnum.adLockOptimistic) If ObjRst.EOF Then MjstrSimei = "" MjstrSexnam = "" MjstrTel = "" Else MjstrID = ObjRst.Fields("ID").Value MjstrSimei = ObjRst.Fields("名前").Value MjstrSexnam = ObjRst.Fields("性別").Value MjstrTel = ObjRst.Fields("電話番号").Value MDB_SELECT = True End If ObjRst.Update() ObjRst.Close() Catch ex As Exception End Try ObjCnn = Nothing ObjRst = Nothing End Function  '-------------------------------------------------------------  'データを検索する  '------------------------------------------------------------- Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click Dim strMdbpath As String Dim intRecQuery As Integer strMdbpath = TextBox1.Text + "\" + TextBox2.Text MjstrID = TextBox3.Text If MDB_SELECT(strMdbpath) Then MsgBox("検索該当しました") Else MsgBox("該当ありません") End If TextBox4.Text = MjstrSimei TextBox5.Text = MjstrSexnam TextBox6.Text = MjstrTel End Sub End Class

  • VB6.0 文字列のファイル書き込み

    こんにちは。 VB6.0を研修中の新人です。 テキストファイルにランダムアクセスをし半角全角混じりの文字列を書き込むコードを考えています。 連休中は会社に入れないので自宅でコードをどのように書くかある程度決めておきたいです。 ■ あいうえお ■ カキクケコ ■ サシスセソ   (サシスセソは半角です)   ■ タチツテトはひ (タチツテトは半角です) メモ帳.txtに文字列を書き込むと上記のように書き込まれます。 これは見た目が悪いので下記のように"■ "がないように書き込むことは無理でしょうか。 あいうえお カキクケコ サシスセソ    (サシスセソは半角です) タチツテトはひ  (タチツテトは半角です) いま書いたコードは下記のとおりです。 Public Sub Main() WriteFile End Sub '書き込む関数 Public Sub WriteFile()   Dim i As Integer   Dim str As String   Open "C:\メモ帳.txt" For Random As #1 Len = 14   Do While < 5     Select Case i       Case 1 str="あいうえお"       Case 2 str="カキクケコ"       Case 3 str="サシスセソ"       (サシスセソは半角です)       Case 4 str="タチツテトはひふへほ" (タチツテトは半角です)     End Select     strNagasa(str,10) + vbCrlf     Put #1,i,str     i = i + 1   Loop   Close #1 End Sub '文字列をレコードの長さに合わせる関数(いまの場合は10バイト) 'Nagasaが"10"の場合 'strが "サシスセソ" なら "サシスセソ" に半角スペースを5個詰めて返す。 'strが "タチツテトはひふへほ" なら "タチツテトはひ" の9バイトで文字列を切って半角スペースを1個詰めて返す。 Public Function StrNagasa(str As String,Nagasa As Integer) As String   ...   省略(完成済み)   ... End Function

  • VB6で特定フォルダのCSVファイルを指定して開く

     お世話になります。  ある株価を記すCSVファイルを読んで、配列格納しようと下記プログラムを書いてみましたが、 この状態では「読み込み対象のファイル」が「このVBプロジェクト」と同じフォルダに入っていなければならないようです。    そこで C:\IR_NK\USDJPY_20071010.csv の USDJPY_20071010.csv を読むというように、「別のフォルダのファイル」を読み込むように書き換えたいです。  この場合、どのように書けばいいか教えて欲しいです。 Private Sub C_FJU() Dim H_R(2) As Integer Dim HI_R(2, 8000) As String Dim intFileNo As Integer Dim strTextLine As String Dim strTxtDat As String intFileNo = FreeFile Open "USDJPY_20071010.csv" For Input As #intFileNo Do While Not EOF(intFileNo)  Input #intFileNo, strTextLine H_R(0) = H_R(0) + 1 HI_R(0, H_R(0)) = Trim(strTextLine) strTxtDat = strTxtDat & strTextLine & vbCrLf Loop T_HYO.Text = strTxtDat  Close #intFileNo End Sub

  • 文字の点滅

    すいません、VB.Net2003の初心者です。 いろいろ調べたのですが解らないので教えてください。 VB.Net2003 SQLServer2000という環境なんですが Form1に Private Sub Timer1_Tick(・・・ lblMessage.Visible = Not lblMessage.Visible End Sub Private Sub Form1_Load(・・・ Me.Timer1.Start() End Sub と書いて単独で開くとちゃんとメッセージは点滅するのですが、これに Private Sub From1_Activated(・・・ Dim Form2Form As New Form2 Application.DoEvents() Dim strSQL As String Dim intRemainder(4) As Integer Dim i As Integer For i = 1 To 3 strSQL = "SELECT COUNT(TelW) AS RemainderCount " strSQL &= "FROM dbo.ma_Customer " strSQL &= "WHERE (CallDayNo1 IS NULL) AND " strSQL &= "(CallNo" & i & " > 0)" Try cmd = New SqlCommand(strSQL, Cn) intRemainder(i - 1) = cmd.ExecuteScalar Catch ex As Exception Dim strMsg As String = Err.Number & ex.ToString MessageBox.Show(strMsg) End Try cmd = Nothing Next Me.Hide() With Form2Form .lblNo1.Text = intRemainder(0).ToString("#,##0") .lblNo2.Text = intRemainder(1).ToString("#,##0") .lblNo3.Text = intRemainder(2).ToString("#,##0") .ShowDialog() End With Me.Close() End Sub というコードを加えてループ処理を実行している間メッセージを点滅させたいのですが点滅しません。どう書いたら良いのでしょう?