CSVで出力されたデータをAccessに読み込んで作業しています。一日ごとのCSVをAccessのテーブルに順にインポートして、複数日のデータをひとつのテーブルにしていたのですが、97ではできたこの機能が2000だと「キー違反」としてレコードが削除されてしまいます。以前は(97では)何の問題もなく進んでいたので、何がいけないのかさっぱりわかりません。どなたか教えていただけるとありがたいのですが・・・。よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

インポートするデータは以下のような感じ。



ファイル:AAAA.csv
0001,"aaaaa"
0002,"bbbbb"
0003,"ccccc"

ファイル:AAAA.csvをインポートする時、新規テーブルの作成を行いキーを自動で作成します。
するとできたテーブルはこんなレイアウトに。

テーブル:T_AAAA
Key :オートナンバー
col1:長整数
col2:テキスト

さらに、上記のテーブルに先ほどインポートしたデータと同じレイアウトのファイル:BBBB.csvをインポートします。
すると、テーブルのレイアウト上ではカラム:Keyに1番目の項目(0004とか0005)を入力しようとしてエラーとなるのでは?

ファイル:BBBB.csv
0004,"ddddd"
0005,"eeeee"
0006,"fffff"

テーブルのデザインビューでテーブル:T_AAAAのレイアウトを以下のように変更してから、ファイル:BBBB.csvを再度インポートすると正常に処理が終了します。

col1:長整数
col2:テキスト
Key :オートナンバー

テーブルのレイアウトを変更して使用するのが一番楽ですが。
mnabeがおっしゃったように、VBでインポート用の処理を作成するか、自動でキーを作成しないでインポートされるデータの値を使用してキーとするかが正式な対応かと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
レイアウト変更、早速やってみました。
確かにこれなら追加はされますが、IDがけた違いの数字になってしまいました。。。

VBはよくわからないので・・・、別テーブルを作成しキーを設定せずにインポートして、それを追加クエリーでマスターに追加する、というステップにしてみたら上手くいきました。

それが正しい方法なのかよくわからないのですが・・・。
あきらかに勉強不足ですね。これからAccessをきちんと勉強してみます。
今後もつまづくことがあったときは助けてください。
どうもありがとうございました。

お礼日時:2001/06/14 17:21

 テーブルの構成。


 インポートの方法。

 特にインポートの方法を説明して下さい。
 多分、キーの設定方法の問題だと思われる。
 複合キーにして、ユニークなキーを生成するか、別にIndexを作成するか、VBAを使用して読込んで格納するアプリケーションにしてしまうかのどれかだと思う。


 そもそも、動いていたシステムを、バージョンアップしたら動かなくなったら、昔の物を使用すれば済むのでは??

この回答への補足

素早いご回答ありがとうございます。
漠然とした質問をしてしまったようで、すみませんでした。

テーブルの内容は、
・ID(オートナンバー)
・日付/時刻型
・テキスト型
で、読み込みはテーブルの「新規作成」→「テーブルのインポート」で行っています。

もうすでに過去のデータを読み込んであるテーブルに、新たな一日分をインポートしてみたところ、エラーになりました。
エラーレポートには「データ型の変換エラー」と「オートナンバー型フィールドに Null 値があります。」がIDフィールドでエラー出力されています。

Access2000になった理由は、業務端末とソフトの一斉入れ替えがあったためです。
古い端末もまだ手元にありますが、今後は新しい端末とシステムを使用しなくてはならないので・・・。

とりあえず・・・コピーペーストではうまく行くので、危険な気もしますがその方法でやってみようかと思っています。
お気づきの点があればご教授ください。

補足日時:2001/06/14 11:06
    • good
    • 0

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

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

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

QCSVデータ→ACCESSに変換。また新しいCSVデータをACCESSに追加できない?

ACCESSでCSV形式のデータを取り込みします。
※このCSVのデータを[a.txt]とします。

