プロが教える店舗&オフィスのセキュリティ対策術

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

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

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

A 回答 (35件中1~10件)

レコードカウントで採番する場合は、



rsInMain.AddNew
rsInMain!番号 = rsInNUM!番号 + 1
rsInMain!項目1 = rsOutMain!項目1
rsInMain!項目2 = rsOutMain!項目2
j = rsInMain!番号
rsInMain.Update

のところで、

rsInMain!番号 = rsInNUM!番号 + 1



rsInMain!番号 = rsInMain.RecordCount + 1

に置き換えればいいです。

それと、

'T_番号の更新
rsInNUM.Edit
rsInNUM!番号 = rsInNUM!番号 + 1
rsInNUM.Update

の部分はコメントアウトするか削除します。


こちらの環境では、レコードソースを
クエリ、テーブル、SQLどれも問題はないのですが。
一応、簡単にT_テーブルでオートフォームでフォームを
つくり、あとボタンをくっつけた簡単な
フォームでやっています。
    • good
    • 0
この回答へのお礼

大変 お世話になりました

ようやく完成いたしました。

どの様にお礼を言って良いのかわかりませんが
今後とも よろしくお願いいたします。


ご指導ありがとうございました。

お礼日時:2010/06/29 02:43

すこし状況がわかりました。


まず、最適化をしてください。

多分、何度もプログラムを入れ替えたり、
データをセットしたりするとファイルの
最適化が必要になることがあります。

この回答への補足

すいません
用事で外出していました 今戻りまして 遅くなりまてすいません

まずプログラム起動時に自動で最適化をしています
それと鉛筆マークは出ていません チェックボックスにチェックを入れ直しても同じで
2回実行しないとダメのようです  ??

それと データベース2のT_データのナンバーを番号テーブルから取っていますが
T_データの最後のレコードを取得した方が良いようです
間違って番号テーブルのデータを消したらヌルでエラーになりますし
生成された番号が違う場合も有りうりますのでT_データの最終レコードを取得した方が確実なので

ご指導頂けますでしょうか

補足日時:2010/06/29 00:14
    • good
    • 0

両方のデータベースを最適化と操作をくりかえしてみてください。

この回答への補足

すいません追加情報です
転送をして そのたびにフォームを閉じると
上手く動きます

補足日時:2010/06/29 01:44
    • good
    • 0

(2)


チェックを入れたときにチェックを入れたレコードの
左端に鉛筆マークが表示されたままボタンクリックを
するとレコードロックのエラーが表示されます。
したがって、鉛筆マークが消えるようにどれか他の
レコードのフィールドをクリックして鉛筆マークが
黒い三角マークになるようにしてください。
これでチェックを入れたレコードの事前処理が
確定したことになります。

この意味はチェックボックスもテキストボックスと
同様に一つのレコードの中のフィールドですから
レコードを確定させるためにチェックをいれたら
フォーカスを他のレコードに移動させて暗黙的に
レコードの更新を確定させるというものです。

したがって、2回ボタンを押したらできるということは
一つのレコードの更新が確定していないが二回押すことに
よりフォーカスが移動してレコードの更新が確定した
ということです。
単独のチェックボックスと違ってレコード帳票フォームなどの
レコードはチェックボックスのチェックを入れただけでは
レコードの確定がしない、ということです。

この回答への補足

ありがとうございます

チェックボックスの件 なんとか自己解決致しました
ありがとうございます

番号の件 よろしくお願いいたします。

補足日時:2010/06/29 02:32
    • good
    • 0

T_データを表示しているのはサブフォームでは


ないですね。

(1)
End Sub の前に
Me.Requery
をいれてください。この場合はサブフォーム
でない場合です。


(2)
チェックを入れたときにチェックを入れたレコードの
左端に鉛筆マークが表示されたままボタンクリックを
するとレコードロックのエラーが表示されます。
したがって、鉛筆マークが消えるようにどれか他の
レコードのフィールドをクリックして鉛筆マークが
黒い三角マークになるようにしてください。
これでチェックを入れたレコードの事前処理が
確定したことになります。

これ以外に何かでていますか。
エラーが表示されていましたか。

テーブルを指定するとどうですか。
    • good
    • 0

>そのまま続けて違うレコードにチェックを入れ


>Private Sub コマンド0_Click()を実行させると
>処理ができません

