ODBC経由でオラクルに接続

このQ&Aのポイント
  • ASPにてODBC経由でオラクルにADOで接続してデータを表示していますが、GROUP BY 区を追加すると「オブジェクトが閉じている場合は、操作は許可されません」とエラーが発生します。
  • GROUP BY 区を追加しなければエラーが発生しません。どうしてでしょうか?またこの接続方法の場合JetのSQL関数が使用可能でしょうか?
  • ODBC経由でオラクルに接続しているASPのコード中には、オブジェクトを閉じる処理が必要です。また、GROUP BY 区を追加するとエラーが発生する場合は、GROUP BY の対象となるカラムが正しく指定されているか確認してください。この接続方法ではJetのSQL関数は使用できません。
回答を見る
  • ベストアンサー

ODBC経由でオラクルに接続

ASPにてODBC経由でオラクルにADOで接続してデータを表示していますが、GROUP BY 区を追加すると「オブジェクトが閉じている場合は、操作は許可されません」とエラーが発生します。 GROUP BY 区を追加しなければエラーが発生しません。どうしてでしょうか?またこの接続方法の場合JetのSQL関数が使用可能でしょうか? ASPの中身-------------------------------------- cn = Server.CreateObject("ADODB.Connection"); rs = Server.CreateObject("ADODB.Recordset"); cn.Open("DSN=XXXXX;UID=XXXXX;PWD=XXXXX;"); sq=""; sq+="SELECT "; sq+="TTUMIAGK.BUCD "; sq+="FROM "; sq+="TTUMIAGK "; sq+="WHERE "; sq+="TTUMIAGK.BUCD='04' "; sq+="GROUP BY TTUMIAGK.BUCD;";//追加するとエラー rs.Open(sq, cn ,3); while (!rs.eof) { //ここでエラーが発生 j++; %><tr><% for (i=0;i<rs.Fields.count;i++){ %><td><%=rs(i).value%></td><% } %></tr><% rs.movenext(); } rs.close();

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

  • ベストアンサー
  • galoon
  • ベストアンサー率28% (38/133)
回答No.3

ANo.1,2です。 すみません、難しく考えすぎでした。 sq+="GROUP BY TTUMIAGK.BUCD;";//追加するとエラー の"TTUMIAGK.BUCD"の後ろの";"が不要なんですね(^^;

fujisawa326
質問者

お礼

オラクルのSQLの基本に関してあまりインターネットに情報がなかったので大変助かりました。

fujisawa326
質問者

補足

ありがとうございました。単純なミスでした。 ACCESSのSQLは分かるのですがオラクルは 難しいですね。 SELECT TTUMIAGK.BUCD FROM TTUMIAGK GROUP BY TTUMIAGK.BUCD 「オブジェクトが閉じている場合は、操作は許可されません。」とエラーが出てしまいますが SUM(TTUMIAGK.YTKIN) を追加するエラーがでませんでした。しかも「SELECT TTUMIAGK.BUCD」の部分が表示されずSUM関数の結果のみ表示されました。う~んオラクルはやっぱり難しいです。

その他の回答 (2)

  • galoon
  • ベストアンサー率28% (38/133)
回答No.2

ANo.1です。 ご指摘の通り、グループ化関数とはSUM関数やCOUNT関数などのことです。 GROUP BY部に指定していないカラムについてもSELECT部に記述していませんか?そうするとSQL文が正しくなく、実はrs.Open()でエラーとなっており、rsオブジェクトが利用可能になっておらず、rs.eofで今回のエラーが表面化するのだと思います。

  • galoon
  • ベストアンサー率28% (38/133)
回答No.1

SQLについてですが、これは検索後'04'しか帰ってこないのですがこれをグループ化する必要があるのでしょうか・・・? 実際には、他のカラムについて取得しているようならグループ関数を利用しているかがエラーの発生原因として浮上してきますのでご確認を。 次に、Jetの関数というのはSQLの中で利用する関数のことでしょうか? もしそうであればJetの関数をOracleでは利用できません。同様の機能を持つOracleの関数を利用してください。

fujisawa326
質問者

お礼

うまくいきました。 オラクルのSQLの基本に関してあまりインターネットに情報がなかったので大変助かりました。

fujisawa326
質問者

補足

すみませんWHERE文は必要ありませんでした。 「グループ関数を利用しているかが」が分かりません。 SUM関数などのことでしょうか? Jetの関数はSQLの中で使用する関数(SUM関数)などです。 説明不足でした。

