痔になりやすい生活習慣とは?

accessで、データをインポートする時に、すでにあるデータは、上書きしたいです。
(既にあるIDの場合上書き、ないIDの場合追加されるようにする。)

そこで、検索すると、「更新クエリと追加クエリ」で出来ることがわかりました。
参考にしたページのアドレス
http://detail.chiebukuro.yahoo.co.jp/qa/question …

ここからが質問なのですが、
さらに、上書きするデータ(すでにあるデータ)は、バックアップとして別テーブルを作って
そこに更新前のデータをためていきたいのですが、どうすればいいでしょうか?

よろしくお願いします。

A 回答 (3件)

画像が小さい・・ので再添付。


素人ですみません>_<
※添付画像が削除されました。
    • good
    • 4
この回答へのお礼

ありがとうございます。

希望通りに出来たみたいです。
なんか、信じられません。

今回の作業をするのに、VBAでぐりぐり書く必要があると思っていたのですが、
更新クエリや、追加クエリで、すんなり出来たので、かなり戸惑っています。

更新クエリなどは、データの書き換えなどしか使いかたが無いと思っていなかったので、
勉強していません。

そのため、参考先のクエリや、今回教えていただいたクエリについては、まったくわかりません。

今から勉強しなおそうと思っています。

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

お礼日時:2012/12/02 03:17

クエリの作り方ですか・・・



Accessファイルが添付出来たら簡単に説明できるに・・できないのですね。
文字にするとなると大変ですね>_<

伝わったらいいのですが、添付画像の様に作ると考えています。
求めているものと違ったらごめんなさい。


あと添付が一つしかできないので、他のスクリーンショットが欲しければ追記してください。

とりあえず、バックアップテーブルへ の 追加クエリ のスクリーンショットです。

参考にされたページの更新クエリと追加クエリを
実行する前にこのクエリを実行させます。
※添付画像が削除されました。
    • good
    • 1

私ならこうします。



バックアップ用のテーブルを作るときに
バックアップ時刻 フィールドを作り 日付/刻型にしておきます。
IDは主キーを外して下さい。

IDを結合線で結んでバックアップ用のテーブルにデータを退避する追加クエリを
作成して、上書き処理の前に実行します。

この追加クエリには、バックアップ時刻: Now() というフィールドを追加しておき、
追加時に現在時刻も書き込むようにします。
    • good
    • 1
この回答へのお礼

ありがとうございます。

バックアップ用のテーブルにデータを退避する追加クエリは、どのように作ればいいのでしょうか?

作業の流れは、最初に考え付いたのですが、それを実行するクエリの作り方がわかりません。
テーブルは、「取り込み用テーブル」「登録用テーブル」「バックアップテーブル」とあって、
「取り込み用テーブル」から「登録用テーブル」にデータを移す時に、同じIDが「登録用テーブル」にある場合、「登録用テーブル」のデータを「バックアップテーブル」に移したいと思っています。
この条件を可能にする追加クエリはどのように作成すればいいのでしょうか。

クエリ自体、あまりよくわかっていません。
具体的な例を挙げていただけると助かります。
よろしくお願いします。

お礼日時:2012/12/01 21:54

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccessのインポートについて(上書きと追加)

Access2000を使用しています。
インポートについて教えて下さい。
あるテーブルにExcelデータをインポートしています。
「あるテーブル」の設定としましては主キーを設定して
いて重複なしにしています。
実現したいこととしましては、Excelデータ上にAccessデータ(すでにあるデータ(主キー))があれば上書き保存して、なければ追加したいのです。

Access側        | Excel側
主キー フィールド1  |  列1  列2   
A     ○      |   B   ○
B     ×      |   D   ×
C     ○      |   E   ×
 
つまり上記の表でAccess側Bデータのフィールド1の「×」
をExcelデータをインポートすることにより「○」に
変更(上書き保存)したいのです。
そして、Excel側D・EデータはAccessに新規レコードと
して追加したいのです。
よい方法はないでしょうか?

なお、私の知っている知識としましては、
インポートするとデータは上書き保存されずに
追加されてしまうということは知っているのですが。
以上、よろしくお願い致します。

Access2000を使用しています。
インポートについて教えて下さい。
あるテーブルにExcelデータをインポートしています。
「あるテーブル」の設定としましては主キーを設定して
いて重複なしにしています。
実現したいこととしましては、Excelデータ上にAccessデータ(すでにあるデータ(主キー))があれば上書き保存して、なければ追加したいのです。

