• 締切済み

レコードが勝手に移動する

Access(SQL Serverのテーブルをリンクテーブルとして使用) でレコードを新規追加した直後に勝手に別のレコードに移動する現象が起きます。 親フォームに入力した後、サブフォームに入力しようとした際などにも勝手に移動してしまうので、まともに入力ができません。 ・追加自体は正常にされている。 ・フォームのレコードソース的にありえないレコードに移動することもある。(レコードソースが「SELECT * FROM Test WHERE Col1=1」なのに、勝手に移動して「Col1=1」以外のレコードが表示されたりする。 ・SQL Server のマージレプリケーションをやめるとこの現象は起きない。 ・SQL Server で新しいスナップショットを使って再同期させると必ずこの現象が発生するが、数日後には起きなくなる(全く起きなくなるかは不明。起きる確立はかなり減る)。 ・特定のPCだけで起こるわけではない。 ※マージレプリケーションの対象は、すべてのテーブルとビュー(インデックス付ビューも含む)です。 何かいい解決案はないでしょうか? お願いいたします。 ▼サーバー OS:Windows Server 2003 R2 SP2 Enterprise DB:SQL Server 2005 Standard SP2 ▼クライアント Access 2003

みんなの回答

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.1

確認ですが、検索条件のキーとなっている Col1という項目ですが、主キーでしょうか? もし、Col1が主キーでない場合は、SQL Server側で インデックスを貼ってみるといいかもしれません。 またその時に、1日に1回程度、インデックスの再構築する Agentをしかけておくといいかもしれません。 ご参考になれば幸いです。

zut003
質問者

お礼

返事が遅くなってごめんなさい。 ご回答ありがとうございます。 特にWHERE条件を設定していない場合でも勝手に移動するフォームもあるんです。。。。(泣) しかも、勝手に移動するのは一つのテーブルだけではありません。 正直いって、SQL SERVER のせいかAccessのせいかもわかりません。 ためしにAccess2007でやってみると、この超常現象は起きませんでした。 (時間がたって勝手に治ったのかは不明です。) 最終的には、すべてのビューをレプリケーションのアーティクルから外して、各サーバー毎にローカルのビューを作ったところ、解消された風(再同期してもOKでした)なので、それで様子をみています。

関連するQ&A

  • アクセス2000のフォームでレコードの移動が出来ない。

    アクセス2000を使っています。 フォームで入力を途中までして終了し、後でフォームを開いて前のレコードに移動しようとしても移動できません。 新しいレコードの追加も出来ません。 どうしたらよいでしょうか。

  • ACCESS2003でテーブルに入力したレコードが、カーソルを上下に移動させると勝手に並びが変わってしまう件について

    ACCESS2003でテーブルに入力したレコードが、カーソルを上下に移動させると勝手に並びが変わってしまう件について質問です。 最下部にレコードを追加した後、カーソル上下に移動させ別のレコードに移る際、勝手にならびが変わってしまいます。 これはどこかの設定で解除できますでしょうか? (それとも私だけ?・・・) 何がきっかけでこのようになってるのかが分からず、レコード入力が不安で不安で困っております。 宜しくお願い致します

  • アクセスのフォームを開くときに新しいレコードへ移動するには?

    アクセスの入力用のフォームを開くときに、新しいレコードへ移動させて、すぐに入力ができるようにしたいのですが、マクロを使っても「レコードセットの最後のレコードよりも後に移動することはできません」のエラーメッセージが出てしまい、新しい入力ができなくなってしまいました。プロパティの更新の許可、追加の許可、削除の許可はいずれも「はい」にしています。どうすれば新しいレコードの入力ができるのでしょうか?困ってます。

  • フォームのレコードソース(Access2000)

    質問させていただきます。 フォームの「レコードソース」でテーブルとクエリーのほかに、「SELECT テーブル名、フィールド名・・・」というのがあります。これもクエリーなのでしょうか? ちなみに、レコードソースの右にある「---」をクリックすると「SQLステートメント:クエリビルダ」というものが開きます(クエリー画面と同じ?)。 また、フォームのレコードソースはテーブル、クエリー、SOLステートメントのどれにすれば良いのでしょうか?

  • サブフォームの帳票のレコードを編集している時

    ここに、親フォームと子フォーム(サブフォーム)があって 子フォームのレコードソースは、Workテーブルとします。 子フォームを編集・新規レコード追加すると、 親フォームの保存ボタン処理で、子フォームのレコード内容をWorkから、元テーブルに更新をかける知りをつくろうと考えています。 この時、 子側の帳票のレコードを編集したり、新規レコードを追加している時には ■『親側で、別のレコードに移動出来ないようにし、親側にある「保存」ボタンを押して、上記の処理をしたあとに、親側で別レコードに移動できる』 ような作りにしたいです。 これを実現するために、上の■『・・・』を実現できるようにするのには、どのようにしたら良いでしょうか? よろしくお願いします。

  • カーソルが次のレコードに移動する

    ACCESS2010を使用しています。 単票形式のメインフォームに、帳票形式のサブフォームが2つあるフォームを作成しています。 メインフォームには項目が20個程、サブフォームは共に4つ程の入力項目があります。 サブフォームとメインフォームのカーソルの移動にマウスを使用するのが面倒なので、PageUp/Donwキーを使用するようにしているのですが、PageDownキーを使用した時に何故なのか分からない現象が起きます。 入力済みのレコードを画面上に呼び出しPageUpキーを押すと、2つ目のサブフォームの入力済みレコード1件目の1個目の項目にカーソルが移動し、更にPageUpキーを押すと1つ目のサブフォームの入力済みレコード1件目の1個目の項目にカーソルが移動します。 ですが、PageDownキーをした時、1つ目のサブフォームへの移動はPageUpキーと同じ結果ですが、更にPageDownキーを押し2つ目のサブフォームに移動した時、入力済みのレコードではなく新しいレコードの1個目の項目にカーソルが移動してしまいます。 フォーム自身にもVBAにもそのような制御やコードは書いていないのですが、何故動きが異なるのかが分かりません。 ヒントになるような事でも結構です。

  • フォームのレコードソースの設定の仕方

    フォームを以下の手順で作成し、 1. 4つぐらいのテーブル間でリレーションを設定 2. その中の1つのテーブルから、フォームの自動作成 3. 出来たフォームのレコードソースの「・・・」ボタンをクリックして、1で設定した3つのテーブルを追加し、必要な項目を追加して、その設定内容を保存  →最初のテーブルは「テーブル名.*」として一覧に追加、その他のテーブルは、必要な項目だけを追加 4. デザインモードで、フォームの項目を追加してフォームを作成 再度、フォームのレコードソースを開くと、中身が消えてしまい、何もありません。 そして、エラーがおき、「「*」を有効なフィールド名、式として認識出来ません」というようなエラーになり、表示できません。 複数のテーブルを連結してレコードソースにスル場合、このようなエラーが起きるのでしょうか。また、解決方法なども教えていただけると助かります。 よろしくお願いします。

  • 特定の項目が同じ値のレコードを1件だけ出力するには

    教えて下さい。全くいいSQLが思い浮かびません^^; Table:Tbl(Primary Col1, Col2) ================================================ Col1, Col2, Col3, Col4, Col5, Col6 ------------------------------------------------ No1, Row1, ABC1, 1, DEF1, 1 No1, Row2, ABC1, 1, DEF1, 2 No2, Row1, ABC1, 1, DEF1, 1 No2, Row2, ABC1, 1, DEF1, 2 ================================================ 以上のテーブル情報の時、 Col3とCol4をキーにしてレコードを抽出します。 但し、抽出するレコード内容にCol5とCol6が同一なレコードは1件もありません。 上記テーブルから取り出したいレコードは以下の通りです。 Table:Tbl(Primary Col1, Col2) ================================================ Col1, Col2, Col3, Col4, Col5, Col6 ------------------------------------------------ No1, Row1, ABC1, 1, DEF1, 1 No1, Row2, ABC1, 1, DEF1, 2 ================================================ どういうSQLで上記のような抽出が可能になるでしょうか? 宜しくお願い致します。

  • ODBC接続で新しいレコードを追加できない

    OS XP SP3、ACCESS2003 DBはSQLserver2005express です SQL Server Management Studio Express を使って 新しいDB、テーブル、項目は作成できました。 また同じツールを使って手入力でデータを追記することもできます 質問はこのテーブルを ACCESSからODBC接続して 追加クエリーを実行したいのですが リンクしてテーブルを開いた時点で新規レコードが追加できない状態です。 サーバーの更新をしたく、少ないデータであれば手入力でも 大量のデータでは…ACCESSのクエリーを使いたいと思っております。 ODBC接続の設定が読み取り専用になっているのか そうであれば その設定はどこにあるのか 教えてもらえないでしょうか? 宜しくお願いいたします

  • マージレプリケーション ID値の返し方

    知識が浅く、自力で解決できないのでご協力お願い致します。 SQL Server2005を使用しています。 サーバーAとサーバーBで、マージレプリケーションで同期をとっているテーブルがあります。 Aの方のテーブルにストアドプロシージャを実行してINSERTし、そのID値(シーケンス番号)を直後にアウトプットとして取得したいのですが、どうも上手くクエリがうまく書けません。 例: AとBのあるテーブルには自動付番のシーケンス番号60までデータがあります。 AにINSERTして新規に追加されたデータのシーケンス番号は61となるので アウトプットとしてその61を返したいのですが、 マージの影響でコミット前のIDを返すのでしょうか、2など全く違った値が返ってきます。 実際にテーブルを確認すると、ちゃんとAもBもシーケンス番号61で新規追加されています。 現状のクエリではINSERT文のあとに 『SET @no_seq = @@IDENTITY』と記述していて、 マージレプリケーションを解除していれば@no_seqに正しいID値を返します。 他には ・@no_seq = SCOPE_IDENTITY ・@no_seq = IDENT_CURRENT('table_name') を試しましたが結果は同じでした。 クエリの書き方なのか、あるいは マージレプリケーションの設定にも詳しくないので なにか原因に心当たりがあれば教えて頂きたいです。 よろしくお願い致します。