postgreSQLとVB2005接続でのデータ取得方法

このQ&Aのポイント
  • postgreSQLとVB2005の接続方法について困っています
  • VB2005 expressを使用してpostgreSQL8.2.3と接続しようとしていますが、エラーが表示されデータを取得することができません
  • VBのプログラムにおいて、型の変換エラーが発生しています。具体的な解決方法を教えていただけると助かります
回答を見る
  • ベストアンサー

postgreSQLとVB2005接続でのデータ取得方法

postgreSQL8.2.3(linux)とVB2005 expressを接続しようとしているのですがエラーが表示されうまくデータを取得できず困っております。どのようにVBをプログラムすればよいのか教えていただけるとうれしいです。。。。 現在のVBにいれているプログラムですが Dim strConnect As String Dim adoConnection As Object Dim ans As Object strConnect = "DSN=*****; UID=*****; PWD=*****" adoConnection = CreateObject("ADODB.Connection") adoConnection.Open(strConnect) ans=adoConnection.execute("select name from table;") Do While Not ans.EOF Debug.Print(ans.fields("name")) ans.MoveNext() 実行するとdebug.print実行時にエラー表示され 型 'Field' から型 'String' への変換は無効です。 となります。postgresはpgadminにて接続動作確認できています。 ご回答のほどよろしくお願いします。

  • ekmi
  • お礼率100% (1/1)

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

  • ベストアンサー
  • Dodonpa2
  • ベストアンサー率82% (19/23)
回答No.1

こんにちは。 直接の回答ではないのですが、VB2005で ADOを持ち出すのは何か理由があるのでしょうか? .NETとCOMはあんまり相性がよくないので、普通は .NET Framework データプロバイダ(Npgsql)を 使うと思います。

ekmi
質問者

お礼

odonpa2さん回答ありがとうございます。 ADOにこだわりがあった訳ではありません。 .NET Framework data Provider for ODBCで解決いたしました。 ありがとうございました。

