• 締切済み

データコントロールのRefreshができません

フォームにデータコントロール(以下Data1)と MSFlexGrid(以下グリッド)を貼り付けて MDBのデータを表示しています。 コマンドボタン押下のタイミングで、該当テーブルを更新し、 グリッドに更新されたデータを再表示しようとしていますが、 Data1にRefreshをかけてもグリッドのデータが更新されません。 何かご存知の方がいらっしゃったら、ご教授いただければと思います。 グリッドのDataSourceプロパティにはData1が設定してあります。 テーブルですが、どれも2件ずつしか入っていません。 フォームロード時の表示はうまく動作しています。 インタープリタでステップ実行すると、きちんと更新データが表示されます。 コードです(簡略化してあります)↓ sub Form_Load with Data1 .Database = MDB名 .RecordSource = "SELECT x.a,y.b FROM x,y WHERE x.a=y.a" end with end sub sub Command1_Click() ここでMDB更新  (複数件処理のためSQLにて更新処理を実施しています。   トランザクション管理ありです。) with Data1 .Recordset.Requery .Refresh end with end sub 環境です↓  VB6.0 SP6  DAO3.6  Access2000  Win2000 よろしくお願いいたします。

みんなの回答

回答No.1

思い切って、MSFlexGridでデータ連結させるの辞めるのは如何ですか? 私も同じ様な経験をして結局、文化オリエント社のスプレットに乗せ変えた記憶があります 又は、アクセスフォームを呼び出すとか(開発工数削減には有効な手段だと思います) データ連結コントロールはイマイチ使えないんですよね・・・。 時間が在れば、GUIとしてMSFlexGridを利用して、 ロジックでMSFlexGridから値取得し、更新処理は自分でSQL書いて実行した方が、データ連結が上手く出来ずにイライラする事無いと思いますよ。

sugar_donut
質問者

お礼

レスありがとうございます。 ある意味一番欲しかった回答をいただけたと思っています。 ダメなのですね、データコントロールの連結では・・・。 そうとわかれば、SQLでチマチマやるようにしたいと思います。 (有料コントロールは使ってはダメ!とのお達しがあって 使えないのです・・・) 「アクセスフォームの呼び出し」については 目からウロコのお話でした。 そうですね、そういったこともできますよね。 今後の開発での参考にさせていただきたいと思います。 回答ありがとうございました。