Access側        | Excel側
主キー フィールド1  |  列1  列2   
A     ○      |   B   ○
B     ×    ...続きを読む

Aベストアンサー

Excel からのデータを、いったんワークテーブルに格納してしまえば良いのではないでしょうか?

その後の処理はいろんなパターンで出来ると思いますが、たとえば、

(1) Excelからワークにデータをインポート
(2) キー項目が、元データに有ってワークに無いデータをクエリーで抽出(例だとAとC)
(3) (2)のデータをワークテーブルに追加
(4) 元データをクリアして、ワークテーブルのデータを元データテーブルに移動

とかです。
あとは、(5) ワークテーブルのデータをクリア
というのをどこかで(この処理の最初でも良い)やっておくことですね。

QACCESSで同じテーブルにインポートするには

ACCESSで、商品番号を検索するためのものをつくりました。
フォームに検索欄を作って番号を入れれば検索できるようにしたのですが、日々ACCESSに入力していくのではなく、日々エクセルから作ったそのACCESSファイルのテーブルに累積するかたちでインポートしたいのですがどうやればいいのでしょうか。

Aベストアンサー

>日々エクセルから作ったそのACCESSファイルのテーブルに累積するかたちでインポートしたい
1.インポート定義を作って同じテーブルにインポートするマクロを作るかVBを使ってインポートさせるようにする。
2.ExcelのシートをテーブルにリンクしてExcelをテーブルとして使い日々の入力はリンクしたExcelのシートに追加する。そのテーブルを元に検索する。

1の方が良いと思いますが取りあえずインポートするマクロを作ってみてはいかがですか。
マクロでワークシート変換を選びインポートして保存するテーブル名を入れインポートするExcelのファイルをフルパスで指定して作れば簡単に出来ます。
分からないところがあれば補足でも質問でもしていただければ。

QAccessのデータのインポートで重複分を排除

MicrosoftAccsessで最初から準備してあるデータベースに
外部から追加でデータをインポートする際、重複データがある場合に
インポートしない方法はありますか?

もしくは、インポートしてしまった後で重複する分だけ削除する方法はありますか?

よろしくお願いします。

Aベストアンサー

インポート先のテーブルの、重複を判断する各フィールドに
主キーかインデックス(重複なし)の設定をすれば
重複するレコードはインポート時に自動的にはじかれるはずです。

主キーの設定方法
http://www.officepro.jp/access/table/index6.html

インデックスの設定方法
http://www.officepro.jp/access/table/index12.html

QAccessの追加クエリで既存のテーブルに上書き追加をしたい

追加クエリを使用して既存テーブル(マスタテーブルとして使用)に「情報追加+変更箇所上書き」の作業をしたいと思うのですが、型変換エラー(キー違反)となってしまします。解決方法をご存知の方がおられましたら、ご教示願えればと思います。

Aベストアンサー

既存のキーをレコードの追加はできません。
存在する部分は、更新クエリーで処理します。
存在しない場合は、追加クエリーで追加します。
追加クエリーの対象は、不一致クエリーで対象を把握できます。

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

Qインポート時のエラー「データ型の変換エラー」

ACCESS2000を使用しています。
CSVファイルをマクロを使い、インポートしようとしているのですが、ある列に「33300G2」というデータがあります。
インポートのマクロを実行するとそのデータのみがインポートエラー(エラー内容は「データ型の変換エラー」)となってしまいます。
ちなみに、エラーが出る列は、「33300G2」以外全てが数字のみなのですが関係あるのでしょうか。
もし原因らしきものがわかればアドバイスよろしくお願いいたします。

Aベストアンサー

インポート定義をして下さい。
インポート→設定→データ型を変更して下さい。
何かあれば補足して下さい。
がんばれ

QAccessからExcelにエクスポートする時に常に上書きしたい

AccessのテーブルをExcelへ出力する際に、常に同じファイル名で保存する場合、
2回目以降は、上書きするかどうかを尋ねるメッセージが表示されます。
「常に上書きする」と決まっているので、メッセージを表示させたくないのですが、どうしたらいいのでしょうか。

現在、マクロで作成しており、出力の前後に「メッセージの設定」を入れてみたのですが、ダメでした。
VBAなら可能でしょうか?よろしくお願いします。

