Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


220 / 2272 ツリー ←次へ | 前へ→

【12495】テーブルへのレコード追加とそのデータベース本体への反映につきまして いーぐる428 14/4/13(日) 9:11 質問[未読]
【12496】Re:テーブルへのレコード追加とそのデータ... かるびの 14/4/13(日) 20:12 回答[未読]
【12497】Re:テーブルへのレコード追加とそのデータ... いーぐる428 14/4/13(日) 22:00 お礼[未読]
【12499】Re:テーブルへのレコード追加とそのデータ... かるびの 14/4/14(月) 0:50 回答[未読]
【12500】Re:テーブルへのレコード追加とそのデータ... いーぐる428 14/4/15(火) 16:29 お礼[未読]

【12495】テーブルへのレコード追加とそのデータベ...
質問  いーぐる428  - 14/4/13(日) 9:11 -

引用なし
パスワード
   初心者です。よろしくお願いいたします。
Addnewとupdateについての質問です。テーブルに新しくレコードを追加するのにはAddnewを使うのはわかるのですが、updateを行うまではテーブルへのレコード追加はデータベース本体に反映されないのでしょうか。テーブルとデータベース本体の関係がわかりません。ご指導の程、よろしくお願い申し上げます。

【12496】Re:テーブルへのレコード追加とそのデー...
回答  かるびの  - 14/4/13(日) 20:12 -

引用なし
パスワード
   >updateを行うまではテーブルへのレコード追加はデータベース本体に反映されないのでしょうか。
 データベース本体というのが何を意味するのかかならずしもよくわからないのですが、
レコードセットにAddnewした場合、Updateされるまでは、
当該レコードはテーブルに追加されません。
 これは、テーブルに直接入力したり、連結フォームに入力する場合も同様であって、
新規入力中のレコードはまだテーブルには全く影も形もなく、
フォーカスをカレントレコードの外に移すとか、
明示的に、レコード保存のコマンドを実行するなど、レコードの保存がなされて初めて
テーブルに追加されるようです。
 私としては、新規入力中のレコードは、
テーブルとは別のオブジェクトに格納されていて、
レコードの保存がなされた場合に初めてテーブルに追加されるものと
理解しています。
 新規入力中のレコードが格納される、テーブルとは別のオブジェクトは、
データベースの一部でしょうから、
新規入力中のレコードは、データベースには反映されていると言っていいと思います。
ただし、そのオブジェクトには、アクセスというアプリケーションの開発者でない限り、
アクセスできないだろうと思います。

【12497】Re:テーブルへのレコード追加とそのデー...
お礼  いーぐる428  - 14/4/13(日) 22:00 -

引用なし
パスワード
   かるびさん、早々の返信、本当にありがとうございました。実は、今、他人の書いたAccess VBAのプログラムを解析しています。その中で、テーブルに次々にレコードを追加してゆく部分があるのですが、インデックスを使わずにレコードの途中にレコードが挿入されているのです。たとえば

「テーブルA」
レコード1
レコード2
レコード3
レコード4
レコード5
レコード6

と言う状態までレコードがテーブルAに書き込まれたあとに

「テーブルA」
レコード1
レコード2
レコード3
レコード3−1  <----- レコードの挿入
レコード4
レコード5
レコード6

レコード3−1がレコード行の中に挿入されるといった具合です。
もっとはっきりとプログラムのコードを記述できればよいのですがまだ自分の頭の中で整理されておらず、できるだけ早くアップしたく思っています。その節はまたよろしくお願いいたします。

いーぐる428