処理ができないというのはどのような状況ですか。
(1)
フォームからデータが消えない
(2)
転送、削除そのものができない。

この回答への補足

ありがとうございます

(2)転送、削除そのものができない です


2回同じ事をすると 実行できます??

Me.Requery は入れています

補足日時:2010/06/28 17:42
    • good
    • 0

なお、データの削除の部分は単純に前のコードに


削除の部分を追加してだけです。その部分を
はずせば前のコードと同じです。

この回答への補足

ありがとうございます

データベース2のT_データのクエリーを造りそれをフォームに引き込みしチェックボタンを設定
チェックを要れPrivate Sub コマンド0_Click()を実行させると処理されますが
そのまま続けて違うレコードにチェックを入れPrivate Sub コマンド0_Click()を実行させると
処理ができません
おそらくクエリーで取っているためだと思いますが 続けて処理するにはどの様にすればよいでしょうか

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

補足日時:2010/06/28 14:18
    • good
    • 0

字数がぎりぎりだったのでのですが、


たぶん全部一つにして掲示できたと思います。
追加した部分はたいした文字数ではないのですが、
一つにしようとして、既存のコメントの中の
長い部分を二つくらい除けました。

午前のつもりがお昼ですね。

Loopの終了後、データの削除が始まる前に、
MsgBox("データの転送終了。データの削除開始。")

End Subの前に
MsgBox("処理完了")

などを入れて終了確認をしてもいいかもしれません。
データが少なければあまり意味がないかもしれませんが、
一つの案です。

以上です。データの転送、削除を確認をしてみてください。
    • good
    • 0

Private Sub コマンド0_Click()


Dim dbOut As Database 'データベース2
Dim dbIn As Database 'データベース1
Dim rsOutMain As Recordset 'データベース2のT_データ
Dim rsOutSub As Recordset 'データベース2のT_データ明細
Dim rsInMain As Recordset 'データベース1のT_データ
Dim rsInSub As Recordset 'データベース1のT_データ明細
Dim rsInNUM As Recordset 'データベース1のT_番号
Dim i As Long
Dim j As Long
'データベースの設定
Set dbOut = CurrentDb 'データベース2
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)
Set rsInNUM = dbIn.OpenRecordset("T_番号", dbOpenDynaset)

'T_データのエクスポート(データベース2からデータベース1へ)
rsOutMain.MoveFirst
Do Until rsOutMain.EOF
If rsOutMain!チェック = True Then
'T_データに紐付けられたT_データ明細レコード検出用
i = rsOutMain!番号
'データベース1のT_データへのレコードの追加
rsInMain.AddNew
rsInMain!番号 = rsInNUM!番号 + 1
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
'データベース1のT_データ明細へのレコードの追加
rsInSub.AddNew
rsInSub!番号 = j
rsInSub!名前 = rsOutSub!名前
rsInSub!住所 = rsOutSub!住所
rsInSub!電話 = rsOutSub!電話
rsInSub.Update
End If
rsOutSub.MoveNext
Loop
'T_番号の更新
rsInNUM.Edit
rsInNUM!番号 = rsInNUM!番号 + 1
rsInNUM.Update
End If
rsOutMain.MoveNext
Loop

'T_データの削除
rsOutMain.MoveFirst
Do Until rsOutMain.EOF
If rsOutMain!チェック = True Then
i = rsOutMain!番号
rsOutMain.Delete

'T_データ明細の削除
rsOutSub.MoveFirst
Do Until rsOutSub.EOF
If rsOutSub!番号 = i Then
rsOutSub.Delete
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
rsInNUM.Close
Set rsInNUM = Nothing
dbOut.Close
Set dbOut = Nothing
dbIn.Close
Set dbIn = Nothing
End Sub
    • good
    • 0

では、転送終了後に、引き続いてチェックの入った


T_データとそれに紐付けられたT_データ明細を
削除するという方法でいきます。

えー、少し一息いれて仕上げておきます。
もう今日になりましたが、午前には
掲示しておきます。いかがでしょうか。

この回答への補足

誠にありがとうございます

piroin654様のご都合でお任せいたします。
この度は すごく勉強になりました。

ご親切、本当に感謝しております。

補足日時:2010/06/28 02:26
    • good
    • 0
1  2  3  4 次の回答→

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

関連するカテゴリからQ&Aを探す