- PR -

ADO レコード参照

1
投稿者投稿内容
未記入
会議室デビュー日: 2005/10/22
投稿数: 6
投稿日時: 2005-10-26 20:44
下記の最終行でエラーになってしまうのは何故でしょうか?
どのように解決すればいいのでしょうか?

エラー内容:ORA-00904: "DISTINCTPAGE_ID": 無効な識別子です。

<ソース>
Dim oADOCon As ADODB.Connection
Dim oRet1 As ADODB.Recordset

Set oADOCon = CreateObject("ADODB.Connection")
Call oADOCon.Open(cnConnection)

SQL1 = "select count(distinct page_id) from documentation"

Set oRet1 = CreateObject("ADODB.Recordset")
Call oRet1.Open(SQL1, oADOCon, adOpenForwardOnly, adLockReadOnly,adCmdText)
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-27 09:19
こんにちは、らい さん。
マルチポスト先が板違いのフォーラムであるため、こちらで返信させて頂きます。

引用:

マルチポスト先 のらいさんの書き込み (2005-10-26 21:00) より:

えと、エラーから言って、SQL文に問題があると思います。
というか、「count(distinct page_id)」はまずいんではなかろうか、と。
「distinct」って、重複する行を取り除く命令だと思ったので、

コード:

   SQL1 = "select count(*) from (select count(page_id) from" & _
          " documentation group by page_id)"


というところではないでしょうか。


distinct がある場合でも、正しく動作することを確認しました。
意図したように、重複したデータを除いた件数を返してくれるようです。

コード:

Private Sub OneMethod()
    ' 接続文字列を生成する
    Dim nConnectionString As String
    nConnectionString = nConnectionString & "Driver={SQL Server};"
    nConnectionString = nConnectionString & "Server=Server;"
    nConnectionString = nConnectionString & "Database=Northwind;"

    ' ADODB.Connection の新しいインスタンスを生成する
    Dim oConnection As ADODB.Connection
    Set oConnection = New ADODB.Connection

    ' ADODB.Connection の接続を確立する
    Call oConnection.Open(nConnectionString)

    ' 実行時エラー発生時でも Connection の Close を保証する
    On Error GoTo Finally1

    ' ADODB.Recordset の新しいインスタンスを生成する
    Dim oRecordset As ADODB.Recordset
    Set oRecordset = New ADODB.Recordset

    ' SQL コマンド テキストの生成
    Dim nSqlCommand As String
    nSqlCommand = "SELECT COUNT(DISTINCT EmployeeID) FROM Employees"

    ' 指定されたコマンド テキストで Recordset を開く
    Call oRecordset.Open(nSqlCommand, oConnection, adOpenForwardOnly, adLockReadOnly, adCmdText)

    ' 実行時エラー発生時でも Recordset と Connection の Close を保証する
    On Error GoTo Finally2

    ' ここはテスト専用
    If oRecordset.EOF = False Then
        Call MsgBox(oRecordset.Fields(0).Value)
    End If

Finally2:
    ' Recordset を Close する
    If Not oRecordset Is Nothing Then
        If oRecordset.State <> ObjectStateEnum.adStateClosed Then
            oRecordset.Close
        End If

        Set oRecordset = Nothing
    End If

Finally1:
    ' Connection を Close する
    If Not oConnection Is Nothing Then
        If oConnection.State <> ObjectStateEnum.adStateClosed Then
            oConnection.Close
        End If

        Set oConnection = Nothing
    End If
End Sub


# 文字列で生成されるオブジェクトを指定するのって、
# コンパイル解決できていないため、私はあまり好きではありません。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
らい
大ベテラン
会議室デビュー日: 2005/08/02
投稿数: 159
お住まい・勤務地: 東京都と千葉県のさかいめ
投稿日時: 2005-10-27 10:33
らいです。

引用:

じゃんぬねっとさんの書き込み (2005-10-27 09:19) より:
こんにちは、らい さん。
マルチポスト先が板違いのフォーラムであるため、こちらで返信させて頂きます。
引用:

マルチポスト先 のらいさんの書き込み (2005-10-26 21:00) より:

えと、エラーから言って、SQL文に問題があると思います。
というか、「count(distinct page_id)」はまずいんではなかろうか、と。
「distinct」って、重複する行を取り除く命令だと思ったので、

コード:

   SQL1 = "select count(*) from (select count(page_id) from" & _
          " documentation group by page_id)"


というところではないでしょうか。




どもです。
いや、フォーラムを確認してませんでした。(^^;

えと、

引用:

エラー内容:ORA-00904: "DISTINCTPAGE_ID": 無効な識別子です。


とあったので、まずOracleでのエラーかと。
で、SQL式が

コード:

SQL1 = "select count(distinct page_id) from documentation"


だったんで、distinctとpage_idの間の半角スペースが
認識されていないのではなかろうか、と。
それなんで、マルチポスト先のSQL式を書いた次第です。

Oracleって、DISTINCTを認識しないとかそういうのありましたっけ?
# ンなわけないとは思いますが、念のため。
うちには、Oracleがないので確認できませんでした。

_________________
一寸先は闇
安定してるシステムって言ったじゃん(泣)
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-27 10:48
引用:

らいさんの書き込み (2005-10-27 10:33) より:

いや、フォーラムを確認してませんでした。(^^;


とはいえ、こちらの会議室でも少々微妙な質問ではあります。
Insider.NET の方が判例的に妥当なのかもしれません。

引用:

とあったので、まずOracleでのエラーかと。
で、SQL式が

コード:

SQL1 = "select count(distinct page_id) from documentation"


だったんで、distinctとpage_idの間の半角スペースが
認識されていないのではなかろうか、と。
それなんで、マルチポスト先のSQL式を書いた次第です。

Oracleって、DISTINCTを認識しないとかそういうのありましたっけ?
# ンなわけないとは思いますが、念のため。
うちには、Oracleがないので確認できませんでした。


Oracle 8i で確認しましたが、正常に動作しました。
ちなみに Microsoft SQL Server でも確認しています。(^-^*)

# まあ、エラーメッセージ が 「ORA-...」なので Oracle なのは判りますが、
# 詳しい製品バージョンが、提示されていないような気がします...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
らい
大ベテラン
会議室デビュー日: 2005/08/02
投稿数: 159
お住まい・勤務地: 東京都と千葉県のさかいめ
投稿日時: 2005-10-27 11:01
引用:

じゃんぬねっとさんの書き込み (2005-10-27 10:48) より:
とはいえ、こちらの会議室でも少々微妙な質問ではあります。
Insider.NET の方が判例的に妥当なのかもしれません。


あ、確かに。(^^;
ソース的に見て、VBですもんね。

引用:

Oracle 8i で確認しましたが、正常に動作しました。
ちなみに Microsoft SQL Server でも確認しています。(^-^*)


そうすると、実際に動いているものと、
未記入さんが示されたソースには違いがある、ということですな。

でなければ、「"DISTINCTPAGE_ID": 無効な識別子です。」とはならないでしょうし。
# 半角スペース入れ忘れって言ってます。(^^

_________________
一寸先は闇
安定してるシステムって言ったじゃん(泣)
1

スキルアップ/キャリアアップ(JOB@IT)