• ベストアンサー

.NTEで書き込み中にProgressBarを表示させたいのですが・・

いつもお世話になっています。 まだ初心者レベルの為、質問内容も不鮮明な点もあるかと思いますがご理解のうえ宜しくお願いいたします。 ダミーのデータをランダムで1000件ほど作成して計算処理・書き込み処理を行なってみました。 計算はとても速く数秒で終了しましたが、書き込みに約7分程度かかりました。 計算処理中は進捗状況をテキストに表示させ、合わせてProgressBarをPerformStep()で増やし表示させています。 こちらはループ処理なのでUpdateやRefreshなどで対応できたのですが書き込み中はどうしてProgressBarが動作しません。 ProgressBar2.Style = ProgressBarStyle.Marquee ProgressBar2.Refresh() (メーターがちょこっとだけ動いて止まります) dAdp.Update(dset, "tbl_data") '書き込み この書き込み処理中をMarqueeでもよいので表示させたいです。 タイマーでRefresh()させてみたのですが駄目でした。 本当は書き込んでいる進捗レコード数を表示したいところですが・・無理ですよね? 良い方法がございましたらお教え頂けると助かります。 宜しくお願いいたします。

  • MIKAHA
  • お礼率90% (107/118)

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

  • ベストアンサー
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

DataAdapterのRowUpdatedイベント

MIKAHA
質問者

お礼

ご回答ありがとうございます。 聞いたことがないイベントのため、今一生懸命調べています。 とても難しくて、私のレベルで理解できるかどうか?? ありがとうございました。

その他の回答 (1)

  • baq777
  • ベストアンサー率28% (20/71)
回答No.1

書き込みの処理を一度に1000件書かずに 10件書き込み→プログレスバー→書き込み・・・ とかすればできそうですけどね。 パフォーマンス低下しますかね・・・

MIKAHA
質問者

お礼

ご回答ありがとうございます。 そうですね。確かにできそうですね。 しかし、最大10000件ぐらいまで予定していますので・・