関連するQ&A

  • SQLServerにodbcで接続

    こんにちは。 WindowsServer2003でIIS・SQLServer・ASP(VBScript)を使って簡単なデータベースを作りたいのですが、いきないつまずいています。 testデータベースをSQLServerで作り、ODBCに【odbcsqlsv】と登録しました。 ASPスクリプトを <%@ Language=VBScript %> <html> <head> <title>動作テストHTML</title> </head> <body> <% Response.Write "テストーASP" Set cn = server.CreateObject("ADODB.Connection") StrCn ="odbcsqlsv" cn.Open StrCn strSQL = "SELECT * FROM table2" Set RS = cn.Execute(strSQL) Do While Not RS.EOF Response.Write RS.fields("name") RS.movenext Loop cn.close set cn = nothing %> </body> </html> を書き実行すると Microsoft OLE DB Provider for ODBC Drivers エラー '80040e4d' [Microsoft][ODBC SQL Server Driver][SQL Server]ユーザー '(null)' のログインに失敗しました。理由 : SQL Server の信頼関係接続に関連付けられていません。 とエラーが出ます。 SQL Serverの信頼関係接続とは何でしょうか? また関連付けはどのようにして行ったらよいのでしょうか? すみませんが、ご教授のほどをよろしくお願いします。

  • ASPでORACLEのエラーが発生するのですが、対処方法をお教えください。

    Win2000(IIS) + ORACLE8.1.6 でASPを使ったWEBサーバを構築しようとしています。 まず手始めに、単純にデータを登録するような簡単なASPを作成しようとしているのですが、 下記処理が、133行目でエラーになってしまいます。 ※当然の事ながら、ODBC接続の設定は正常に行えていることを確認しております。  (Accessでリンクテーブルを使って、ODBC経由でテーブルにデータを追加できます。) <処理内容 (/Oracle/newtoroku.asp の一部)> 126行目 Dim Conn,SQL,RS 127行目 DBName="Provider=msdaora;Data Source=xxxxx;User ID=xxxxx;Password=xxxxx" 128行目 Set Conn = Server.CreateObject("ADODB.Connection") 129行目 Conn.open DBName 130行目 SQL = "select * from XXテーブル" 131行目 Set RS = Server.CreateObject("ADODB.Recordset") 132行目 RS.Open SQL, Conn,3,2 133行目 rs.AddNew <エラー内容> ADODB.Recordset (0x800A0CB3) 現在の Recordset は更新をサポートしていません。 プロバイダか、選択されたロックタイプの限界の可能性があります。 /Oracle/newtoroku.asp, line 133

  • ADO+ODBCでテーブルに接続する時のエラー

    VB6.0(SP6)から、ADOとODBCでMySQLに接続しました。 '-------------------------------------------- Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim strCn As String Set cn = New ADODB.Connection strCn = "dsn=MySQL;uid=user;pwd=" cn.CursorLocation = adUseClient cn.Open strCn Set rs = New ADODB.Recordset rs.Open "select * from tbl;", cn, adOpenDynamic, adLockPessimistic Set DataGrid1.DataSource = rs '-------------------------------------------- データグリッドコントロールにテーブルの内容を表示させようとしているのですが、rs.Openの行でエラーが出てしまいます。エラーメッセージは「複数ステップの操作でエラーが発生しました。各状態の値を確認してください」です。 SQL文を変えて試してみると、何故かデータ型がDECIMALのカラムが含まれているとエラーになります。 DECIMALだといけないかと思うと、挿入は問題なく出来ます。 cn.Execute "insert into tbl (id,decimal_clm) values (10,900);" ご存知の方がいらっしゃいましたら宜しくお願いします。

    • ベストアンサー
    • MySQL
  • タイムアウトして表示できません

    以下を実行すると数分かかった挙句タイムアウトします。 どう改善すれば表示できるでしょうか? IIS 5.1 SQL Server 2005 DBへの接続はconfig.aspで設定してあり、以下とは別のスクリプトの時にconfig.aspを読み込んでのDB接続はできています。 <!--#include file="config.asp" --> <table> <tr> <td><span><b>最終10ログイン</b></span></td> </tr> <tr> <td><span>名前</span></td> <td><span>ログアウト時間</span></td> </tr> <% set rs = Server.CreateObject("ADODB.recordset") sql="select top 10 * from テーブルA, テーブルB where テーブルB.列A=0 AND テーブルA.Id=テーブルB.列1 order by 列B desc" rs.open sql,conn,1,1 do while not rs.eof %> <tr> <td height="19" align="middle"><%=rs("列2")%></td> <td align="middle"><%=rs("列B")%></td> </tr> <% rs.movenext rs.close loop set rs=nothing %>

  • VBからAccessへの接続でエラー

    OS:Win2K SP4 SOFT:VB6 ACCESS2K Dim strDatabase As String Dim cn As Object Dim rs As Object Sub xx() Set cn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") strDatabase = "C:\出荷配送システム\mftbc.mdb" cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & strDatabase ・       ・       ・ End Sub 上記ソースの「cn.OPEN」メソッドでエラーが発生します。 エラー内容は 'OPEN'メソッドは失敗しました。'_Connection'オブジェクト データベースに接続できません。 です。 何が原因なんでしょうか?? mdbのあるPath,File名は合っています。

  • アクセス2003 「ODBC--リンク テーブル'テーブル1'での更新に失敗しました。」となる。

    Sub test() Public cn As New ADODB.Connection Public rs As New ADODB.Recordset cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CurrentProject.FullName rs.Open "Qクエリ", cn, adOpenStatic, adLockPessimistic rs("進捗") = "" rs.Update  ←ここでエラー rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub のコードを実行すると アクセスが「応答なし」になり、その後 「ODBC--リンク テーブル'テーブル1'での更新に失敗しました。」となります。 Qクエリはテーブル1とテーブル2でできています。 毎回発生するエラーではなく、エラーにならない時もあります。 何か原因がわかる方いらっしゃいますか? ご教授よろしくお願い致します。

  • JavaScript+ASPによるaccessのデータの追加、削除

    JavascriptでASP(IIS)を使ってAccess2000にあるデータをブラウザに表示する事はできたのですが、今度はaccessにあるデータを追加、削除したいのですが、SQLを変えてもエラーがでます。 どのようにしたらいいですか?教えてください。 初心者なもんで、質問が分かりにくいと思いますが、お許しください。どうぞ、よろしくお願いします。 <%@Language="JavaScript" %> <html> <head> <title>一覧→詳細</title> </head> <body> <table border="1"> <tr> <th>商品コード</th><th>商品名</th><th>価格</th> </tr> <% var db=new ActiveXobject("ADODB.Connection"); db.Open("Webware"); var rs=db.Execute("SELECT * FROM products"); while(!rs.EOF){ %> <tr> <td><a href="descj.asp?id=<%=Server.URLEncode(rs("id"))%>"> <%rs("id")%></a></td> <td><%=rs("nam")%></td> <td><%="\\" + rs("val") %></td> </tr> <% rs.MoveNext(); } %> </table> </body> </html>

  • ODBCを使用したSQLの使い方を教えてほしいです

    タイトルの内容を調べているのですが、上手くヒットせず、 同じように記述してもエラーになってしまいます。 よくわかりませんので、教えてほしいです。 odbc_connectは通っているようなので、接続はできている と思います。 $rs=odbc_exec($conn,$sql);にてエラーになるようです。 Warning: odbc_exec():が出ます。 よろしくお願いします。 print ("<html>"); print ("<body>"); $conn=odbc_connect('m_db','',''); if (!$conn) { exit("Connection Failed: " . $conn); } $sql = "SELECT * FROM test_table"; $rs=odbc_exec($conn,$sql); if (!$rs) { exit("Error in SQL"); } echo "<table><tr>"; echo "<th>Companyname</th>"; echo "<th>Contactname</th></tr>"; while (odbc_fetch_row($rs)) { $compname=odbc_result($rs,"CompanyName"); $conname=odbc_result($rs,"ContactName"); echo "<tr><td>$compname</td>"; echo "<td>$conname</td></tr>"; } odbc_close($conn); echo "</table>"; print ("</body>"); print ("</html>");

    • ベストアンサー
    • PHP
  • Oracleとの接続について教えてください

     仕事ではじめてASPを作ることになったのですが、 Oracleとの接続がうまくできません。人から「これで接続できるはず」と言われたソースを使ったのですが、接続できませんでした。すみませんが、アドバイスをお願いします!! ******************* <HTML> <HEAD> </HEAD> <BODY> <% Dim cnnSample Dim rstSample Dim strConnectString Dim strSQL Set cnnSample = CreateObject("ADODB.Connection") strConnectString = "Provider=msdaora;User Id=***;Password=***;server=***;database=***;" cnnSample.Open strConnectString Set rstSample = CreateObject("ADODB.Recordset") strSQL = "SELECT * FROM SAMPLE" rstSample.Open strSQL, cnnSample, 3, 1, 1 %> <%Do Until rstSample.EOF%> <%=rstSample("NAME")%><BR> <%rstSample.MoveNext%> <%Loop%> <% rstSample.Close Set rstSample = Nothing cnnSample.Close Set cnnSample = Nothing %> </BODY> </HTML> **************** 以下、エラー画面 Microsoft OLE DB Provider for Oracle エラー '80004005' ORA-03121: インタフェース・ドライバが接続されていないため関数は実行されません。 /ado1.asp, 行 15 **************** すごくしょうもない間違いだったらすみません。

  • オラクル11gでMAXを使うとエラーになった。

    お世話になります。 WIN7 Oracle11g の環境で dim rs as new adodb.recordset sql = "select max(sal) from file_name where pcname= '" & PCN & "'" rs.open sql,cn,adopenstatic,adlockoptimistic を実行すると ora-00937 のエラーになってしまいます。 oracle9iでは、エラーにならなかったのですが、なにか変ったのでしょうか。 どなたかご教授頂ければ助かります。