電子書籍の厳選無料作品が豊富!

別のACCESSデータベースのテーブルのレコードを追加したいのです

同じ内容のデータベースが二つあります
データベース1とデータベース2を其々別の人がデータを入力しています
データベース1にデータベース2のテーブルで T_データT_データ明細の二つのレコードを追加したいのですがどの様にすればよいでしょうか

ご指導をお願いいたします。

A 回答 (35件中21~30件)

一応、動作確認をして出来上がったのですが、今一度


確認をしたいのですが。

>T_データ明細のフィールド ID(オートナンバー) 番号No  明細No 内訳.......

の中で、番号NoというのはT_データの番号Noと同じとして、
その他のID(オートナンバー)、明細Noの二つのものは
どういうものでしょうか。エクスポートの対象になるもの
ですか。

この回答への補足

ありがとうございます。

番号NoというのはT_データの番号Noと同じです

ID(オートナンバー)  キーが設定してあります
明細Noは明細を入力するたびに生成されエクスポートの対象となります
ID(オートナンバー)は追加されればいいのでエクスポートの対象ではありませんが
移転先の最終ナンバーに追加しなければなりません


上手く説明できていますでしょうか

補足日時:2010/06/27 22:47
    • good
    • 0

すみません。

勘違いでした。データベース2のほうに
あるテーブルを使えばいいのでした。

それで(2)のほうについてどうでしょうか。
    • good
    • 0

ようやく全体像がつかめました。

以下の
ことがわかれば先ほどのコードを若干
変更することで何とかなりそうです。

(1)
それで、質問ですが、番号を保持するテーブルは
どちらのデータベースにおいていますか。

(2)
番号を取得した後はそのテーブルの番号を
更新するということですね。

この回答への補足

ありがとうございます

(1)テーブルは元々同じdbですからそれぞれ同じものがあります

(2)番号を取得した後はそのテーブルの番号を
更新するということですね

其々独立してデータを更新していきます
時々 データを移すことがあります

補足日時:2010/06/27 19:49
    • good
    • 0

>T_データのフィールドに番号(連番)が入っています(入力順に自動で入ります)


これはオートナンバーとします。

>そしてT_データ明細のフィールドにT_データの番号と明細の番号が
>入っています(明細との関連付けのため)
T_データの番号の番号が明細にあるのでT_データの番号に
紐付けられた明細のデータをおくりだすようにします。
したがって、T_データ明細にはチェックは必要ありません。
T_データにチェックがあればいいです。
その場合、送り出すT_データはデータベース2に新規に追加
しますから送り出すT_データは番号を除いてください。

以下、コードです。

Private Sub コマンド0_Click()
Dim dbOut As Database 'データベース1
Dim dbIn As Database 'データベース2
Dim rsOutMain As Recordset 'データベース1のT_データ
Dim rsOutSub As Recordset 'データベース1のT_データ明細
Dim rsInMain As Recordset 'データベース2のT_データ
Dim rsInSub As Recordset 'データベース2のT_データ明細
Dim i As Long
Dim j As Long

Set dbOut = CurrentDb
Set dbIn = DBEngine.Workspaces(0).OpenDatabase("C:\データベース1.mdb")
Set rsOutMain = dbOut.OpenRecordset("T_データ", dbOpenDynaset)
Set rsOutSub = dbOut.OpenRecordset("T_データ明細", dbOpenDynaset)
Set rsInMain = dbIn.OpenRecordset("T_データ", dbOpenDynaset)
Set rsInSub = dbIn.OpenRecordset("T_データ明細", dbOpenDynaset)

'T_データのエクスポート(データベース2からデータベース1へ)
rsOutMain.MoveFirst
Do Until rsOutMain.EOF
If rsOutMain!チェック = True Then
'送り出す側の番号を、明細を検索するために取得
i = rsOutMain!番号

rsInMain.AddNew
rsInMain!項目1 = rsOutMain!項目1
rsInMain!項目2 = rsOutMain!項目2
'データを受け取った側の番号の取得。明細に付加するため
j = rsInMain!番号
rsInMain.Update

'T_データ明細のエクスポート(データベース2からデータベース1へ)
'T_データに紐付けられたT_データ明細のエクスポート
rsOutSub.MoveFirst
Do Until rsOutSub.EOF
If rsOutSub!番号 = i Then
rsInSub.AddNew
rsInSub!番号 = j
rsInSub!名前 = rsOutSub!名前
rsInSub!住所 = rsOutSub!住所
rsInSub!電話 = rsOutSub!電話
rsInSub.Update
End If
rsOutSub.MoveNext
Loop
End If
rsOutMain.MoveNext
Loop