関連するQ&A

  • webデータの取り込み

    winxp he sp3, excel2003 下記a1は、データが取り込めます。a2はデータが取り込めません。web接続中の表示が出ます。 対策を教えてください。よろしくお願いします。 Sub a1() With ActiveSheet.QueryTables.Add(Connection:= _ "URL;http://member.rakuten-sec.co.jp/ITS/Companyfile/margin_restriction.html#9000" _ , Destination:=Range("A1")) .WebFormatting = xlWebFormattingNone .Refresh BackgroundQuery:=False End With End Sub Sub a2() With ActiveSheet.QueryTables.Add(Connection:= _ "URL;https://member.rakuten-sec.co.jp/app/com_page_template.do;BV_SessionID=MbGLLn3TQcKDczyjTp3j!-1697526501?type=info&sub_type=" _ , Destination:=Range("A1")) .WebFormatting = xlWebFormattingNone .Refresh BackgroundQuery:=False End With End Sub

  • データ入力用フォームでコントロールが表示されない

    はじめまして、 現在、ACCESS2000のMDBからADP+SQLへの移行をしているのですが。 「t_受注」テーブルをデータソースとするフォームを 「データ入力用プロパティ」を「はい」にして、 データ入力用のフォームとして使っていました。 ADPへアップサイジングしたら コントロールがまったく表示されずに困っています。 「データ入力用プロパティ」を「いいえ」にすると、 全てのコントロールと「t_受注」テーブルのデータが見えます。 どうか宜しくお願いします。

  • フォームのデータシートビューにてVBAで直接記述したSQL文を実行した結果を返すことは不可能でしょうか?

    リストボックス、コンボボックスなら Private Sub Form_Open(Cancel As Integer) With Form_フォーム1.リスト2 .RowSourceType = "Table/Query" .RowSource = "SELECT テーブル.フィールド, FROM テーブル" End With End Sub で結果を返すことは可能なのですが フォームをデータシートとして Private Sub Form_Load() Me.RowSourceType = "Table/Query" Me.RowSource = "SELECT テーブル.フィールド, FROM テーブル" End Sub とするのは不可能ですか? これを実行すると 「コンパイルエラー メソッドまたはメンバーが見つかりません」 となり、 「RowSourceType =」が選択されます。 そしてVBAの停止の意の四角ボタンを押すとユーザーフォームが図のようになります。 私のやりたいことは、クエリではなくVBAでSQL文を書き、データシートビューで表示させたいのですがやはり不可能でしょうか? (変数を代入できるため) 何でもいいのでご教授よろしくお願いします。

  • アクセスサブフォームで保存するとエラーとなる

    以前教えてもらった下記のサブフォームでのデータ保存VBAですが、このままだと添付ファイルのような画面が出てきてメインフォームでの保存が自動で出来ず、いろいろ試してみましたがうまくいきません。 何卒、ご指導宜しくお願い致します。 Private Sub 保存_Click() MsgBox "データを確定保存します" DoCmd.RunCommand acCmdSaveRecord If Not SysCmd(acSysCmdGetObjectState, acForm, "メインフォーム名") = 0 Then 'MsgBox "メインフォームの画面を更新します" With Forms!メインフォーム名 .Refresh End With End If End Sub

  • テーブルに追加したデータフォーム再起動することなくコンボに表示させたい

    アクセス2003を使用しています。 図のように テーブル1とフォーム1があります。 フォーム1の中にはコンボ0があり、値集合ソースはテーブル1です。 テーブル1にデータが追加されれば それに伴いコンボ0に表示されるデータも追加させていきたいのですが 1、テーブル1に「5」を追加する 2、テーブル1を保存する。 3、コンボ0を開く をしても新たに追加した「5」は表示されません。 一度フォーム1を閉じて、再度開けば「5」は表示されます。 そうではなく、リアルタイムに テーブル1に追加したデータを フォーム1再起動することなくコンボ0に表示させることは可能でしょうか? vbaで Private Sub コンボ0_Click() RowSource = "テーブル1" End Sub とやってみましたが 何も変わりませんでした。 ご教授よろしくお願いします。

  • サブフォームをリクエリしたい

    メインフォームのコマンドボタンを押下するとvbaを使ってテーブルのデータを更新します。 メインフォームの中にはサブフォームがあり、 そのサブフォームとテーブルがリンクしています。 サブフォームにはテーブルのデータが表示されており、 メインフォームのコマンドボタン押下→テーブルデータ更新 がされると、全て#Deletedという文字が表示されます。 なので、 Private Sub cmd_データ更新_Click() Call データ更新 Me.Controls("Fサブ").Form.Requery End Sub としたのですが、 「実行時エラー’2465’:指定した式で参照されている’Fサブ’フィールドが見つかりません。」 が発生します。 Me.Controls("Fサブ").Requery これにしても同じでした。

  • Refreshはどういう時に使えばいいのでしょうか

    フォームにはlst_ページとlst_子ページがあり lst_ページの選択を変えたら、 lst_子ページ値を更新する と言う事をやる為に lst_子ページの値集合ソースは SELECT T_ページ一覧.[ページ名], T_ページ一覧.[サイト名] FROM T_ページ一覧 WHERE (((T_ページ一覧.[サイト名])= [Forms]![F_Form]![lst_ページ])); とし、 Private Sub lst_ページ_AfterUpdate() Me.lst_子ページ.Refresh End Sub としました。 しかしこのままだと .Refreshがコンパイルエラーになりました。 これをRequeryに変えたらうまくいきました。 フォームなのにリ’クエリ’を使うことに違和感を感じますが とりあえず動いたの良いのですが であれば、 Refreshはどういう時に使えばいいのでしょうか?

  • データベースを更新したい(VB2008)

    VB2008でつくったアプリケーションでAccessのデータを更新したいです。DataGridView1でデータを表示させ更新ボタン押下時にデータ(Accessのテーブル)を更新したいです。 DataGridView1でデータを表示することはできましたが、「更新」押下に更新されません。 Accessのテーブル名は「01データです」 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me._01データTableAdapter.Fill(Me.年賀状DataSet._01データ) End Sub Private Sub 更新_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 更新.Click With DataGridView1 .Update()     End With     MsgBox("更新しました") End Sub

  • ExcelVBAのイメージコントロールについて

    こんにちは。Excel2000を使用している初心者です。 フォーム上には以下のものがあります。 Image1 Label1、Label2、Label3、Label4 CommandButton1 ・CommandButton1を押すとImage1に画像Aをロードして、次に押すと消すという動作をさせます。 ・Image1の上をマウスが動くと座標をLabel1(x)、2(y)に常に表示させます。 ・Image1をクリックするとそのときの座標をLabel3(x)、4(y)に表示させたままにします。 コードは以下の通りです。 Dim Flg As Boolean Flg = False Private Sub CommandButton1_Click() If Flg = False then Me.Image1.Picture = LoadPicture ("C:\A.jpg") Flg = True Else Me.Image1.Picture = LoadPicture ("") Flg = False End If End Sub Private Sub Image1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer,_ ByVal X As Single, ByVal Y As Single) Me.Label1.Caption = X Me.Label2.Caption = Y End Sub Private Sub Image1_Click() Me.Label3.Caption = Me.Label1.Caption Me.Label4.Caption = Me.Label2.Caption End Sub ・・・という記述なんですが、まず画像を表示させて、次にイメージをクリックしてLabel3、4に座標を表示させた後、CommandButton1を押してもイベントを受け付けてくれません。 イメージをクリックさえしなければ、画像の表示/非表示の切り替えはできます。 何が間違っている(足りない?)のでしょうか? よろしくお願いします。

  • マスタデータ更新

    こんにちは。 システム開発の基礎的なところがわからないので、教えていただきたく、投稿させていただきます。 システム開発をほとんどやったことがないので、言葉が変なところもあるかと思いますが、宜しくお願いいたします。 サーバー上に、AというSQLServerのDBがあります。 今までは、システム管理者のみがAccessからA.DBのリンクテーブルを使い、マスタデータの更新/追加/削除を行っていましたが、今後、リーダークラスの人もできるようにしたい!という要望があり、そのインターフェース部分を作成しています。 いろいろと考え、フロントエンド側にAccessでB.mdbを作成し、そこには、A.DBと同じテーブル構造の一時TBLを作成し、B.mdbを開いた時にA.DBから全データを取得することにしました。(取得するところまではできています) ここから、設定するための画面作成をしますが、最終的に、更新/追加/削除されたデータは、どのようにA.DBにUPすればいいのでしょうか? 考えた方法として (1)B.mdb内に、一時テーブルとは別に、更に同じ構造の変更用テーブルを作成。 設定画面から更新/追加/削除されたデータは変更用テーブルに保存し、全ての処理が終了したら、変更用テーブルにあるデータを1つづつ見て、A.DBへ更新/追加/削除をかける (2)一時テーブルのデータを直接更新/追加/削除し、全ての処理が終了したら、全テーブルのレコードを1件づつ比較し、A.DBへ更新/追加/削除をかける というくらいしか思いつかないのです。 その他に思ったのが、一時テーブルもしくは変更用のテーブルに、レコード毎に「更新/追加/削除」がわかるようにフラグを設けて、そのフラグに従ったSQL文を発行する というくらいです。。。 根本的に、マスタデータに対する更新/追加/削除のやり方が間違っていたりしますか? 誰も聞ける人がいないので、どうぞ宜しくお願いいたします!!!