Accessでは一つのことを行う場合でも色々方法があります。テーブルの更新、追加についても同様です。
DAOもあればADOもあります、Docmd.RunSQLで更新することもできるし、CurrentDB.Executeでも行えます。ここでもODBCリンクしたテーブルには制限があります。Seekメソッドが使用できないということです。
通常、Accessではテーブルに検索用インデックスを設定してSeekメソッドを使用して必要なレコードを検索してEditします。しかし、ODBCリンクしたテーブルではインデックスを設定することができないので、Findメソッドを使用することになります。Findメソッドはレコードをいちいち移動して検索することになるので時間がかかります。
Findメソッドがダメならwhere句を指定したSQLを引数としたレコードセットをオープンしてEditすれば良いのです。あるいはCurrentDB.Executeでwhere句を指定してupdateすれば良いです。
そこで、例えば条件を指定したレコードセットを開いてそのレコードセットをDo Until~Loopして特定のフィールドをwhere句の条件として指定しながら、別テーブルを更新する場合どうしたら良いかいうと、私自身はあまり考えもせず、DAOで最初のレコードセットを定義してテーブルの更新にはCurrentDB.Executeで行っていました。このコードもmougでさんざん叩かれました。「DAOとクエリーを同時に使うなんて!」(上記のDocmd.RunSQLを使うなと言った人と同一の人なんですが)
しかし、DAOとクエリーを同時に使用してもチャント処理されています。特に問題なく動作します。このコードが叩かれた背景には、叩いた本人はmdb内のテーブルを参照更新しているものだと想定しているということがあります。こちらはODBCリンクテーブルを想定しています。ODBCリンクテーブルの場合にDAOとクエリーの併用がどうしてダメなのは私には理由がわかりません。
ODBCドライバの設定でログをとることができますが、そのログを見るとサーバーデータベースとAccess間の連絡はSQL以外では行われません。Accessのリンクテーブルは自動でSQLを発行しますが、あくまでSQLです。データベースとその他の連絡手段は無いのです。まあ当然なのですが。そう考えるとDAOだろうがクエリーだろうが関係ありません。どうせSQL文に変換されるのですから。
DAOもあればADOもあります、Docmd.RunSQLで更新することもできるし、CurrentDB.Executeでも行えます。ここでもODBCリンクしたテーブルには制限があります。Seekメソッドが使用できないということです。
通常、Accessではテーブルに検索用インデックスを設定してSeekメソッドを使用して必要なレコードを検索してEditします。しかし、ODBCリンクしたテーブルではインデックスを設定することができないので、Findメソッドを使用することになります。Findメソッドはレコードをいちいち移動して検索することになるので時間がかかります。
Findメソッドがダメならwhere句を指定したSQLを引数としたレコードセットをオープンしてEditすれば良いのです。あるいはCurrentDB.Executeでwhere句を指定してupdateすれば良いです。
そこで、例えば条件を指定したレコードセットを開いてそのレコードセットをDo Until~Loopして特定のフィールドをwhere句の条件として指定しながら、別テーブルを更新する場合どうしたら良いかいうと、私自身はあまり考えもせず、DAOで最初のレコードセットを定義してテーブルの更新にはCurrentDB.Executeで行っていました。このコードもmougでさんざん叩かれました。「DAOとクエリーを同時に使うなんて!」(上記のDocmd.RunSQLを使うなと言った人と同一の人なんですが)
しかし、DAOとクエリーを同時に使用してもチャント処理されています。特に問題なく動作します。このコードが叩かれた背景には、叩いた本人はmdb内のテーブルを参照更新しているものだと想定しているということがあります。こちらはODBCリンクテーブルを想定しています。ODBCリンクテーブルの場合にDAOとクエリーの併用がどうしてダメなのは私には理由がわかりません。
ODBCドライバの設定でログをとることができますが、そのログを見るとサーバーデータベースとAccess間の連絡はSQL以外では行われません。Accessのリンクテーブルは自動でSQLを発行しますが、あくまでSQLです。データベースとその他の連絡手段は無いのです。まあ当然なのですが。そう考えるとDAOだろうがクエリーだろうが関係ありません。どうせSQL文に変換されるのですから。