ストアドの繰り返し処理についての問題

このQ&Aのポイント
  • 現在、ASPクラシックとストアドプロシージャーを使って、データのあるなしを、フラグとしてもたせようとしているが、うまくいかない。
  • 問題は、フラグ取得部分で、繰り返し店舗を読みながらフラグの値を関数に入れようとしているが、うまくできない。
  • 繰り返しをせずに単体で行うと、フラグは取得できるので、ストアド等は間違っていない。
回答を見る
  • ベストアンサー

ストアドの繰り返し処理について

いつもお世話になってます。 現在、ASPクラシックとストアドプロシージャーを使って、 データのあるなしを、フラグとしてもたせようとしているのですが、 どうしもてうまくいきません。 以下が、ASPのソース部分です。 <% '店舗一覧取得 Set rsStore = connectDB.Execute("tenpoget '" & 会社ID & "','" & 店舗ID & "'", updcnt, adCmdText) sstoreid = rsStore("store_id")'店舗一覧 'フラグの取得 i = 0 While Not rsStore.EOF Set rsflag = connectDB.Execute("gyoshatenpoget '" & 仕入コード & "','" & rsStore("店舗ID") & "'", updcnt, adCmdText) ssflag(i) = rsflag("flg") i = i + 1 rsStore.MoveNext Wend ssflag = rsflag("flg") %> 問題なのは、フラグ取得部分で、 繰り返し店舗を読みんで、フラグの値を関数に入れようとしています。 繰り返しをせずに単体で行うと、フラグはゲットできるので、ストアド等は間違ってません。 おそらく問題なのは、 ssflag(i) = rsflag("flg") の部分だと思いますが、どう書いていいかわりません。 年末のお忙しい中申し訳ありませんが、ご教授していただければと思います。

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

  • ベストアンサー
noname#212058
noname#212058
回答No.3

回答No.1です。 ○サーバー側の設定は変更できない為、ブラウザ側の  設定を変更してみましたが、詳細は表示されませんでした。 ⇒ サーバ側に設定を入れないと、この仕組みは動きません。   ASP でこの設定を入れずに開発するのは『藁の中から針を   探す』に等しい無謀な行為ですので、できればサーバ管理   者に頼み込んで入れてもらったほうが良いです。   # まさか、開発に使用しているサーバが「本番サーバ」と   # いうことはないですよね?   どうしても無理ということであれば、怪しいステップを以下   のコードで囲んで   On Error Resume Next   ★怪しいステップ   If Err.Number <> 0 Then    Response.Write "【エラー!】" & Err.Number & " " & Err.Description & vbCrLf   End If   これを実行して、出力されたエラーの内容を確認します。   ※ このコードを導入しても 500 エラー画面が表示されるよ     うであれば、このステップよりも前でエラーが発生して    います。   ※ エラーを特定したら、上のコードを消すのを忘れずに。    特に On Error Resume Next は『これ以降、エラー    が発生しても無視して次のステップを実行する』という    意味なので、放置すると後々変な動きになる可能性が    あります。

taka78ube
質問者

お礼

間違えて、上のほうに書いてしまったので、 再度記載させていただきます。 無事できました。 Dim ssflag(200) という風に配列を宣言したら、問題なく動きました。 何度もご回答いただき、ありがとうございました。

taka78ube
質問者

補足

お返事遅れてすいません。 実は本番環境でテストしているので、サーバーの設定を変更できないのです。 すいません。 教えていただいた方法で、正月明けに試してみようと思います。 何度も回答いただき、ありがとうございました。

その他の回答 (2)

noname#212058
noname#212058
回答No.2

回答No.1 です。 ○500の内部サーバーエラーが出るので、  サーバーサイドに問題があるのは、わかるんですけど。 ⇒ エラーが発生しているのであれば、最初からそう言ってください。   まずはエラーの内容が何なのかを確認するのが先決です。   500エラー云々ということは、エラーの詳細を表示させていませ   んね? まずは以下のページの内容を参考に、エラーの詳細を取得   してみてください。   http://network.station.ez-net.jp/server/microsoft/iis/classicasp_error.asp

taka78ube
質問者

お礼

無事できました。 Dim ssflag(200) という風に配列を宣言したら、問題なく動きました。 何度もご回答いただき、ありがとうございました。

taka78ube
質問者

補足