[a.txt]を一度取りこみ。
この段階で[a.txt]の中を空にします。
しばらくしてから
[a.txt]にデータたまりだして、
再度ACCESSで取り込みしようとした場合、
先ほど取り込んだACCESSに追加ってできないものなんでしょうか?

よろしくお願いします

Aベストアンサー

>ワークテーブルへインポート・・・の意味が

最終的に追加したいテーブルと同じカラムを持つ、空のテーブルを用意し、
それにインポートして、問題なければ、最終的に追加したいテーブルへインサート。
問題があるならば、インポート先のテーブルをTRUNCATEして再処理。
最終的に作業が完了したら、空のテーブルをTRUNCATEしておく。

QAccess2000でAccess97のテーブルを利用する方法

Access97からAccess2000へのコンバージョンを行っています。様々な問題が発生しているのですが、解消困難な問題があり質問させて頂きます。
まず、背景・環境など長くなりますが、説明します。
自社で開発したプログラムの97→2000への移行を行っていますが、予算とマシンスペックの問題で、ユーザーのOS(95、98、2000、XP)、Office(97、2000)共に混在する状況となります。また、一人のユーザーが複数の事業所で仕事をしており、使用するマシンも一定ではなく、一台のマシンを複数のユーザーが使用します。
問題となっているプログラムは、プログラム本体とデータ部分がそれぞれ別のmdbファイルとして構成されており、本体からテーブルのリンクでデータ用mdbを利用しています。
また、ワークグループを利用しパスワードによるアクセス管理を行っています。
データ部分は、他のプログラムでも利用しており、そのプログラムも97版と2000版が混在しています。
そのため、データmdbは97で利用したいと思っています。
ところが、2000のプログラムでDlookup関数を使用し、97データの取得結果が正しくありません。途中で切れたり、余計な文字が後ろについてしまいます。リンクテーブルを選択クエリにしても同じでした。

(正)東京三菱銀行→(誤)東京三菱銀行??○!!
(正)123456→(誤)1234
Dlookup("フィールド名" & "","リンクテーブル名")
という風に文字列の後に空文字を加えると正しく表示されます。
ただ、すべてのDlookup関数を調べ処理を追加するには数も多く、今後の保守に問題が残ります。
また、データを2000に変換すると問題が発生しません。しかし、互換のため、97形式でデータmdbを作成することも考えたのですが、設定したワークグループセキュリティが解除されることも判明しています。
解決方法か関連情報をお持ちの方、ご教授お願いします。

Access97からAccess2000へのコンバージョンを行っています。様々な問題が発生しているのですが、解消困難な問題があり質問させて頂きます。
まず、背景・環境など長くなりますが、説明します。
自社で開発したプログラムの97→2000への移行を行っていますが、予算とマシンスペックの問題で、ユーザーのOS(95、98、2000、XP)、Office(97、2000)共に混在する状況となります。また、一人のユーザーが複数の事業所で仕事をしており、使用するマシンも一定ではなく、一台のマシンを複数のユーザーが使用します。
...続きを読む

Aベストアンサー

DLookUpはAccessのライブラリの関数です。バージョンの違うDBに、バージョンの違う同名のAccess関数を使用するのはどうかと、、、

SQL文で問い合わせても一緒ですか?

可能であれば、ADOを利用することをお勧めします。

Q【Access2010】CSVのインポートについて

お世話になります。

あるCSVファイルをインポートしたいのですが、以下のようなフォーマットです。

XXXXXX
項目1  項目2  項目3 ・・・
 1    ああ   いい
 2    うう    ええ


一覧?外にあるXXXXXの部分があるので、普通にインポートできません。
もちろんXXXXXXの部分を削除した状態でインポートすればよいのですが、当該CSVファイルは変更したくありません。
※このインポート作業は日々行うことになりそうなので、都度、XXXXX部分を削除するのが面倒でもあります。

このようなフォーマットのものをインポートすることは可能なのでしょうか。
ご教授の程、宜しくお願い致します。

