アプリ版:「スタンプのみでお礼する」機能のリリースについて

VB.Netで PostgreSql Ver.12(ローカル環境)を使用し開発しましたが,ホストは、Ver.11で
Ver.12特有のSql文等は一切使用しておらず、単純なSQL文でもエラーになります。

下記、
「If Me.reader.HasRows = False Then」でデータが存在しても、Ver.11(ホスト)では、
エラーとなり、Ver.12(ローカル環境)であれば、問題なく動きます。
QA1.
PostgreSql Ver.12(ローカル環境)で開発後、Ver.11(ホスト)に接続する場合は、何かconfig等で
設定が必要でしょうか?
QA2.
PostgreSql Ver.12(ローカル環境)で開発後、Ver.11(ホスト)に接続することが無理でしょうか?
QA3.
「If Me.reader.HasRows = False Then」でデータが存在しても、Folseとなりますが
原因を特定する方法はあるでしょうか?
以上ご教授お願いします。


例)
'各フォルダーを取得。
If Me.DB_Open() Then ' データベースのオープン

strSQL = "SELECT folderkbn,iofolder,hjun FROM mfolder"
Me.reader = Me.cmd.ExecuteReader()
If Me.reader.HasRows = False Then '<--ここでFalseになります。
'レコード数
MessageBox.Show("フォルダー設定マスタエラー。", "エラー確認", MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Function
Else
Do While Me.reader.Read()
Select Case reader("folderkbn").ToString.Trim
Case "BkUp"
GblBkUp = reader("iofolder").ToString.Trim
Case "IN"
GblIN = reader("iofolder").ToString.Trim
Case "ORG"
GblORG = reader("iofolder").ToString.Trim
Case "OUT"
GblOut = reader("iofolder").ToString.Trim
Case "TemPlate"
GblTemplate = reader("iofolder").ToString.Trim
End Select
Loop
End If
'データベースを切断
Me.Close()
Else
'データベースを切断
Me.Close()
End If

質問者からの補足コメント

  • ご指摘ありがとうございます。
    「データが存在」確認は、
    ⇒コマンドプロンプト画面で、
    postgres=# \d
    postgres=# select * from mfolder;
    です。
    ⇒ VB.netは、2017、 Npgsqlは、4.1.1を使用です。

    If Me.DB_Open() Then ' は?
    ⇒ conn = New NpgsqlConnection(String.Format("Server={0};Port=5432;User Id={1};Password={2};Database={3};", sHt, sU, sP, sD))
    conn.Open()
    cmd = conn.CreateCommand
    です。(正常動作)

    cmd.CommandTextなし
    ⇒ ご指摘通りで 追加しました。
    エラー内容は、42p01 です。

    No.1の回答に寄せられた補足コメントです。 補足日時:2020/03/04 11:50
  • 42P01 で検索すると、殆どが大文字小文字の問題ですが、Create文をやり直し全て小文字にしても
    同様でした。
    スキーマ名はpublicです。
    接続文字列での接続と、psqlを使った接続の可能性かと思います。

    No.2の回答に寄せられた補足コメントです。 補足日時:2020/03/05 10:13

A 回答 (2件)

> エラー内容は、42p01 です。



重要な手掛りがあるじゃないですか。


42P01 で検索かけると、沢山見つかります。
・テーブル名が大文字小文字混在するとき、"でかこまないといけない
→今回は非該当?

・スキーマ名がpublicで無い場合、テーブル名だけでは見つからないことがある
→要確認


接続文字列での接続と、psqlを使った接続とで、何か不対応があるのかもしれません。
この回答への補足あり
    • good
    • 0

「エラー」とは何のことを言っているのですか?



> 「If Me.reader.HasRows = False Then」でデータが存在しても、Ver.11(ホスト)では、
> エラーとなり、Ver.12(ローカル環境)であれば、問題なく動きます。

とありますが、具体的にどうやって「データが存在する」と確認したのですか?

> If Me.DB_Open() Then ' データベースのオープン

もDB_Openでは具体的に何をやっているのですか?


このプログラムは何を使っているのですか?
Visual Basic と Npgsql を使っているように見えますが、あってますか?
あっているのならバージョンはどうなっていますか?



今の情報では、そもそもPostgreSQLサーバをOpenできているかどうかさえもはっきりしません。
他のソフト等で確認はできていますか?


> strSQL = "SELECT folderkbn,iofolder,hjun FROM mfolder"
とありますが、これがcmd.CommandTextに設定されている様子がありません。
これとは違うSQLをExecuteReaderしている可能性があります。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す