検索結果で得たレコードセットを他のテーブルに全てコピーするには

解決


代行  2006-11-17 23:51:47  No: 134186

VB6.0 Access2000で検索プログラムを組んでいるんですが、検索後にデータグリッドに表示されるようにはなったんですが、作成されたレコードセットを他の空のテーブルに上書きすることは可能でしょうか?rs.AddNew命令でできると思うのですが、やり方がわからないのでどうかお願いします。


特攻隊長まるるう  2006-11-18 02:06:23  No: 134187

>rs.AddNew命令でできると思うのですが、やり方がわからないので
過去ログ検索『AddNew』でどうぞ。


代行  2006-11-18 07:32:40  No: 134188

すいません、説明不足でした。
状況としては<抽出したデータを別のテーブルへ保存するには?>と同じなんですが、私の場合はAccess2000でADOを使用しています。
AddNewの項目で調べてみましたが、だいたいは入力されたテキストデータをフィールド指定して値を入力となっており、私の場合はテーブル1の内容を検索後、該当したレコードセットの内容を他のテーブルにそのままコピーしたいのですが、可能でしょうか?もし良きアドバイスがありましたら、宜しくお願い致します。


特攻隊長まるるう  2006-11-19 00:25:02  No: 134189

> だいたいは入力されたテキストデータをフィールド指定して値を入力となっており
そのように行ってください。

そもそも、データベースにおいて、フィールドの順番というものは簡単に変更でき、
追加や削除も一般的な操作ですから、別のテーブルへデータを移動させる時は
フィールド名を指定しておくべきでしょう。

データベースのフィールド名を調べる方法も過去ログにありますし、SQL文で取得
することも可能なはずです。テキストデータの挿入などの場合は、どんなデータが
挿入されてもおかしくありません。本来は、スキーマ情報を取得してデータ有効範囲の
チェックをして、本当に挿入しても良いデータなのか?の判定まで行います。

フィールドの型によってはオートナンバー型のように、勝手な値を挿入できない場合も
ありますし、テーブル設計に基づいてデータ更新用のSQL文を編集する方が確実
でしょう。

今回はデータベースから取得したデータのようですし、そういったチェックを面倒に
思うなら、データ挿入した時のデータベースのエラー処理に任せてデータを挿入
してみれば良いのでは?
フィールド名ではなく、インデックスの指定も可能です。詳しくはヘルプで確認
してください。


代行  2006-11-19 21:29:00  No: 134190

度々申し訳ありません。

> だいたいは入力されたテキストデータをフィールド指定して値を入力となっており
そのように行ってください。

つまり、検索後に取得したレコードセットをフィールドごとにテキスト出力し、それを指定したテーブルにAddNew命令で追加していけばいいのでしょうか?


特攻隊長まるるう  2006-11-20 17:44:17  No: 134191

> つまり、検索後に取得したレコードセットをフィールドごとにテキスト出力し、
> それを指定したテーブルにAddNew命令で追加していけばいいのでしょうか?
…ああ。。。そこも『そのように』に含まれて理解されるんですねぇ。。。
……まぁ、無駄な処理ですが、それもいいでしょう。

『テキスト』はテキストファイルでなく、文字列型の変数で代用してみては?
入力チェックとかしないなら、レコードセットからAddNew命令に直接
渡してみては?


代行  2006-11-21 08:07:43  No: 134192

えっと私のプログラムの一部なんですが、テーブルAから検索条件を入力し、レコードセットの結果が
番号   名前   在庫    状態
1     A     有        良
3     S     有        良
8     Z     有        良
という状態から空のテーブルBに書き込みたいのです。
以下にコードの一部を書くので、よろしければアドバイスをお願いします。

Private Sub tyushutu_Click()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

 Set rs = New ADODB.Recordset
     rs.CursorLocation = adUseClient
     rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic, adCmdTable

rs.Filter ="在庫 ='有'"

If rs1.RecordCount >0 Then
/////////////
ここの部分が分からない状態です。
/////////////        
End If
End Sub


特攻隊長まるるう  2006-11-21 17:45:21  No: 134193

>Dim rs As ADODB.Recordset
rs と
>If rs1.RecordCount >0 Then
rs1 は違うものなの?

テーブルAと説明しながら
>      rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic, adCmdTable
テーブル1???

とりあえず、検索結果を保持しておく rsTableA と、
別のテーブルを扱うのだから rsTableB を用意したら?

んで、後は、AddNew のサンプルコードを参考にしてみてください。


代行  2006-11-21 19:17:30  No: 134194

すいません
If rs.RecordCount >0 Then
rs.Open "テーブルA", cn, adOpenKeyset, adLockOptimistic, adCmdTable
の記入ミスでした。


代行  2006-11-24 18:47:23  No: 134195

書き込み用レコードセットを作り、あらかじめテーブルを用意しておくことで解決できました。分かりにくい文章でもしっかりとした助言を与えてくださった特攻隊長まるるう様、ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加