Aベストアンサー

CSV ファイルを、ヘッダなしファイルとして解釈させます。
以降得られるフィールド名は、F1、F2、・・・
不要な XXXXXX 部分は、2番目のフィールド以降 Null で除外判別できます。
2行目の項目名部分の項目1は、
おそらく、以降のデータを解釈した際に数値と解釈されると思うので
(項目1 部分が数値として解釈されたのなら Null に置き換わります)
項目1,項目2,項目3

Null,項目2,項目3

解釈が違っても項目1の有効なデータ部分は数値の様なので・・・
そこで、IsNumeric(F1) AND F2 Is Not Null の条件を付加して
インポートしたいテーブルと項目を列挙し、
それに対応する F1、F2、・・・・を記述した SQL を実行させれば終わりです。
以下は、項目3 までの記述になりますが

Public Sub Samp1()
  Const CSQL As String = "" _
    & "INSERT INTO テーブル名(項目1,項目2,項目3) " _
    & "SELECT F1, F2, F3 FROM [{%1}] IN " _
    & "'{%2}'[text;FMT=Delimited;HDR=No;IMEX=1] " _
    & "WHERE IsNumeric(F1) AND F2 Is Not Null;"
  Const CPATH As String = "CSVファイルがあるフォルダへのフルパス"
  Const CNAME As String = "CSVファイル名"
  Dim sSql As String

  sSql = CSQL
  sSql = Replace(sSql, "{%1}", CNAME)
  sSql = Replace(sSql, "{%2}", CPATH)
  CurrentDb.Execute sSql
End Sub

※ CSV ファイルのパスが D:\tmp\Hoge\テスト.csv だったら
CPATH は、D:\tmp\Hoge
CNAME は、テスト.csv

CSV ファイルを、ヘッダなしファイルとして解釈させます。
以降得られるフィールド名は、F1、F2、・・・
不要な XXXXXX 部分は、2番目のフィールド以降 Null で除外判別できます。
2行目の項目名部分の項目1は、
おそらく、以降のデータを解釈した際に数値と解釈されると思うので
(項目1 部分が数値として解釈されたのなら Null に置き換わります)
項目1,項目2,項目3

Null,項目2,項目3

解釈が違っても項目1の有効なデータ部分は数値の様なので・・・
そこで、IsNumeric(F1) AND F2 Is Not Null の条件を...続きを読む

QAccessでOracleのテーブルをリンクし、Access側では読み取り専用にしたい

社内にOracleデータベースでのシステムが立ち上がっているのですが、管理帳票の出力用に、OracleのデータをAccessで読み込みたいと思っています。
テーブルのリンクそのものは知っており、成功しているのですが、Oracleデータベースのデータを壊さないようにするため、このリンクテーブルを読み取り専用にしたいと思っています。どのようにすれば良いでしょうか。

なお、Oracle側で読み取り専用ユーザを作成して、そのユーザでリンクすれば良いことは理解していますが、それは最後の手段にしたいと思っています。別の方法でうまくできないでしょうか。

Aベストアンサー

Accessからは、ODBCでOracleにリンク接続しているのでしょうか?
それであれば、ODBCの設定画面(コントロールパネル→管理ツール→データソース(ODBC))で、「読み取り専用接続」という設定がありますので、そこにチェックをすればOKだと思います。

QACCESS ACCESS VBA テーブル テーブル変換 番号 個数 変換

私はプログラム初心者です。
業務の中でACCESSを使っております。
ACCESSでテーブルの変換についてのプログラムが分からなかったので
質問させて頂きました。


以下のようなテーブル(テーブル1)があります。
管理番号|NO|名前
1|NO.1|スプーン
2|NO.2|スプーン
3|NO.3|スプーン
4|NO.1|フォーク
5|NO.2|フォーク
6|""|ナイフ
7|NO.1|お鍋
以上のテーブルを新たにテーブル(テーブル2)を作成し、次のようなにしたいです。
管理番号|台数|名前
1|3|スプーン
4|2|フォーク
6|1|ナイフ
7|1|お鍋

