更新処理の進行状況を表示する方法とは?

このQ&Aのポイント
  • VB6.0とSQL SERVERを使用して、WINXP上で更新処理の進行状況を表示したいです。
  • Form1にCommand1とPicture1,Picture2を配置し、指定のSQL文を実行します。
  • 更新処理の進行状況は、sSQLという変数に格納されたSQL文を実行することで表示できます。
回答を見る
  • ベストアンサー

更新処理の進行状況

VB6.0 SQL SERVER WINXPです。 下のSQLの更新処理の進行状況を表示したいのです。 Form1にCommand1とPicture1,Picture2を貼り付けたのですがこの後が分かりません。教えてください。 sSQL = " UPDATE m_zaiko SET " sSQL = sSQL & " 実在庫数=" & .CvtSQL(dblZaikoSuu, CVT_DBL) sSQL = sSQL & " WHERE " sSQL = sSQL & " 品番=" & .CvtSQL(strHinban, CVT_STR) gSvrADOActiveconnection.Execute sSQL, Affected, adExecuteNoRecords + adCmdText

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

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

ちくっと、変数の足し算が気になります。 例え、スタックエリアが利用されようとも4回も書き換えが発生するのでは・・・ それに、これだけでは何をアドバイスすべきなのかも・・・ Picture1、Picture2の意味も判りません。 (多分、ゲージコントロールの装飾のため・・・) 1、ゲージコントロール、プログレスバーの利用方法が判らない。 2、全体を品番でループさせ、SQL実行と進行を表示する構造設計が判らない。 3、そこまでは解明したが、実際にはゲージの表示が更新されない。 以上の全てについて・・・ 多少、どこでどう行き詰っているのかを回答者の立場で・・・ ※質問を書ければ回答も見つかったようなものです。

関連するQ&A

  • プログレスバーで

    VB6.0 SQL SERVER WinXPです。 UPDATEの処理の時に進行状況を表示したいのですが うまく動かずバーが真っ白のままです。 教えてください。 lCount = pbAdo.RsRecordCount(rc) With pvBase If rc.EOF = False Then picBar.Width = 0 labCount.Caption = "" labCount.Visible = True End If If rc.RecordCount Then rc.MoveFirst Do While Not rc.EOF sSQL = " UPDATE m_zaiko SET " sSQL = sSQL & " 実在庫数=" & .CvtSQL(dblZaikoSuu, CVT_DBL) sSQL = sSQL & " WHERE " sSQL = sSQL & " 品番=" & .CvtSQL(strHinban, CVT_STR) sSQL, lRet, adExecuteNoRecords + adCmdText picBar.Width = (picProgress.Width / lCount) * i labCount.Caption = CStr(i) & "/" & CStr(lCount) rc.MoveNext i = i + 1 DoEvents Loop Set rc = Nothing End With

  • UPDATE文で・・・・

    VBでUPDATE文を書いて実行したのですが うまく更新されません。 なぜなのでしょうか?教えてください。 SQL = " UPDATE t_tanaorosi SET " sSQL = sSQL & " 実在庫数=実在庫数-(実在庫数-棚卸数)" sSQL = "WHERE" sSQL = sSQL & " 実在庫数=" & pvBase.CvtSQL(TDBGrid.Columns("実在庫数").Value) 商品名を入力すると自動的に実在庫数が入力されるようになっています。 棚卸数を入力して登録して 同じ商品名を入力すると前回入力した棚卸数の数だけ減って自動に入力されるようにしたいのです。 よろしくお願いします。

  • アクセスにて月末日付を取得し、テーブルの中身を更新するには?

    お世話になっております。 Access2002で開発された以下のSQLが記述されているアクセスを要件がかわり、各月の月末日を設定したいのですが、どうしたらいいのかわかりませんので 教えてください。 現在の仕様  ある物件コードに複数の号棟がある場合、最新の日付 を持つ号棟コードの日付を"0000”に設定する。  例) 物件コード 号棟コード 日付     xxxxx   0001  2004/11/1     xxxxx   0002  2004/12/1     xxxxx   0000  2004/12/1     現在の仕様では、"0000”には 2004/12/1が    設定される したい事  例) 物件コード 号棟コード 日付     xxxxx   0001  2004/11/1     xxxxx   0002  2004/12/1     xxxxx   0000  2004/11/30     →最初に日付が設定されている11/1の月末日     を設定する 現在日付の最大値は”クエリ”にて抽出しているので 一番最初の日付”11/1”を設定することは”クエリ”の 条件を変更する事で設定することはできたのですが、 その先の月末日を設定する方法がわからないので 困っていますので宜しくお願い致します。 以下日付設定に関して現在記述されているSQL文 '全号棟竣工済みの[0000]号棟に最大の竣工日を設定 ssql = "delete * from T0000SET " gdb.Execute ssql Set oQy = gdb.QueryDefs("Q0000SET") oQy.Execute oQy.Close ssql = "UPDATE 号棟マスタ SET 号棟マスタ.竣工日 = Null WHERE (((号棟マスタ.号棟コード)=""0000""))" gdb.Execute ssql ssql = "UPDATE 号棟マスタ INNER JOIN T0000SET ON 号棟マスタ.物件コード = T0000SET.s1 SET 号棟マスタ.竣工日 = [s2]" ssql = ssql & " WHERE (((号棟マスタ.号棟コード)=""0000""))" gdb.Execute ssql

  • データの抽出で

    VB6.0 SQLSERVER  ID  品名  数量 コード 1  りんご  5  A-1 2  りんご  8  A-2 3 りんご  3  B-1 4  みかん  5  A-2 済みません。うまく説明できないのですが IDとコードの二つを抽出条件にしたいのです。 例えば1とコードA-1なら 1りんご5A-1を IDだけとかコードだけを条件にしたら うまく抽出できるのですが 2つになると「型が一致しません」とエラーになってしまいます。 お願いします。 教えてください。 Public Sub GetYukouzaiSuu(Optional Result As Boolean = True) Dim sSQL As String Dim dYukouzaiSuu As Double sSQL = ("品番=" + pvBase.CvtSQL(txtHinban.Text)) AND ("棚番=" + pvBase.CvtSQL(txtTanaban.Text)) dYukouzaiSuu = pvBase.CvtDbl(pbAdo.Lookup("m_zaiko", "isnull(実在庫数,0)-isnull(引当数,0)", sSQL)) numYukouzaiSuu.Value = MaxValueCheck(dYukouzaiSuu, numYukouzaiSuu.MaxValue) If pvBase.CvtLng(txtSeihinID.Text) = 0 Then If pvBase.StrLen(txtHinban.Text) > 0 Then labHinbanSt.Caption = "!" End If Else labHinbanSt.Caption = "" End If End Sub

  • URLの書き方

    MS SQLServerのテーブルに格納されている商品在庫データを、 xmlを使ってWebで見れるようにしております。 が、 ちょっと気になることがあるので質問させてください。 その在庫ページを見るのに、URLを ttp://○○○○.com/data/templete/getzaiko.xml?contenttype=text/html のように指定しているのですが、 ”?contenttype=text/html”の部分がURLに含まれるのがどうも気に入らないのです。。。 この部分をxmlファイル内に記述することはできないのでしょうか? 以下getzaiko.xmlの内容 ------------------------------------ <?xml version ='1.0' encoding='UTF-8'?> <root xmlns:sql='urn:schemas-microsoft-com:xml-sql' sql:xsl='sl_zaiko.xsl'> <sql:header> <sql:param name="userID">0</sql:param> <sql:param name="pwd">0</sql:param> <sql:param name="category">0</sql:param> <sql:param name="searchword"></sql:param> </sql:header> <sql:query> EXECUTE proc_Zaiko @userID, @pwd, @category, @searchword </sql:query> </root> ------------------------------------ ※proc_Zaiko はストアドプロシージャです。

    • ベストアンサー
    • XML
  • VC++でSQLServerにUpdateした際の更新件数

    Updateした時の更新件数は取得できないでしょうか。 以下のPGMで取得したいと思っています。 ★1の場合:更新はするけど、件数は取得出来ない。 ★2は _CommandのExecuteメソッドサンプルに件数取得方法が載っていたのですが、落ちる(catchされる) 何か良い方法ご存知の方教えて下さい。 _ConnectionPtr pConn; //Connectionオブジェクト _CommandPtr pCmd; // Commandオブジェクト _variant_t vtNull; //variant_t型NULL tagVARIANT *tUp; //更新件数を取得? try { pConn.CreateInstance(__uuidof(Connection)); pCmd.CreateInstance(__uuidof(Command)); //DB接続 pConn->CursorLocation = adUseClient; _bstr_t strConn("Provider=sqloledb;Data Source=127.0.0.1;Initial Catalog=TESTDB;User Id=testID;Password=Pass;"); pConn->Open(strConn, "", "", adConnectUnspecified); vtNull.vt = VT_ERROR; vtNull.scode = DISP_E_PARAMNOTFOUND; int lRow=0; tagVARIANT *tUp; // 更新処理 pCmd->ActiveConnection = pConn; pCmd->CommandText = "UPDATE T_TABLE SET NUM='123' where ID=TTD"; ★1 pRs = pCmd->Execute(NULL, NULL, adCmdText ); ★2 pRs = pCmd->Execute(tUp, NULL, adCmdText ); catch (_com_raise_error &p) { //エラー処理 } pConn->Close(); //Connectionオブジェクト return 0;

  • VBAからaccessへの接続で、RecordsetのCursorTypeが勝手に変更される

    エクセルVBAからaccessへの接続で、RecordsetのCursorTypeが勝手に変更されてしまいます。 Dim rst As New ADODB.Recordset rst.CursorType = adOpenStatic と「adOpenStatic」に設定したいのですが、 Set rst = con.Execute(sql_str, , adCmdText) のようにクエリを実行した直後にCursorTypeを調べると、「adOpenForwardOnly」に変わってしまっています。 (設定直後に調べると、ちゃんとadOpenStaticになっています) 「CursorType」を何に設定しても、Execute直後に「adOpenForwardOnly」になってしまっていまうようです。 CursorTypeをadOpenStaticにして、RecordCountを使いたいのですが、、、 CursorTypeが変わってしまう原因をお知りの方は、教えていただけるとありがたいです。 Dim rst As New ADODB.Recordset Dim con As New ADODB.Connection con.Open "Provider=Microsoft.jet.OLEDB.4.0;" & "Data Source=" & ThisWorkbook.Path & "\" & mdb_file & ";" rst.CursorType = adOpenStatic rst.LockType = adLockReadOnly MsgBox "前 = " & rst.CursorType Set rst = con.Execute(sql_str, , adCmdText) MsgBox "後 = " & rst.CursorType

  • AccessVBAのADOでのコーディングにて

     AccessVBAにて、ADOでコーディングをしようとしております。  久方ぶりのコーディングとなっており、かなり古い知識しか持ち合わせていないのですが、下記の様相でUpdate機能を書きましたが、これとは別にopenメソッドを使用した方法がADOではありますが、一体何が異なるのでしょうか?。  共にレコードロックする仕組みなようですが、ロックのタイミングが異なるのでしょうか?。 ********************** Set ct = Application.CurrentProject.Connection ct.BeginTrans str_Sql = "UPDATE テーブル1 SET " str_Sql = str_Sql + "テーブル1.ポジション名 = '" & Trim(txt_ポジション名) & "'," If Trim(txt_備考) = "" Or IsNull(txt_備考) = True Then str_Sql = str_Sql + "テーブル1.備考 = ''" Else str_Sql = str_Sql + "テーブル1.備考 = '" & Trim(txt_備考) & "'" End If str_Sql = str_Sql + " WHERE (((テーブル1.ポジションコード)='" & Trim(txt_ポジションコード) & "'));" ct.Execute str_Sql 'この後にロック開始 ct.CommitTrans 'この後にロック解除 ct.Close Set ct = Nothing ************************  上記でUpdateはできております。  ちなみに環境ですが、Access2010、Windows7です。    よろしくお願いします。

  • Access2000のADOのレコードセットに先頭一致SQLを指定できない

    お世話になっています。 さて、住所録があって、その住所の先頭と一致するレコードをSQLで抽出してその結果をレコードセットに代入したいのですが。 SQLは "SELECT 住所録.住所 FROM 住所録 WHERE 住所録.住所 Like '" & str住所検索 & "*';" というような感じです。(もうちょっといろいろあるけど) それで、 rst.Open strSQL, CurrentProject.Connection, adOpenStatic, adLockReadOnly, adCmdText rstはADOのレコードセットで、strSQLには上記のSQL文が代入されています。str住所検索には、検索したい住所の一部が代入されています。 これを実行すると、レコードセットにレコードが抽出されません。 WHERE句を 住所録.住所 = '" & str住所検索 & "';" と完全一致にすると抽出します。 しかし、全部の住所が一致するレコードを集めたいわけではないので、これでは困ります。 ちなみに、クエリーで実行するとちゃんと集まります。 なんとか、レコードセットにあいまい検索の抽出結果を代入できないでしょうか? ADOのレコードセットにはLike演算子は使えないのでしょうか? よろしくお願いいたします。

  • SQLインジェクション対策

    SQLインジェクション対策として、変数を直接SQLに埋め込むのではなく、PDOのprepareメソッドを利用して作成したステートメントに値をバインドする形式にする場合、ユーザー定義関数をどのように 修正すればいいですか? function update_item_stock($db, $item_id, $stock){ $sql = " UPDATE items SET stock = {$stock} WHERE item_id = {$item_id} LIMIT 1"; return execute_query($db, $sql); } function execute_query($db, $sql, $params = array()){ try{ $stmt = $db->prepare($sql); return $stmt->execute($params); }catch(PDOException $e){ set_error('更新に失敗しました。'); } return false; } 上記のユーザー定義関数を下記のようにbindValueを用いて表す場合、$stmt->bindValueの部分を 上記のどこに追加すればいいですか? try { $sql = 'UPDATE item_stock SET stock = ?, update_date = ? WHERE item_id = ?'; $stmt = $db->prepare($sql); $stmt->bindValue(1, $update_stock, PDO::PARAM_INT); $stmt->bindValue(2, $date, PDO::PARAM_STR); $stmt->bindValue(3, $item_id, PDO::PARAM_INT); $stmt->execute(); $complete_msg[] = '在庫変更に成功しました。'; } catch (PDOException $e) { $err_msg[] = '更新に失敗しました。理由:' . $e->getMessage(); }

    • 締切済み
    • PHP

専門家に質問してみよう