rsOutMain.Close
Set rsOutMain = Nothing
rsOutSub.Close
Set rsOutSub = Nothing
rsInMain.Close
Set rsInMain = Nothing
rsInSub.Close
Set rsInSub = Nothing
dbOut.Close
Set dbOut = Nothing
dbIn.Close
Set dbIn = Nothing
End Sub

確認してみてください。

この回答への補足

昨日は遅くまでありがとうございました
一日悪戦苦闘しています
やはり 重複エラーで 追加できませんでした
エキスポートする前にT_データの現在のレコードの最終番号を取得してそれに1プラスして追加させないといけないようです そして 明細の方にもT_データの番号の番号がありますので

T_データのフィールド  番号No 区分 名前........

T_データ明細のフィールド ID(オートナンバー) 番号No  明細No 内訳.......

こんな構造です
何卒ご指導をお願いします

補足日時:2010/06/27 18:10
    • good
    • 0

NO1です。

すでに大勢の方がコメントされていますが、私の検討の結果をお示しします。合体させたいテーブルをどちらか一つのファイルに、インポートしたあとで、片方のテーブルをコピーし、もう一つのテーブルに追加貼り付けをやったら成功しました。ただしオートナンバーのフィールドは除外しています。
幼稚な方法ですみません。
    • good
    • 0

(1)


>T_データのフィールドに番号(連番)が入っています(入力順に自動で入ります)

これはオートナンバーですか、それとも何か
プログラムで採番しているのですか。

(2)
この番号の順番は重要なのですか。

レコードが一意に特定できればいいというのであれば、
もしオートナンバーならばT_データは番号以外を
エクスポートし、T_データ明細の番号フィールドは
T_データをエクスポートした時点でのデータベース1
での番号を取得し、その番号をエクスポートした
T_データ明細の番号フィールドにそれぞれ割り当てることは
できると思いますが。

また番号がプログラムで採番しているのならば
その方法で番号を取得できると思います。
(そのあたりは確認してみます)

その場合は最後の番号を保持するテーブルなどを
作ったりしておくものですが、そのあたりはどうですか。

この回答への補足

持するテーブルはあります

補足日時:2010/06/27 18:11
    • good
    • 0

書き忘れていましたが、


チェックがTrueになるのはサブフォームで
表示されているレコードのみです。

この回答への補足

大変親切なご指導ありがとうございます
とっても 勉強になります

先ほどのレコードの転送につきまして
気付いたのですが T_データのフィールドに番号(連番)が入っています(入力順に自動で入ります)
そしてT_データ明細のフィールドにT_データの番号と明細の番号が入っています(明細との関連付けのため)
T_データのフィールドに番号は重複禁止になっています
すると そのままエキスポートすると番号が重複してしまうのでエラーが起きないでしょうか

ご指導をお願いいたします。

補足日時:2010/06/27 01:28
    • good
    • 0

メインフォームに作ったチェックボックスのプロパティ


シートを表示し、更新後処理に以下のコードを設定します。
チェック0はチェックボックスの名前です。適時
変更してください。
サブフォームCtlというのはメインフォームでサブフォーム
を表示するコントロールの名前で、サブフォームの名前では
ありません。このあたりは分かっておられると思います。
初期値では埋め込み0というような表示がされます。
設定している名前に変更してください。
チェックボックスの既定値は特にこの場合
設定しなくてもいいようにコードで処理を
していますが、何となく灰色のチェックボックスが
気になるようだったら、既定値をFalseにしてください。


Private Sub チェック0_AfterUpdate()
Dim rs As Recordset

Set rs = Forms!メインフォーム名!サブフォームCtl.Form.RecordsetClone

If Me!チェック0 = True Then
rs.MoveFirst
Do Until rs.EOF
rs.Edit
rs!チェック = True
rs.Update
rs.MoveNext
Loop
End If
Set rs = Nothing
End Sub

これで、サブフォームのすべてのレコードのチェックボックスが
Trueに設定されます。

確認してみてください。
    • good
    • 0

>T_データとT_データ明細は別のテーブルですので



これは失礼しました。T_データT_データ明細は一つの
テーブル名と解釈していました。
(1)
それでは、T_データのレコードととT_データ明細の
レコードをデータベース2へ移すということでいいの
でしょうか。
(2)
これら二つのテーブルにはチェック(YesNo型)のフィールドが
作られるとうことでいいですか。


>Set rsOut = dbOut.OpenRecordset("T_データ", dbOpenDynaset)
>Set rsOut = dbOut.OpenRecordset("T_データ明細", dbOpenDynaset)

ではなく、T_データとT_データ明細は別々のレコードセットオブジェクト
を設定する必要があります。
二つのテーブルに設定する(YesNo型)のフィールドの名前を両方とも
チェックとします。以下がコードです。パス、フィールド名は変更、
追加してください。データベース2のフォームでのボタンクリック
イベントはかわりません。


