• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:データセットを選択するダイアグラムが表示される)

データセットを選択するダイアグラムが表示される原因とは?

このQ&Aのポイント
  • 質問文章で述べられた通り、db2.OpenExでの設定にもかかわらず、データセットを選択するダイアグラムが表示されることがあります。
  • 原因は、while文内でのrs2.Close()とdb2.OpenExの順序にあります。最初のrs2.Openで読み込んだデータが処理され終わる前にdb2.OpenExが呼び出されるため、ダイアログが表示されます。
  • 2度目の処理では、rs2.Close()が呼び出され、データセットの選択ダイアグラムが表示されないため、正常に処理されます。

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

  • ベストアンサー
回答No.1

>db2.Close(); >db2.OpenEx( _T( strCon2 ), CDatabase::noOdbcDialog ); ←2回目のときに表示される 同じパラメータでオープンするなら、クローズしなければいいだけでは? 前回の質問の原因は、「レコードセットがオープンされた状態で、再びオープンしようとしている」なので、「使い終わったレコードセットをクローズする」が正解のはずです。データベース自体をクローズする必要はありません。 それを理解していないから、whileの中に >CRecordset rs2( &db2 ); なんて記述がでてきちゃうんじゃないでしょうか。 また、前回も指摘しましたが、_Tマクロの使い方が変です。 _Tマクロは、UNICODE使用時に文字列リテラルにLをつけ、それ以外では何もしません。 > _T( strCon2 ) このような使い方は、UNICODE使用時にはエラーになります。

ichigo61
質問者

お礼

rs2.Close(); を入れたら、ダイアログが表示されなくなりました。 db2.Close(); がないと、rs2.Open のところで落ちていたので入れたのですが、そもそも、rs2.Close(); を入れていなかったためだったのでしょうか。 _T(strCon2) は、サイト検索して、そのままコピペして使っていましたが、参考になりました。 ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Debug Assertion failed

    VC++のSQL Server 2008 の処理中に、 Debug Assertion failed のエラーが発生します。 落ちている場所は、dbcore.cpp の中です。 デバッグトレースを見る限り、下記ソースの2回目のrs2.Open らしいところまで辿りましたが、 なぜ、2回目のrs2.Open で落ちるかの原因がわかりません。 CString strCon2="DSN=MAC3DB_DS;"; db2.OpenEx( _T( strCon2 ), CDatabase::noOdbcDialog ); CRecordset rs2( &db2 ); while(end_sw==0) { try{ rs2.Open( CRecordset::forwardOnly, _T("select * from mac3data where read_flg = 0 order by seq") ); while( !rs2.IsEOF() ) { for(int index = 0; index <= rs2.GetODBCFieldCount(); index++ ) { switch(index) { case 1 : rs2.GetFieldValue("seq", _T(str_seq));break; 中略 } 中略 rs2.MoveNext(); } }catch(...){} } }

  • 文字の連結がうまくいかない

    CString SQL_st; CString SQL_and; CString SQL_end; CString SQL_update; SQL_st = "update mac3data set read_flg = 1 where (seq >= "; SQL_and = ") and (seq <= "; SQL_end = ")"; SQL_update = SQL_st + st_seq + SQL_and + en_seq + SQL_end; 上記のように連結して実行すると、SQL_update には、 update mac3data set read_flg = 1 where (seq >= 1.00 までしか入っていません。 SQL_and 以後の文字が連結できません。 どこに問題があるのでしょうか? st_seq には、1.00 en_seq には、89.00 が入っています。

  • 2つのデータを統合を効率よく出来ません

    2つのデータを統合を効率よく出来ません 2つのデータを統合するプログラムをperlで作成しています。 データはテキストでサーバー環境にあります。 クラスデータ 1,1-1,1年 2,1-2,1年 3,1-3,1年 4,2-1,2年 5,2-2,2年 6,3-1,3年 7,3-2,3年 名前データ 1,田中,たなか 2,伊藤,いとう 3,斎藤,さいとう 4,上野,うえの 5,大阪,おおさか 6,福島,ふくしま 7,矢部,やべ 最終データ 1,田中,たなか,1-1,1年 2,伊藤,いとう,1-2,1年 3,斎藤,さいとう,1-3,1年 4,上野,うえの,2-1,2年 5,大阪,おおさか,2-2,2年 6,福島,ふくしま,3-1,3年 7,矢部,やべ,3-2,3年 以下のプログラムで動作させていますが、件数が多くなると非常に非効率となり動作しなくなります。 ※公開用にプログラムを修正しています。おかしい部分があるかもしれません。 (ここから) 略・・・ open(DB10,"<$namefile") || next; flock(DB10, 1); @lines10 = <DB10>; close(DB10); foreach $lines10 (@lines10) { ($seq,$name,$kana,$classnew,$nennew) = split("<>", $lines10); open(DATA,"$classfile")|| die &error(" $classfile を読み込みopen出来ません"); flock(DATA,1); @lines11 = <DATA>; close(DATA); foreach $lines11(@lines11){ ($seq1,$class,$nen) = split("<>", $lines11); $classnew = $class; $nennew = $nen; open(DATA1,"$classfile")|| die &error(" $classfile を読み込みopen出来ません"); flock(DATA1,1); @line21 = <DATA1>; close(DATA1); foreach $line21(@line21){ local(@val) = split("<>", $line21); if($seq1 == $val[0]){ $line21 ="";} push(@new,"$line21"); } push(@new,"$seq1<>$class<>$nen\n"); open(DATA1,">$classfile")|| die &error(" $classfile をwrite出来ません "); flock(DATA1,2); print DATA1 @new; close(DATA1); @new = ""; } @new1 = ""; open(DB12,"<$namefile") || &error("Can't open $namefile"); flock(DB12, 1); @line12 = <DB12>; close(DB12); foreach $line12 (@line12) { local(@val1) = split("<>", $line12); if($seq == "$val1[0]"){ $line12 ="";} push(@new1,"$line12"); } push(@new1,"$seq<>$name<>$kana<>$classnew<>$nennew<>\n"); open(DB12,">$namefile")|| die &error(" $namefile をwrite出来ません "); flock(DB12,2); print DB12 @new1; close(DB12); } } (ここまで) プログラムの流れとしては(私が解釈している)、2つのファイルを1件読み込み更新を最終行へ毎回行っているというものになります。 恐らく、もっと効率の良い方法があるとは思っているのですが、アイデアが浮かばす止まってしまいました。 このプログラムではなく別のものでもOKです。私がこの方法しかしらないのでこの記述をしています。 ファイルの更新系でアドバイスがいただけたらと思い書き込みます。 ご指導よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • Access2000のデータをASPで表示させるには?

    間違ってソースを全部消してしまって、記憶を頼りに戻してみたのですが、Accessのデータの表示方法がわからなくなってしまいました。 ↓これがそのソースです <%@ LANGUAGE="VBScript" %> <% Option Explicit %> <Html> <Head> </Head> <Body> <% Dim db,rs,sql Set db = Server.CreateObject("ADODB.Connection") db.Open ("db1")←データベース名入れるんですよね? sql = "Select id,namae,n_yomigana,juusyo,j_yomigana From table1 where db1" Set rs = db.Execute (sql) Response.Write rs.fields("id") Response.Write "<br>" Response.Write rs.fields("namae") Response.Write "<br>" Response.Write rs.fields("n_yomigana") Response.Write "<br>" Response.Write rs.fields("juusyo") Response.Write "<br>" Response.Write rs.fields("j_yomigana") Response.Write "<br>" rs.close db.close %> </Body> </Html> ソースを丸ごと載せてしまってごめんなさい、読みにくいですよね。 足りないところや直し方が思い出せなくて困っています。 ご迷惑おかけしますが、アドバイスお願いします。

  • ExcelVBAでAccessのデータを検索する

    Excel  VBA で、ADOを用いてAccess のデータを検索するにはどうしたらいいですか。 やりたいこと 検索結果を、Excel のセルにコピーすること。 ソースコード 'MDBファイルに接続します Set db = New ADODB.Connection db.Provider = "Microsoft.Jet.OLEDB.4.0" db.Open "C:\Database\test.mdb" 'レコードセットを開きます Set rs = New ADODB.Recordset 'テーブルを開きます rs.Open "PT_MST", db, adOpenForwardOnly, adLockReadOnly findName = ws.Cells(i, 1) & ws.Cells(i, 2) Do ' rs.Find "[S_NUM]='" & findName & "'" rs.Find rs.Fields(1).name & " Like '20k%'"  ← ここで、サポートしていない旨のエラーが出る。 If Not (rs.EOF) Then Debug.Print rs.Fields(1).Value Else Exit Do End If rs.MoveNext Loop Until rs.EOF '閉じる rs.Close db.Close '終了処理 Set rs = Nothing Set db = Nothing どう直したら、検出結果を取得できますか。 ご教示下さい。

  • csvデータの開始行と最終行を全体の4分の1で区切り処理をしたい

    csvデータの開始行と最終行を全体の4分の1で区切り処理をしたい csvデータの開始行と最終行を全体の4分の1で区切り処理をしたいと思ってます。 csvファイルは20万件あります。4分の1なので1~50000件となります。 今回は50001~100000件までを行いたいのですが、先日教えていただいたwhile($lines = <IN>) ですと、最初から1件ずつ最終行まで処理をしてしまいます。 (ここから) open(OUT,">$csv"); open(IN,"$data") || &error(" $data を読み込みopen出来ません"); while($lines = <IN>) { ($seq1,$categ,$password,$imail,$cont) = split("\,", $lines); $cont .= " "; $data = "$seq1,$cont,1\n"; print OUT "$data"; $data = ""; } close IN; close OUT; (ここまで) 今回は20万件ですが、毎回このデータ量は月次ごとに変わります。 while周辺をいじるような気がしていますがどのようになるのかがわからなかったので質問いたしました。 お手数かけます。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • SqlDataSource内容を読込みたい

    SqlDataSourceの内容をコントロールを介さずに1件ずつ読み込みたいが 以下のエラーが表示されます。 どのようにしたらエラーを回避できるか教えてください。 DB:Access2000 OS:WinXP 開発:VS2005 型 'System.Data.DataView' のオブジェクトを 型 'System.Data.SqlClient.SqlDataReader' にキャストできません Dim Rs As Data.SqlClient.SqlDataReader Rs = CType(SqlDataSource1.Select(DataSourceSelectArguments.Empty), Data.SqlClient.SqlDataReader) Do While Rs.Read() e.Cell.Controls.Add(New LiteralControl("<br />" & String.Format("{0}", Rs.GetString(0)))) Loop Rs.Close()

  • テーブルのデータをフォームに表示したい。

    テーブルのデータをフォームに表示したい。 Access2003で顧客管理のシステムを作成しています、 下記コードで検索フォームより顧客フォームを開き顧客テーブルのデータを渡していますが、 現在では顧客データを渡したいフォームが増えた為、各フォームにtxt顧客コードを設けて 標準モジュールで行った方が良いかと思うのですが、どの様にしたら良いか解りません。 良い方法がありましたらご教授よろしくお願いいたします。 Dim rs As ADODB.Recordset Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open "T顧客", cn, adOpenKeyset, adLockOptimistic rs.Find "顧客コード=" & Forms!F顧客検索!S顧客.Form.顧客コード Forms!F顧客!txt顧客コード = rs!顧客コード Forms!F顧客!cmb顧客区分 = rs!顧客区分 Forms!F顧客!txt顧客名 = rs!顧客名 rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing

  • Access VBA について

    Access2000 をXPで動かしています。 全く別のフォルダーに入れている ABC.mdb を使って、 \Seikyu というフォルダーにある 請求sys.mdb の テーブル「銀行マスター」から銀行名等を取りだそう としています。 Dim DB As ADODB.Connection Set DB = New ADODB.Connection DB.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=C:\Program Files\Seikyu\請求sys.mdb;" Set RS = New ADODB.Recordset RS.Open "銀行マスター", DB, adOpenKeyset, adLockOptimistic Me.T1 = RS!ID Me.T2 = RS!銀行名 Me.T3 = RS!口座 RS.Close DB.Close こうすると、 実行時エラー '3709': このコンテキストで閉じられているかあるいは無効です のエラーが表示されます。 どこが間違いなのでしょうか。

  • 日付期間の比較

    フォームから入力されたForm_timeに格納されている"900"という時間を表す値が、 DBデータの"900"という値と、"1000"という値の範囲に入るがどうかを判定して、 範囲内であればCheck_Flgという変数に1を格納、 範囲外であれば0を格納するよう処理を分岐したいのですが、肝心のIf条件内容を上手く書けないんです。 If (Cint(Form_time) = (Between rs("DB_STARTTIME") And rs("DB_ENDTIME"))) Then Check_Flg = 1 Else Check_Flg = 0 End If 「')' がありません。」と、コンパイルエラーが出てしまうんです... どうしたら、上手く判定出来るんでしょうか???