すいませんあまり慣れていない為、エラー記載しておらず、 大変申し訳ありませんでした。 サーバー側の設定は変更できない為、 ブラウザ側の設定を変更してみましたが、詳細は表示されませんでした。 ローカルPCにSIIを入れて、開いてみようとしましたが、 開けませんでした。 今日は時間切れで、足から環境がなにので、試すことができません。 コメントいただいてるのに、エラー詳細を表示できずに申し訳ありませんでした。

noname#212058
noname#212058
回答No.1

最後の ssflag = rsflag("flg") は何を意図した処理でしょうか? この処理でせっかく取得したフラグ値を、上書き消去している ように見えるのですが。

taka78ube
質問者

補足

回答ありがとうございます。 確かによくみたら、意味ないことしてますね。 ここの部分は削除しましたが、うまくいきません。 500の内部サーバーエラーが出るので、 サーバーサイドに問題があるのは、わかるんですけど。

関連するQ&A

  • クラシックASPでのストアド処理について

    いつもお世話になっております。 クラシックASPにて、ページを作成しています。 ASPでストアドを実行しているのですが、うまくいきません。 サーバー側で以下のように記載しています。 <% sscheckkekka = split(scheckkekka, ",") 'チェック結果のリスト For i = 0 To UBound(sscheckkekka) Set rsgyousya = connectDB.Execute("gyousyacopy '" & sCompanyID & "','" & sshiirecode & "','" & skana & "','" & skanji & "','" & stel & "','" & sfax & "','" & snaibu & "','" & sscheckkekka(i) & "'", updcnt, adCmdText) Next %> 「gyousyacopy」がストアド名です。 問題なのは、'" & sscheckkekka(i) & "'の部分で、 ここに例えば、'" & 9000 & "'などと入れて実行すると、問題なくストアドは実行されます。 試しにFor ~ Next部分も省略して、 sscheckkekkaも配列番号を入れた以下のようなものを試しましたが、 Set rsgyousya = connectDB.Execute("gyousyacopy '" & sCompanyID & "','" & sshiirecode & "','" & skana & "','" & skanji & "','" & stel & "','" & sfax & "','" & snaibu & "','" & sscheckkekka(0) & "'", updcnt, adCmdText) やはりストアドは実行されませんでした。 '" & sscheckkekka(0) & "' ここ部分の「'」か「"」の数の問題だと思い、いろいろ試してみましたが、うまくいきませんでした。 もしご存知の方がいらしゃいましたら、ご助言いただけると助かります。 宜しくお願いします。

  • ユーザーが定義したストアドプロシージャ一覧の取得

    SQL Server 2005で、 db内のストアドプロシージャ一覧を取得したいと思っています。 select o.* from syscomments c , sysobjects o where c.id = o.id and o.type='P' order by o.name といったように記述すれば一覧は取得できるようですが、 これだとシステムストアドプロシージャも表示されてしまいます。 ユーザーで定義したストアドプロシージャのみ取得したいのですが、可能でしょうか? 何か良い手段をご存じの方がいらっしゃいましたらアドバイス頂けますと嬉しいです。 どうぞよろしくお願いいたします。

  • ストアドプロシージャの処理終了を判定

    OS:windowsXP Pro Access Version:ACCESS2000 AccessVBAでストアドプロシージャを呼び出し処理をしていますが、ストアドプロシージャでの処理終了を判定して、次のステップに移るような処理を考えています。 SQLServerには、ODBC経由で接続しています。 ストアドプロシージャの呼び出しは巧く行くのですが、処理終了が判定できません。 具体的にはどうすればストアドプロシージャの処理の終了を判定することができるのでしょうか?      Dim adoCN As ADODB.Connection Dim str_adoCN As String Dim strCommand As ADODB.Command Dim RS As New ADODB.Recordset str_adoCN = "Data Source='SQL_XXXX'; User ID='XX';Password='XXXXXXXX';" Set adoCN = New ADODB.Connection adoCN.Open str_adoCN Set strCommand = New ADODB.Command Set strCommand.ActiveConnection = adoCN strCommand.CommandText = "Procedure_XXXX" strCommand.CommandType = adCmdStoredProc Set RS = strCommand.Execute() 次の処理....

  • ストアド内でカラム名一覧を取得

    =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ストアド内でカラム名一覧を取得、カンマで繋げてひとつの変数にまとめたい。 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 現在開発でストアドを使用する機会があり、そこで不明点が発生し悩んでおります。 以下、現状と質問です。 ■SQL SERVER 2000 ■テーブル(※)のカラム名一覧を取得し、  カラム名をカンマで繋げてひとつの変数に格納したいと思っています。  ※先の処理でカラムを取得したいテーブルをSELECTしており、  対象のテーブル名を変数に代入しています。  カラム一覧を取得するにあたり、以下のようにカーソルで習得し、  FETCHでカラム名を変数に格納しようと考えていましたが、  「'対象テーブル名'」には変数がいれられないので、どうしようかと悩んでいます。  DECLARE CURS_test CURSOR FOR   SELECT name FROM dbo.syscolumns   WHERE id IN   (SELECT id FROM dbo.sysobjects WHERE name = '対象テーブル名')   ORDER BY id, colid;  「sp_executesql」を使用してselect文を流そうとしたのですが、  複数ある列名を取得して、上記で記載しましたように  カラム名をカンマで繋げてひとつの変数に格納する方法がわかりませんでした。  こういった場合、どのように考えて、どのように書けばよいのでしょうか。  まだ触り始めたばかりで、わからないことがわかっていない部分もあり、  質問内容でわかりにくい部分がありましたらご指摘いただければと思います。  どうぞよろしくお願いいたします。

  • AccessVBAからのストアド起動について

    現在、Accessで元来の記述にストアド起動の1文を追加し、 SQLserver上のmasterデータベースに登録しているストアドを起動させようとしております。 起動方法として、xp_cmdshellを利用してみたのですが、 しかし、起動に必要なパラメータの受け渡しが上手くいかないため、動作が正常に行われません。 『』部は実際には定数が入っております。 VBA内容は以下の通りです。 ・既存箇所 set DB = createobject( "adodb.connection" ) DB.oprn "PROVIDER = SQLOLEDB.SERVER = "『サーバIPアドレス』","『ログインID』","『ログインパスワード』" ~~~(ここで開いたDB中のテーブル上のデータを読み取るなど実行) ・追加しようとしている記述(Null時はNz関数で""に置換) A = 「パラメータ1」 B = 「パラメータ2」 C = 「パラメータ3」 (これらは上記のDBからRecordsetで取得。必要な値が取得できることは確認済み) strsql= "EXEC MATSER..xp_cmdshell ’EXEC mastter..『ストアド名』 & A & B & C & "'" DB.Execute stersql sqlserver上で起動するときは EXEC mastter..『ストアド名』 'パラメータ1' ,'パラメータ2' ,'パラメータ3' で起動することが確認記できております。 既存部でパラメータ引き渡しの必要のないストアドは動作しているため、 パラメータの引き渡しに問題があると判断しておりますが、 何パターンか変更してもうまく動かないため、 アドバイスをいただければと思います。

  • ストアドから得られるレコードセットを、別のストアドで利用したい

    現在、実行するとあるレコードセット(1行1列のみ)を返すストアドプロシージャProc_Aがありますが、このプロシージャを実行して得られる結果を、 別のプロシージャProc_Bで、以下のような形で使用したいと考えています。 ただし、Case文内部でのストアドの実行や、変数へのストアドの実行結果の代入を試しましたが、どちらもうまくいっていません。 なにか、よい解決策があれば、教えていただければ、と思います。 パターンA) Case内部で直接実行 select case Table_A.param_1 when 0 then Exec Proc_A '***','**' else '' end パターンB)いったんパラメータとして取得 declare @values as char(10) execute sp_executesql N'@values = Proc_A ''***'',''**''', N'@values char(10) OUTPUT', @values OUTPUT

  • SQL Server 2000でのストアド

    現在,データベースの勉強中ですが,下記の内容で困っています。 ●SQL SERVER 2000のストアド CREATE PROCEDURE Strd_Test ( @aaa varchar(10), @bbb varchar(10), @rowcount int output, @msg varchar(100) output ) AS set nocount on begin select aaa,bbb from T_test where aaa=@aaa and bbb=@bbb end; select @rowcount=@@rowcount, @msg='検索に成功しました'; return GO ●Excel2003のVBA Private Sub btn1_Click() Set dbCN = New ADODB.Connection dbCN.Open "Provider=SQLOLEDB;" _ & "Data Source=*****,9999;" _ & "Initial Catalog=DB_Test;" _ & "User ID=sa;Password=" Set dbCOM = New ADODB.Command dbCOM.ActiveConnection = dbCN dbCOM.CommandType = adCmdStoredProc dbCOM.CommandText = "Strd_Test" dbCOM.Parameters.Refresh dbCOM.Parameters("@aaa") = "100" dbCOM.Parameters("@bbb") = "あいうえお" (1) ストアドの実行 (2) MsgBox "検索結果:" & dbCOM.Parameters("@rowcount").Value _ & vbCrLf & dbCOM.Parameters("@msg").Value (3) WorkSheets("Sheet1").Cells(1, 1).CopyFromRecordset dbRS dbRS.Close Set dbRS = Nothing Set dbCOM = Nothing End Sub ●こんな感じで,検索結果のレコードセットと, アウトプットパラメータの両方を取得したいのですが ExcelのVBAから,(1)のところで,   ・「dbCOM.Execute」とした場合には,    (2)でアウトプットパラメータが正常に返ってきます    (3)は,当然エラーです   ・「Set dbRS = dbCOM.Execute」とした場合には,    (2)でアウトプットパラメータが2つとも空です    (3)は正常にレコードセットを取得できます こうなってしまうのですが,レコードセットと アウトプットパラメータの両方を取得するためには, どこを修正すれば良いのでしょうか? どなたか,お力を貸してください。

  • mysql データベース処理が途中で失敗したら?

    お世話になります。 現在、mysqlのデータベースを使ったphpプログラムを書いているのですが、 以下のように、続けて2つのデータベース処理を記述している部分があります。 $db=connectDb(); //処理1 $st1=$db->prepare("update table1 set title=:title where id=:id1 limit 1"); $st1->execute(array(":title"=>$title,":id"=>$id)); //処理2 $st2=$db->prepare("update table2 set image=:image where id=:id2 limit 1"); $st2->execute(array(":image"=>$image,":id"=>$id2)); db=NULL; ここで質問があります。 このような記述ですとなんらかの理由により、例えば、 「処理1のアップデート処理は成功したが、 次の処理2のアップデート処理には失敗してしまった。」 というような問題は起きることがあるのでしょうか? 起きることがある場合、それに備えてどのような記述をすれば対応できるでしょうか? ご存知の方、ご回答いただければ幸いです。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • バッチで実行するVBScriptからのストアドプロシージャの実行

    VBスクリプトでDBにアクセスし、ストアドプロシージャを実行したいのですが、実行できなくて困っています。ADODB.Commandを使わずに、ADODB.Connection.ExecuteでCommandTextを実行するとレコードを取得することができるので、DBにコネクトすることはできているようなのですが、ストアドプロシージャを実行することができません。どなたか原因分かる方いらっしゃいますでしょうか。このスクリプトはASPではなく、バッチで実行します。よって参照設定ができないので、ComandTypeにadCmdStoredProcを値で入れるようにしています。サーバはWindows2003Server,DBはSQLServer2005です。よろしくお願いします。 Option Explicit On Error Resume Next Dim blnRetCode ' 戻り値 Dim objAdoCon ' ADO 接続 Dim objComm ' コマンドオブジェクト 'Dim return_value 'DBバックアップの成功、失敗の戻り値 ' ADO 定数の読み込み Set objAdoCon = WScript.CreateObject("ADODB.Connection") If Err.Number = 0 Then 'ADODBを使用してDBにアクセスする objAdoCon.ConnectionString = "Provider=SQLOLEDB.1;Password=aaaa;User ID=user2;Catalog=dbname;Data Source=192.168.8.2" objAdoCon.Open Set objComm = CreateObject("ADODB.Command") objComm.ActiveConnection = objAdoCon objComm.CommandType = 4 objComm.CommandText = "ExportData" objComm.Execute If (Err.Number <> 0) Then MsgBox Err.Number End If objAdoCon.Close End If Set objComm = Nothing Set objAdoCon = Nothing

  • postgres ストアドファンクションないのレコードの取得について

    質問させていただきます pg/plsqlのストアドファンクション内で 受け取った引数を sql := select * from hoge; FOR rec IN EXECUTE sql LOOP return rec.col;     <<<この部分で END LOOP; return; rec.引数名のようにして 引数から取得した 列を指定したいのですが、そのまま入れると そのような列はありませんと言うような返事を 返されてしまいます。 うまくやる方法はないものでしょうか? よろしくお願いします。

専門家に質問してみよう