関連するQ&A

  • 全てのプリンター名を取得したい

    エクセルで全てのプリンターのプリンター名・ドライバー名・ポート名を取得する コードを実行したいのですが Sub Sample() Dim prtLoop As Printer For Each prtLoop In Application.Printers With prtLoop Debug.Print "Device name: " & .DeviceName Debug.Print "Driver name: " & .DriverName Debug.Print "Port: " & .Port End With Next prtLoop End Sub これをそのまま貼り付けて実行しようとすると、 「prtLoop As Printer」が、ユーザー定義型は定義されていません。 になります。 何に参照設定すればいいのかわからないので、 とりあえず Dim prtLoop As Object にしたのですが、 今度は For Each prtLoop In Application.Printers で 実行時エラー438 オブジェクトは、このプロパティまたはメソッドをサポートしていません。 になります。 どうすればいいか教えてください。

  • VB6にて文字型変数の内容をオブジェクト変数に代入する方法

    VB初心者ですが オブジェクト変数に文字型変数で作成した オブジェクト名を代入したいのですが 上手くいきません。 Dim anyCmb As ComboBox Dim cmb_name As String cmb_name = "ABC" Set anyCmb = cmb_name 誰かわかる方がいましたら、教えてください。 よろしくお願いします。

  • データ型変換

    String型のデータをInteger型の変数に入れたいのでが・・・。 '変数の宣言 Dim DataTable(2, 5) As String Dim made As Integer 'データ型変換 made = CInt(DataTable(1, 0)) このようにしたのですが、実行すると 『実行時エラー '13'  型が一致しません』 と表示され、デバックしてみるとココ↓ made = CInt(DataTable(1, 0)) が黄色くなります。 どうしたら上手く型変換ができるのでしょうか? ちなみに、VB6.0です。

  • SQLServer 列の「説明」の取得について

    SQLDMOオブジェクトを用いて、テーブルの列挙、列の列挙までは行なえるようですが、列の「説明」の項目の取得は行なえないのでしょうか? SQLDMOでなくても、何か取得出来る方法があればご教授お願いします。 --サンプル Public Function Main() Dim objServer As SQLDMO.SQLServer Dim objDatabase As SQLDMO.Database Dim objTables As SQLDMO.Tables Dim curTable As SQLDMO.Table Dim curCOl As SQLDMO.Column Const DB_NAME As String = "local" Const DB_USER As String = "sa" Const DB_PASSWD As String = "password" Const DB_USE As String = "hoge" ' オブジェクト作成 Set objServer = CreateObject("SQLDMO.SQLServer") ' 接続 Call objServer.Connect(DB_NAME, DB_USER, DB_PASSWD) 'DB選択 Set objDatabase = objServer.Databases(DB_USE) 'テーブル一覧 Set objTables = objDatabase.Tables ' テーブルの列挙 For Each curTable In objTables If curTable.SystemObject Then Debug.Print curTable.Name & " [system]" Else Debug.Print curTable.Name '列名の列挙 For Each curCOl In curTable.Columns Debug.Print curCOl.Name '*!ここで列の説明は取得出来ないのでしょうか??? Next End If Next ' 切断 Call objServer.Disconnect End Function

  • コントロールのタイプを取得したい場合

    Sub test() Dim i As Integer Dim StrFormName As String StrFormName = "UserForm1" With UserForms.Add(StrFormName).Controls For i = 0 To .Count - 1 Debug.Print .Item(i).Name  Next End With End Sub これでエクセルのユーザーフォーム上のすべてのコントロール名が取得できるのですが、 コントロールのタイプを取得したい場合、 Debug.Print .Item(i).Name  の部分をどう変えればいいのでしょうか? 例えばコマンドボタンなら、「CommandButton」と返ってきてほしいです。 Debug.Print .Item(i).Controlstype でも Debug.Print .Item(i).Controltype でもエラーになりました。

  • どんなオブジェクトでも表示できる方法はありますか? VB2008

    VB2008で文字列の二次元配列を作成しました。 これをPHPのvar_dump()関数のようにVB.NETでどんなオブジェクトに対しても中身を見せるようにさせる方法が知りたいです。 private test_data( , ) as string = { _ { "あ", "a" }, _ { "い", "i" }, _ { "う", "u" } _ } debug.print (test_data) 'PHPのvar_dump()のようなものはありますか

  • VB初心者です。

    VB始めたばかりでいつもお世話になっております。 Dim tmpymd As String tmpymd = "20060205" tmpymd = DateAdd("d", 1, CDate(tmpymd)) とすると型が違うとエラーが出ます。 tmpymdの日付に1日加算したいのですが。。。 tmpymdを型変換したかったのですが・・・。 よろしくお願いいたします。

  • VB6のTYPE文をVB.NETのStructureに変えるとき

    VB6のTYPE文をVB.NETのStructureに変えるとき 下記VB6のコードをVB.NETのStructureに変える場合 Type kouzou1 i As Integer j As Integer a As String * 20 b As String * 50 End Type を下記にしてみたのですが *20,*50のところは、どのように表現するのでしょうか。 Structure kouzou1 Dim i As Integer Dim j As Integer Dim a As String * 20 <- ステートメントの終わりを示してくださいのエラーになる。 Dim b As String * 50 <- ステートメントの終わりを示してくださいのエラーになる。 End Structure お教え下さい。

  • excelファイルをVBで取り込む

    下記のようなプログラムで、excelから表を取り込むのですが、シート名を指定しても、オブジェクトが見つかりませんとエラーが出ます。visualbasicの極意500から抜粋して使用しようとしました。わかる肩よろしくお願いいたします。 Private Sub Command1_Click() Dim DB As Database Dim strConnect As String Dim rst As Recordset strConnect = "Excel 8.0;DATABASE=C:\temp\売上実績.xls" Set DB = OpenDatabase("C:\temp\売上実績.xls", False, False, strConnect) 'テーブル名を指定 Set rst = DB.OpenRecordset("売上$", dbOpenTable) Do While Not rst.EOF Debug.Print rst!売上高 rst.MoveNext Loop rst.Close DB.Close Set DB = Nothing Set rst = Nothing End Sub

  • OCX内のコントロール名の取得方法

    VB6で下記の記述で実行しようと思ったのですが OCX内のコントロール名を取得できませんでした。 Dim strBtnName as String Dim objBtnName as Object For Each objBtnName In me.controls if me.Name = strBtnName then objBtnName.Enable = True End If Next objBtnName コントロール名を取得できない時は 文字列をオブジェクト名へ変換してしたいと 思ってるのですが変換方法がわかりません。 もしそういうのAPIなどがあれば教えてください。よろしくお願いします。