▼かるびの さん:
>>updateを行うまではテーブルへのレコード追加はデータベース本体に反映されないのでしょうか。
> データベース本体というのが何を意味するのかかならずしもよくわからないのですが、
>レコードセットにAddnewした場合、Updateされるまでは、
>当該レコードはテーブルに追加されません。
> これは、テーブルに直接入力したり、連結フォームに入力する場合も同様であって、
>新規入力中のレコードはまだテーブルには全く影も形もなく、
>フォーカスをカレントレコードの外に移すとか、
>明示的に、レコード保存のコマンドを実行するなど、レコードの保存がなされて初めて
>テーブルに追加されるようです。
> 私としては、新規入力中のレコードは、
>テーブルとは別のオブジェクトに格納されていて、
>レコードの保存がなされた場合に初めてテーブルに追加されるものと
>理解しています。
> 新規入力中のレコードが格納される、テーブルとは別のオブジェクトは、
>データベースの一部でしょうから、
>新規入力中のレコードは、データベースには反映されていると言っていいと思います。
>ただし、そのオブジェクトには、アクセスというアプリケーションの開発者でない限り、
>アクセスできないだろうと思います。

【12499】Re:テーブルへのレコード追加とそのデー...
回答  かるびの  - 14/4/14(月) 0:50 -

引用なし
パスワード
   >「テーブルA」
>レコード1
>レコード2
>レコード3
>レコード4
>レコード5
>レコード6
>
>と言う状態までレコードがテーブルAに書き込まれたあとに
>
>「テーブルA」
>レコード1
>レコード2
>レコード3
>レコード3−1  <----- レコードの挿入
>レコード4
>レコード5
>レコード6
>
>レコード3−1がレコード行の中に挿入されるといった具合です。

 別におかしなことではないですね。
 というのは、テーブルはレコードの順番という情報を持たないからです。
 テーブルには、格納順という情報すら保有されないのです。

 データベースでは、レコードの並べ替えということをしょっちゅう行います。
もしテーブルに並び順の情報を持っていると、
並べ替えのたびに並び順の情報を書き替えなければならなくなり、
並べ替えの処理を迅速に行えなくなるので、
わざと、テーブルに並び順の情報を持たないようにしているのです。

 データベースウィンドウ(2003の場合)からテーブルを開くと、
レコードは一定の順序で並んでおり、
メニューのコマンドを使えば、それを並べ替えることもできます。
 しかし、この並べ替えは、
テーブルのレコードそのものを並べ替えているのではないのです。
 データベースウィンドウからテーブルを開くと、データシートで表示されますが、
プログラム的には、このデータシートはフォームなのだそうです。
 メニューのコマンドから行う並べ替えは、
テーブルのレコードを並べ替えているのではなく、
フォームの並べ替えの機能を利用して、
並べ替えが行われているように見せているに過ぎないのです。

 テーブルを開いてみると、レコードが意図したとおりに並んでいるのに、
そのテーブルを使ったクエリを作って、そのクエリを開いてみると、
レコードの並び順がめちゃくちゃになっていることがあります。
 これも、テーブルが並び順という情報を持っていないがために起こります。

 mdbファイルへは、テーブルの情報は、メモリ番地の順に格納されます。
 テーブルへ新しいレコードを入力すると、
メモリへはメモリ番地順に情報が格納されます。
 それゆえ、テーブルへは入力順に格納されることが多いです。
 しかし、何らかの事情でメモリに空きがある場合、
新しく入力したデータは、その空いているメモリ番地に格納されてしまうことがあります。
 こうなると、入力順とメモリ番地の順とに狂いが生じてしまいます。

 こうしたことから、データベースでは、
もしレコードの並び順をきちんとしたいなら、
クエリにより並び順を指定してやらなければなりません。


 以上のような理由から、
テーブルにおけるレコードの順番がおかしいということは、
何らおかしなことではありません。

【12500】Re:テーブルへのレコード追加とそのデー...
お礼  いーぐる428  - 14/4/15(火) 16:29 -

引用なし
パスワード
   返信遅くなり申し訳ありません。テーブルの中のレコードは並び順の情報さえ持たないとのこと、頭が混乱してきました。もう少し今私が疑問に思っていることを整理して、改めて質問させていただきますね。今後ともよろしくお願い申し上げます。

220 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078190
(SS)C-BOARD v3.8 is Free