テーブル変換の機能
・名前が同じ物の個数を表示する
・名前が同じ物の管理番号は若い番号にする

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

Aベストアンサー

Access2003でのクエリ作成手順になります。(他バージョンでもほぼ同じでしょう)

・「デザインビューでクエリを作成する」から対象のテーブルを表示させます。

・クエリデザインツールバーにある「Σ」をクリックします。
 (デザインの欄に「集計」が追加されます)

 もしくは、クエリの種類を1度「クロス集計」にし、「選択」に戻しても同じ状態になります。

・テーブル内の「管理番号」をダブルクリックします。
 フィールドに「管理番号」、テーブルに対象テーブル名、集計に「グループ化」が表示されます。
 集計のところを「最小」に変更します。
 並べ替えのところを「昇順」に変更します。

・テーブル内の「NO」をダブルクリックします。
 フィールドに「NO」、テーブルに対象テーブル名、集計に「グループ化」が表示されます。
 集計のところを「カウント」に変更します。

・テーブル内の「名前」をダブルクリックします。
 フィールドに「名前」、テーブルに対象テーブル名、集計に「グループ化」が表示されます。

・ここで、表示を「データシートビュー」に切り替えます。(注1)
 管理番号の最小、NOのカウント、名前 の表が表示されます。
 名前「ナイフ」部分のカウントが得たいものではなく「0」になっています。
 これは、NULLのデータはカウント対象外となっているためです。

・表示を「SQLビュー」に切り替えます。
 1行目中ほどに 「 Count(テーブル名.[NO]) AS NOのカウント, 」があります。
 NOに限定した個数を求めるのでなく、単にレコード数を得たいので
 これを 「 Count(*) AS 台数, 」に書き換えます。
 XXXXX AS YYYY は、XXXXXをYYYY名で、という意味合いになるので、
 同様に「管理番号の最小」->「管理番号」に修正します。

・表示を「データシートビュー」に切り替えます。

これで求めたいクエリは作成することができました。
このクエリをそのまま使うのではなく、結果をテーブルに書き出すには続いて以下を行います。

・表示を「クエリ デザイン」に切り替えます。

・メニューの「クエリ」->「テーブル作成」をクリックします。
 テーブル名を入力し、「OK」

 クエリデザイン上変化はありませんが、以上で終了です。

確認)
表示を「SQLビュー」に切り替えます。
1行目最後あたりに、「 INTO テーブル名 」が追加されています。
これが結果をテーブルに書き出す命令部分になります。


(注1)
「'*'で選択したフィールドはグループ化できません。」というメッセージが出たら、クエリ作成をいったんあきらめます。
(クエリデザインの画面を閉じます)
メニューの「ツール」->「オプション」の「テーブル/クエリ」タブの「クエリ デザイン」部分の「全てのフィールドを表示する」チェックを外し「OK」します。
クエリ作成を初めからやり直します。

(注2)
(注1)の変更は、以降も変更されたままとなるので、今回だけ回避するには、
表示を「SQLビュー」にし、1行目最後の「 テーブル名.名前, * 」の「 , * 」を削除します。


書く練習がてら、初心者向けに書いてみましたがいかがでしたでしょうか。

Access2003でのクエリ作成手順になります。(他バージョンでもほぼ同じでしょう)

・「デザインビューでクエリを作成する」から対象のテーブルを表示させます。

・クエリデザインツールバーにある「Σ」をクリックします。
 (デザインの欄に「集計」が追加されます)

 もしくは、クエリの種類を1度「クロス集計」にし、「選択」に戻しても同じ状態になります。

・テーブル内の「管理番号」をダブルクリックします。
 フィールドに「管理番号」、テーブルに対象テーブル名、集計に「グループ化」...続きを読む


このカテゴリの人気Q&Aランキング

おすすめ情報