- - PR -
テーブルの最下行のデータを取得するには
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-03-03 14:16
雄琴と申します。VB.net勉強中です。
質問ですが ACCESSデータに接続してテーブルの最下行のデータを取得もしくは 指定する方法はないでしょうか。 (イメージ的にはACCESSVBAのDoCmd.GoToRecord,,aclast) VB.netで使用しているACCESSデータのIDはオートナンバー型を使用しており、 Dim UriRow As URISET.売上表Row = URHSET.売上表.NewRow() のようにNewRowで新しくテーブルを作成すると作成したテーブルのIDを 知る手段がわからないので質問した次第です。 よろしく回答お願いします。 | ||||
|
投稿日時: 2006-03-03 15:53
うーん、知る必要になるシナリオが思いつきません。 NewRow して新しい行を追加しているのですから、 値をセットすることはあっても、値を取得するというシナリオにはならないと思うのですが... オートナンバーならば尚のこと知る必要がないように思えます。 単に取得するのであれば、ORDER BY するだけと言えるのですが、 セットのようですので、どうしたいのかがちょっとわからない状態です。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-03-03 16:34
回答ありがとうございます。
質問に関しての追記です。 売上表(ID、氏名、住所、金額)と明細表(注文番号、商品、単価)の2つのテーブルがあります。 売上表に新しい行を追加した場合に明細表の注文番号に売上表に追加したIDを書き込みたいと考えています。イメージとして売上表のIDが1〜3ある場合に1を選択すると 明細表の注文番号の値が1のデータ(行)を抽出したい。 どうでしょうか伝わりますでしょうか。 考え方自体がナンセンスなど何かヒントがあれば教えていただきたく。 | ||||
|
投稿日時: 2006-03-04 22:09
テーブルを排他ロックして、
データを追加して、 ID の最大値を SELECT して、 テーブルのロックを解除する とか。 私は Oracle ですが、ストアドプロシージャでそういうようなことをしています。 〆 written by Jitta@わんくま同盟 on 2006/03/04 | ||||
|
投稿日時: 2006-03-05 05:05
AutoNumber型のテーブルにレコードを追加するときは DataSet(DataTable)にレコードを追加してDataAdapterのUpdateメソッドで データベースに反映するのは止めた方が良いのでは。 DataTable上のAutoNumber型のフィールドはあくまでも仮に採番された番号です。 AccessのTableにレコードを追加したときのAutoNumberの値と一致するという 保障はありません(複数のユーザーで共有しているとき)。 DataAdapterのUpdateメソッドを利用する代わりに 直接SQLのINSERT文で追加して直後にSELECT @@Identityを発行して 自動採番されたAutoNumberを取得します。ここで取得した、AutoNumber を明細表の外部キーに利用します。 どうしても、DataAdapterのUpdateメソッドを使用したいときはDataTableに 格納されているAutoNumberとAccessのTableに格納されているAutoNumberを 手動で同期させる必要があります。 複数のユーザーが同時に追加すると、DataTableとAccessのTableのAutoNumberの値が 不一致になるため。 _________________ ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集 | ||||
|
投稿日時: 2006-03-07 10:50
思考錯誤しましたが
複数のユーザーが追加するシーンが考えられる事から AutoNumber型を辞めて書き込みの際に都度IDを割り当てる方法を 考えてみます。 回答くださった皆様ありがとうございました。 | ||||
|
投稿日時: 2006-03-07 13:50
Osです。
方向性を決めた後で、今更ながらですが、後の参考にと思い投稿します。 非接続型のDataSet(DataTable)でAutoNumberを使って、新規レコードを追加する場合、 Accessさんが書かれている様に、DataSet(DataTable)では仮の番号として扱う必要が あります。 私はこの仮番号を重複を避ける意味で常にマイナスでスタートし、 マイナス側に増分するように設定します。 この時、雄琴さんがされている、親子リレーションが設定されているケースでも同様で 子の該当する列に仮のマイナス番号を設定します。 この様な設定を行った場合においても、DataAdapterのUpdateメソッドを利用して 更新することは可能です。 但し、UpdateのRowUpdatedイベントを利用して、データベースが設定したAutoNumberの 値を取得し、親の仮番号を更新するロジックを実行することと、 親のINSERTを子より先に行うことで、リレーション先の子の該当列に自動的に設定されます。 UpdateのRowUpdatedイベント利用してAutoNumber取得例 |
1