Aベストアンサー

こんにちは。maruru01です。

エクスポートする直前に、元のファイルを削除するか、移動するか、リネームするのはどうですか。(VBAですが)


削除
Kill "C:\エクスポート.xls"

移動
Name "C:\エクスポート.xls" As "C:\移動後\エクスポート.xls"

リネーム
Name "C:\エクスポート.xls" As "C:\エクスポート_1.xls"

QAccessで別テーブルの値をフォームに表示したい

初めてのAccessで分からない事があり質問させてください。

<会社テーブル>
会社ID
会社名
住所

<社員テーブル>
会社ID
社員名
ソート番号

*1社に対し複数の社員レコードが存在

以上のようなテーブルがあるとします

現在「会社テーブル」を表形式で一覧表示しています
会社ID,会社名、住所とフィールドが並んでいるのですが、その後ろに「社員テーブル」のソート番号が一番若い社員名を表示したいと考えています(現状は番号関係なく表示させる方法すら分かりません)

色々いじくりまわしたのですが、初めてAccessをさわる事もあってよくわかりません

リレーション等でひっぱってくる事ができるのでしょうか?

どなたか教えて頂けませんでしょうか

何卒よろしくお願い致します

PS.Access2013で作成中です

Aベストアンサー

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FROM 社員
ORDER BY 社員.ソート番号;

2、コントロールソースに次のように書きます。

=DLookUp("社員名","社員ソートクエリ","会社ID=" & [会社ID])

http://office.microsoft.com/ja-jp/access-help/HA001228825.aspx

DLookup()については、マイクロソフトの解説を参照されてください。

【DLookup()の限界を破るにはVBAで同じ関数を作るしかない】

マイクロソフトの解説を読めば判りますが、ORDER BY 節を指定する引数が用意されていません。ですから、どうしても、"社員ソートクエリ"を作成するという手間が必要となります。そこで、SQL文を引数とするDBLookup()をVBAで書けば、その手間を省けるという算段になります。この辺りは、好みと趣味の問題。どっちでも良いと思います。そういうお断りをした上で DBLookup()を紹介しておきます。なお、ADOは、つぎのように参照設定しないと利用できません。

http://www.happy2-island.com/access/gogo03/capter00307.shtml

Public Function DBLookup(ByVal strQuerySQL As String, _
             Optional ByVal ReturnValue = Null) As Variant
On Error GoTo Err_DBLookup
  Dim DataValue
  Dim rst     As ADODB.Recordset

  Set rst = New ADODB.Recordset
  With rst
    .Open strQuerySQL, _
       CurrentProject.Connection, _
       adOpenStatic, _
       adLockReadOnly
    If Not .BOF Then
      .MoveFirst
      DataValue = .Fields(0)
    End If
  End With
Exit_DBLookup:
On Error Resume Next
  rst.Close
  Set rst = Nothing
  DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)
  Exit Function
Err_DBLookup:
  MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & Err.Description & Chr$(13) & _
      "・SQL Text=" & strQuerySQL, _
      vbExclamation, " 関数エラーメッセージ"
  Resume Exit_DBLookup
End Function

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FR...続きを読む

QAccessでボタンを押したらエクセルデータを読み込み処理をしたい

よろしくお願いします。
AccessからExcelを開けるようにしたいのですが、
コードの記述方法がいまいちわかりません。
教えて頂けますでしょうか。

最終的には、ボタンをクリックしたら、ExcelファイルにあるデータをAccessに取り込み、それでDM用のラベルを作りたいと考えています。
勉強が必要なので、少しずつやろうと考え、
開く為のコードからいろいろいじってみようと考えました。
もし、他に効率の良い学習方法があればそちらもお願い致します。

Aベストアンサー

お世話になります。

>コードの記述方法がいまいちわかりません。
と言う事でしたので,最も簡単な方法を。

(1)Accessのマクロを作ります.
 [アクション]で[ワークシート変換]を選択し,
 画面の下部にある,[アクションの引数]に
 適宜入力します。
 
 作成したマクロを適当な名前をつけて保存します。

(2)Accessメニューバーの
 [ツール]→[マクロ]→[マクロを VisualBasicに変換]を選択し,変換します。

変換されたモジュールを見てみれば,
どんな感じでAccessテーブルにインポートするか
解ると思います。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング