- PR -

ROW_NUMBER() で構文エラー

1
投稿者投稿内容
てつじん
会議室デビュー日: 2005/01/07
投稿数: 18
投稿日時: 2008-03-24 13:47
VB5.0で開発しているのですが、どなたか知っていたら教えてください。

環境
 Windows XP
 Oracle 10g
 VB 5.0

ROW_NUMBER関数を使ってデータを取得しようとしているのですが、
「クエリー式 'ROW_NUMBER() OVER (ORDER BY 列1 DESC, 列2, 列3)' の 構文エラー : 演算子がありません。」
となってしまいます。
しかし、SQL Plus では正常に取得できます。

VBでの接続は
Set MyRecordset = MyDataBase.OpenRecordset(pSqlstr, dbOpenSnapshot)
で行っています。(DAO)

SQL文は
 SELECT ROW_NUMBER() OVER (ORDER BY 列1 DESC, 列2, 列3) AS "RNO",
 列1,
 列2,
 列3,
 ・・・
 FROM Table1
 WHERE 列4='A'
 AND 列5=1
 ORDER BY 列1 DESC, 列2, 列3;
です。

いろいろ検索しているのですが、原因がわかりません。
宜しくお願い致します。

投稿に不慣れなもので、情報が少ない場合は言ってください。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-03-24 16:43
原因がわからない時に試行錯誤する時は、問題の切り分けをすることにしています。 今回の場合ですと SQL コマンドの怪しいところを割愛して '原因の箇所' を特定することから始めると思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
てつじん
会議室デビュー日: 2005/01/07
投稿数: 18
投稿日時: 2008-03-24 16:53
じゃんぬねっとさん

ご意見ありがとうございます。

調べてみると「ROW_NUMBER」が使えないような気がしてきました。
Accessでリンクテーブルを作成して同じSQLを実行すると同じエラーになります。
Accessでは「ROW_NUMBER」は存在しないので使えないのは知っているのですが、
VBでも同じなんですかね。。。

現在"EXECUTE (SQL)"でどうにかできないか試行錯誤中です。
(PL/SQLなんて久しぶりだから忘れてる・・・)
めだか
大ベテラン
会議室デビュー日: 2004/11/11
投稿数: 109
投稿日時: 2008-03-24 17:31
パススルークエリにはなってるんですよね?
てつじん
会議室デビュー日: 2005/01/07
投稿数: 18
投稿日時: 2008-03-25 09:25
引用:

めだかさんの書き込み (2008-03-24 17:31) より:
パススルークエリにはなってるんですよね?




パススルークエリ?

・・・検索中・・・

おぉ、Accessにはそんなのがあるのですね。

真似をして"QueryDef"でやってみましたが、同じエラーが出てしまいます。。。
Accessではパススルーを設定したらちゃんと取ってきてきれるのに。。。

やっぱりVB5.0ではできないものなんですかね。。。

てつじん
会議室デビュー日: 2005/01/07
投稿数: 18
投稿日時: 2008-03-25 09:44
解決しました。

"QueryDef"の使い方が甘かったようです。

最初はこれでエラーになりました。
Dim qdf As QueryDef
Set qdf = MyDataBase.CreateQueryDef("", pSqlstr)
Set MyRecordset = qdf.OpenRecordset(dbOpenSnapshot)

下記のように修正したらSQLが通りました。
Dim qdf As QueryDef
Set qdf = MyDataBase.CreateQueryDef("")
qdf.Connect = MyDataBase.Connect
qdf.SQL = pSqlstr
Set MyRecordset = qdf.OpenRecordset(dbOpenSnapshot)

データも欲しい順番で取れています。

めだかさん、ありがとうございました。
1

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