関連するQ&A

  • TextBoxに文字を書いても表示されない

    お世話になります。 VB 2008 EE を使っており、まだ素人レベルですが宜しくお願いいたします。 データリーダーでテーブルデータを取得して計算結果をデータアダプター経由で保存する処理をテスト中です。 ダミーデータを10000件程度作ってSQLで並び替えをしても数秒で完了するのですが、計算を入れたらとても時間がかかります。(30分程) これもプログラム構造の問題なのかもしれませんが現在調査中です。 そこで、計算処理の進捗状況をリッチテキストに書き込もうと思っています。 例"現在***まで完了しています(改行)"といったかんじです。 (現状は「ProgressBar」を表示させています。) 純粋に読み込み処理の前にテキストボックスに文字を書き換えても変わってくれません。 計算が全て完了した後であれば書き換えがでします。 「完了しました」のような感じです。 Call(サブルーチン)で間接的にやらせてもだめでした。 テキスト書き換えが完了するまえにデータリーダーの接続が始まった為? って感じがします。 NET情報でも色々調べたのですがわかりません。 説明が不鮮明で分かりにくいかもしれませんが、ご理解のほど宜しくお願いいたします。

  • VB6 DoEventsの代わりは?

    お世話になります。 progressbarを表示するために、 重たい処理のループの中ではDoEventsを入れることで表示ができているのですが、 ループとループの間でprogressbarを更新するには、どのようにしたらよろしいでしょうか? ***** 現状 for i =1 to 9999 重い処理 Frm_ProgressBar.ProgressBar1.value = 進捗数 DoEvents next i ***** やりたいこと for i =1 to 9999 重い処理A next i Frm_ProgressBar.ProgressBar1.value = 進捗数 DoEvents for i =1 to 9999 重い処理B next i

  • C#でアクセスに更新するときの文字の色&呼び出すときの文字の色

    はじめまして。今回質問させていただく内容は。 C#でSQL文によってACCESSに更新するとき、更新した文字を更新したとわかりやすくACCESSのテーブルに赤色で表示させたいのですが。 SQL文によってどのように文字の色を変化させて追加するのかわからずにいます。 そしてこのことが可能であるならば、ACCESSのテーブルをSQL文で呼び出しデータグリッドビューに表示させるときもACCESSのテーブルのレコードの文字の色もまるっきり同じに呼び出すことは可能でしょうか? 下記にSQLでアクセスに更新するプログラミングと呼び出すとき使ったプログラミングを記述しておきます。 もし可能なら方法などご回答いただけたら嬉しいです。 ACCESSのデータを更新するプログラム System.Data.OleDb.OleDbCommandBuilder cBuild; System.Data.OleDb.OleDbDataAdapter dAdp; DataSet dSet = new DataSet("t_作業実績"); DataTable dTbl; System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection( "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source =C:\\Documents and Settings\\05d9096\\デスクトップ\\MES.mdb;"); //データセットに取得する dAdp = new System.Data.OleDb.OleDbDataAdapter("SELECT * FROM 作業実績",cn); dAdp.Fill(dSet, "t_作業実績"); //コマンドビルダの作成 cBuild = new System.Data.OleDb.OleDbCommandBuilder(dAdp); //データセットからテーブルを取得して更新する dTbl = dSet.Tables["t_作業実績"]; dTbl.Rows[num-1]["移動個数"] = textBox2.Text; dAdp.Update(dSet, "t_作業実績"); MessageBox.Show("ok"); ACCESSからデータグリッドビューへ呼び出すプログラム System.Data.OleDb.OleDbDataAdapter dAdp; DataSet dSet = new DataSet("作業実績"); System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=C:\\Documents and Settings\\05d9096\\デスクトップ\\MES.mdb;"); //C:\\Documents and Settings\\05d9096\\デスクトップ\\MES.mdb //datasetに取得し、DATAGRIDVIEWに関連ずけする dAdp = new System.Data.OleDb.OleDbDataAdapter("SELECT * FROM 作業実績", cn); dAdp.Fill(dSet, "作業実績"); dataGridView2.AlternatingRowsDefaultCellStyle.BackColor = Color.LightGray; dataGridView2.DataSource = dSet.Tables["作業実績"];

  • OLE でACCESSデータを取得するとメモ型の内容255文字で切れてしまう

    お世話になります。 ■開発環境  VisualBasic2008 Express Edition  ACCESS2003(データ) ■質問内容  VBでaccessのmdbからデータを取得し、画面に表示しようと  しています。  ところが、メモ型の項目が255文字で切れてしまいます。  webでいろいろと調べましたが、jetエンジンの問題かなという  ところまではたどり着いたのですが、具体的にどうすれば改善  できるのかわかりません。  わかる方教えていただけないでしょうか。  よろしくお願いいたします。 ■ソース Dim SQL As String Dim Cn As OleDb.OleDbConnection = New OleDb.OleDbConnection( _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="c:\message.mdb;") Dim dAdp As OleDb.OleDbDataAdapter Dim dView As DataView Dim dSet As DataSet = New DataSet("Detail") SQL = "SELECT M_ID,M_Title,M_Detail FROM MESSAGE_TBL " dAdp = New OleDb.OleDbDataAdapter(SQL, Cn) dAdp.Fill(dSet, "Detail") dView = New DataView(dSet.Tables("Detail"), "", "", DataViewRowState.CurrentRows) DataGridView1.DataSource = dView M_ID : 数値型、M_Title : テキスト型、M_Detail : メモ型 DataGridView1に表示されるときには、M_Detailが255文字になっています。     また、 'MessageBox.Show(Len(dSet.Tables("Detail").Rows(1)(2)))     で見たときにすでに255文字に切れていました。

  • スレッド処理からダイアログを表示するには?

    Windows XPとVC++ 6.0で 時間のかかる大量の計算をするプログラムを作っています。 計算部分はスレッド処理にして 進捗ダイアログ(CDialogにCProgressCtrlを貼り付けたもの) を表示します。 ・CWinAppのInitInstanceで計算処理開始(AfxBeginThread) ・計算処理内で進捗ダイアログをCreate ・計算の進み具合によって進捗ダイアログのプログレスバーを更新 上記の流れではうまくいっていたのですが 以下のように変更したところ、進捗ダイアログをCreateするところで プログラムが応答なしになってしまうようになりました。 ・メインダイアログ(モーダル) ・メインダイアログのAボタンクリックでダイアログAを開く(モーダル) ・ダイアログAの実行ボタンクリックで計算処理開始(AfxBeginThread) ・計算処理内で進捗ダイアログをCreate ・計算の進み具合によって進捗ダイアログのプログレスバーを更新 MFC Wizardでダイアログベースで作成、MFCの共有DLLを使用しています。 モーダルダイアログ→スレッド→CDialog.Createに 制限があったりするのでしょうか。 どうかご教授ください。

  • MDBのフィールド数が多いとエラーになります。

    下記のコードは、 (1)フォームロード時にアクセスのデータベースにアクセスし、データグリッドビューに表示 (2)フォーム上のデータグリッドビューを編集 (3)データベースに登録ボタン押下すると、フォーム上にあるデータグリッドビューをアクセスのデータベースに反映(update) という作業を行うプログラムです。 このコードを実行した場合、アクセスのデータベース(登録.mdb)のフィールド数の100以上になると、「クエリーが複雑すぎます」とのエラーが出て、データベース(登録.mdb)の更新が行えません。 何とかエラーを出なくする方法は無いでしょうか? PC環境はWINXP+VS2008です。 Imports System.IO Imports System.Data Imports System.Windows.Forms Public Class Form1 Public dAdp As OleDb.OleDbDataAdapter Public dSet As DataSet = New DataSet("T_資料") Public Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load ''▼フォームロード時の処理 Dim cn1 As New OleDb.OleDbConnection("Provider=""Microsoft.Jet.OLEDB.4.0"";Data Source=" & Application.StartupPath & "\登録.mdb;") Dim cmd1 As New OleDb.OleDbCommand("SELECT * FROM T_資料", cn1) cn1.Open() dAdp = New OleDb.OleDbDataAdapter("SELECT * FROM T_資料", cn1) dAdp.Fill(dSet, "T_資料") Me.DataGridView1.DataSource = dSet.Tables("T_資料") cn1.Close() End Sub Public Sub cmd_Db_reg_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_Db_reg.Click '▼「データベースに登録」ボタンを押下したときの処理 Try Dim Builder As New OleDb.OleDbCommandBuilder(dAdp) Builder.GetUpdateCommand() dAdp.Update(dSet.Tables("T_資料")) MessageBox.Show("更新に成功しました。") Catch ex As Exception MessageBox.Show("更新に失敗しました。" + vbCr + ex.Message) End Try End Sub End Class

  • データグッドビュー編集後のエラーについて

    VB初心者です。 (1)フォームロード時にアクセスのデータベースにアクセスし、データグリッドビューに表示 (2)フォーム上のデータグリッドビューを編集 (3)データベースに登録ボタン押下すると、フォーム上にあるデータグリッドビューをアクセスのデータベースに反映(update) というプログラムを作成中ですが、データベースに登録ボタンを押下すると「オブジェクト参照がオブジェクト インスタンスに設定されていません。」とのエラーが出ます。 ネットで色々調べたのですが、よくわかりませんでした。 このエラー内容が分かる方、ご教示の程よろしくお願いします。 PC環境はWINXP+VS2008です。 Imports System.IO Imports System.Data.OleDb Public Class Form1 Dim dAdp As OleDb.OleDbDataAdapter Dim dSet As DataSet = New DataSet("T_資料") Public Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load '▼フォームロード時の処理 Dim cn1 As New OleDb.OleDbConnection("Provider=""Microsoft.Jet.OLEDB.4.0"";Data Source=" & Application.StartupPath & "\登録.mdb;") Dim cmd1 As New OleDb.OleDbCommand("SELECT * FROM T_資料", cn1) cn1.Open() Dim dAdp As OleDb.OleDbDataAdapter dAdp = New OleDb.OleDbDataAdapter("SELECT * FROM T_資料", cn1) dAdp.Fill(dSet, "T_資料") DataGridView1.DataSource = dSet.Tables("T_資料") End Sub Public Sub cmd_Db_reg_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_Db_reg.Click '▼「データベースに登録」ボタンを押下したときの処理 Try Dim adapter As New tourokuDataSetTableAdapters.T_資料TableAdapter() dAdp.Update(dSet, "T_資料") MessageBox.Show("更新に成功しました。") Catch ex As Exception MessageBox.Show("更新に失敗しました。" + vbCr + ex.Message) End Try End Sub End Class

  • 一週間前から,今までVBAで行っていたものを,理由がありVisual

    一週間前から,今までVBAで行っていたものを,理由がありVisual Studio 2008を用いて作成しなおしています. しかし,VB .net自体,完全な初心者で,「独習VisualBasic2008」で勉強しているレベルです. 質問内容はというと,ADOでエクセルファイルのデータを読み込み,DataTableを作成し,DataGridViewで表示するということを行いたいのです. このような感じで... cn = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source =" & ExcelFileName & "; Extended Properties = ""Excel 12.0; HDR=NO""") dAdp = New OleDb.OleDbDataAdapter("SELECT * FROM [Sheet1$]", cn) dAdp.Fill(dSet, "Table1") dgv1.DataSource = dSet.Tables("Table1") ここで,Extended PropertiesのHDRがNOになっていることに注目していただきたいのですが,あとでトランスポーズを行いたいため,このようにしています. そして読み込むデータはこんな感じです. 文字 文字 文字 文字 文字 0 0 0 0 0 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 ... ほんとうはもっと大きいのですが,とりあえず,これをこのまま読み込んでしまうとデータ型が自動的に予測されてしまい(デフォルトでは8行目までスキャンされると書いてありました)データ型が自動的にInt32になってしまいます. このため,DataTableでは一行目が文字ではなくなってしまい 0 0 0 0 0 と表示されてしまいます. これをそのまま文字として表示させるにはどのようにすればいいのでしょうか? 一行目だけString 二行目からはDouble のようにしたいのですが.. そしてトランスポーズ後は, 一列目がString 二列目以降はDouble というようにしたいんです. よろしくお願い致します.

  • VBでModule1からForm1のコントロールを操作したい

    VB.NETでForm1のProgressBarをForm1.VBからではなく外部Module1.vbのサブルーチンから操作する方法はありませんか。"Dim Form1 as New Form1"などとするともうひとつフォームが開いたりしてうまくいきません。現在、下記の様にしてもうひとつ別のForm2を開いてプログレスバーを表示しております。 できるなら、Form1だけで済ませたいと思っております。 勉強不足でわかりません。どなたか教えてください。 Form2.Show() Form2.ProgressBar1.Minimum = 0 Form2.ProgressBar1.Maximum = 学習回数 Form2.ProgressBar1.Visible = True For 繰り返し = 1 To 学習回数 Form2.ProgressBar1.Value = 繰り返し Form2.lbl解析中.Text = 繰り返し Form2.Label1.Update() Form2.lbl解析中.Update()      ****処理**** Next

  • ダウンロードの進捗表示について

    1903をアップデートしたあと、 Microsoft Edgeのダウンロード進捗を表示する箇所で、 今までは、今ダウンロードしようとしているデータがどのくらいのbyte数であるかの表示があったのですが、 今はダウンロード済みのbyte数とスピードしか表示されなくなってしまっています。 これを元の表示形式に変更することは出来ないのでしょうか? ※OKWAVEより補足:「富士通FMV」についての質問です。

専門家に質問してみよう