Private Sub コマンド0_Click()
Dim dbOut As Database 'データベース1
Dim dbIn As Database 'データベース2
Dim rsOutMain As Recordset 'データベース1のT_データ
Dim rsOutSub As Recordset 'データベース1のT_データ明細
Dim rsInMain As Recordset 'データベース2のT_データ
Dim rsInSub As Recordset 'データベース2のT_データ明細

Dim strPathOut As String
Dim strPathIn As String

Set dbOut = CurrentDb
Set dbIn = DBEngine.Workspaces(0).OpenDatabase("C:\データベース1.mdb")
Set rsOutMain = dbOut.OpenRecordset("T_データ", dbOpenDynaset)
Set rsOutSub = dbOut.OpenRecordset("T_データ明細", dbOpenDynaset)
Set rsInMain = dbIn.OpenRecordset("T_データ", dbOpenDynaset)
Set rsInSub = dbIn.OpenRecordset("T_データ明細", dbOpenDynaset)


'T_データのエクスポート(データベース2からデータベース1へ)
rsOutMain.MoveFirst
Do Until rsOutMain.EOF
If rsOutMain!チェック = True Then
rsInMain.AddNew
rsInMain!項目1 = rsOutMain!項目1
rsInMain!項目2 = rsOutMain!項目2
rsInMain.Update
End If
rsOutMain.MoveNext
Loop

'T_データ明細のエクスポート(データベース2からデータベース1へ)
rsOutSub.MoveFirst
Do Until rsOutSub.EOF
If rsOutSub!チェック = True Then
rsInSub.AddNew
rsInSub!名前 = rsOutSub!名前
rsInSub!住所 = rsOutSub!住所
rsInSub!電話 = rsOutSub!電話
rsInSub.Update
End If
rsOutSub.MoveNext
Loop


rsOutMain.Close
Set rsOutMain = Nothing
rsOutSub.Close
Set rsOutSub = Nothing
rsInMain.Close
Set rsInMain = Nothing
rsInSub.Close
Set rsInSub = Nothing
dbOut.Close
Set dbOut = Nothing
dbIn.Close
Set dbIn = Nothing
End Sub

確認してみてください。

この回答への補足

度々ご面倒をお掛け致しまして申し訳ございません

T_データとT_データ明細の関係ですが
T_データのサブで繋げています
T_データのレコードNo1の明細がT_データ明細レコードNo1レコードNo2で
1つのデータとなっています
このとき
チェックボックスは T_データのレコードNo1のフィールドに設定ここにチェックが入るとT_データ明細
T_データ明細レコードNo1レコードNo2にも自動でフィールドにチェックが入る事が出来るのでしょうか

すいません
初心者で 面倒でしょうか ご指導をお願いいたします。

補足日時:2010/06/26 23:47
    • good
    • 0

テーブルのチェックのフィールドをチェックという


名前にします。rsOut.MoveFirstを追加しましたが、
他の部分は変更ありません。


Private Sub コマンド0_Click()
Dim dbOut As Database
Dim dbIn As Database
Dim rsOut As Recordset
Dim rsIn As Recordset
Dim strPathOut As String
Dim strPathIn As String

Set dbOut = CurrentDb
Set dbIn = DBEngine.Workspaces(0).OpenDatabase("C:\データベース1.mdb")
Set rsOut = dbOut.OpenRecordset("T_データT_データ明細", dbOpenDynaset)
Set rsIn = dbIn.OpenRecordset("T_データT_データ明細", dbOpenDynaset)

rsOut.MoveFirst
Do Until rsOut.EOF
If rsOut!チェック = True Then
rsIn.AddNew
rsIn!名前 = rsOut!名前
rsIn!住所 = rsOut!住所
rsIn!電話 = rsOut!電話
rsIn.Update
End If
rsOut.MoveNext
Loop

rsOut.Close
Set rsOut = Nothing
rsIn.Close
Set rsIn = Nothing
dbOut.Close
Set dbOut = Nothing
dbIn.Close
Set dbIn = Nothing
End Sub

適当なファイルで確認してみてください。

この回答への補足

ありがとうございます

お尋ねしても良いでしょか
Set rsOut = dbOut.OpenRecordset("T_データT_データ明細", dbOpenDynaset)
とありますが

Set rsOut = dbOut.OpenRecordset("T_データ", dbOpenDynaset)
Set rsOut = dbOut.OpenRecordset("T_データ明細", dbOpenDynaset)


T_データとT_データ明細は別のテーブルですので
これでいいのでしょうか

補足日時:2010/06/26 20:47
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!