• ベストアンサー

Access 会員番号4桁にする方法

会員データをAccessで管理しております。 CSVファイルで送られてくるデータをAccessにインポートして 運用しております。 そこで、会員データは4桁の数字(0001・0002・・・)で 管理しているのですが、送られてくるCSVファイルは 頭の000がない状態で送られてきます。 この000を一括で付けるにはどのようにすればいいでしょうか。 会員データは0001から9999までランダムに1000件から2000件程度 送られてきます。 よろしくお願いします。

  • 5ys4
  • お礼率100% (7/7)

質問者が選んだベストアンサー

  • ベストアンサー
noname#140971
noname#140971
回答No.1

<Test> ID___会員番号 1____1 2____2 3____3 4____4 <Test> ID___会員番号 1____0001 2____0002 3____0003 4____0004 と、インポート後に一括変換する方法を2つ示します。 ************************************************************************ 回答1、更新クエリの利用。 ************************************************************************ <クエリ1> _______フィールド:会員番号 ________テーブル:Test レコードの更新:Format(会員番号, "0000") _______抽出条件: ___________または: [SQLビュー] UPDATE Test SET 会員番号 = Format(会員番号,"0000"); ********************************************************************************************* 回答2、SQL文実行関数の利用。 ********************************************************************************************* [イミディエイト] ? CnnExecute("UPDATE Test SET 会員番号 = Format(会員番号,'0000') WHERE LEN(会員番号 & '')<>4;") True もちろん、標準モジュールに、次のような自作関数を追加する必要があります。 多分、CnnExecute関数を使えば、一連の処理を自動化できるでしょう。 インポートもコードで実行していればですが・・・。 Public Sub ErrMessage(ByVal CnnErrors As ADODB.Error, ByVal strSQL As String)    MsgBox "ADOエラーが発生しましたので処理をキャンセルします。" & Chr$(13) & Chr$(13) & _       "・Err.Description=" & CnnErrors.Description & Chr$(13) & _       "・Err.Number=" & CnnErrors.Number & Chr$(13) & _       "・SQL State=" & CnnErrors.SQLState & Chr$(13) & _       "・SQL Text=" & strSQL, _       vbExclamation, " ADO関数エラーメッセージ" End Sub Public Function CnnExecute(ByVal strSQL As String) As Boolean On Error GoTo Err_CnnExecute    Dim isOK As Boolean    Dim cnn As ADODB.Connection       isOK = True    Set cnn = CurrentProject.Connection    With cnn      .Errors.Clear      .BeginTrans      .Execute strSQL      .CommitTrans    End With Exit_CnnExecute: On Error Resume Next    cnn.Close    Set cnn = Nothing    CnnExecute = isOK    Exit Function Err_CnnExecute:    isOK = False    If cnn.Errors.Count > 0 Then      ErrMessage cnn.Errors(0), strSQL      cnn.RollbackTrans    Else      MsgBox "プログラムエラーが発生しました。システム管理者に報告して下さい。(CnnExecute)", _         vbExclamation, " 関数エラーメッセージ"    End If    Resume Exit_CnnExecute End Function

5ys4
質問者

お礼

おはようございます。 早速のご回答ありがとうございます。 更新クエリ、SQL文実行関数、2つ実行させていただいたのですが、 「レコードでキー違反」のエラーが出てしまいます。 ご教授お願いします。

その他の回答 (1)

noname#140971
noname#140971
回答No.2

実行時エラー'-2147467256(80004005)'; インデックス、主キー、またはリレーションシップで値が重複しているので、 テーブルを変更できませんでした。・・・・・ <Test> ID_____会員番号 1______0001 2______1 仮に[会員番号]がユニークキーであれば、[ID]=2でエラーが発生します。 ですから、通常は、インポートアプリケーションを作成し種々のチェックをします。 ※情報が、少ないので、これ位しかエラー要因を思い付きませんでした。

5ys4
質問者

お礼

ありがとうございます。 主キーを変更し、オートナンバー型に変更したら できました。 本当にありがとうございました。

関連するQ&A

  • アクセスで小数点以下1桁までをインポートしたい

    アクセスのインポートで小数点1桁までをインポートしたいです。 インポートするデータはCSVファイルです。 インポート定義をつける為に、エクセルのデータをCSVにし、CSVをアクセスにインポートしています。 エクセルの時点では、小数点下1桁まで表示されているのですが、CSVに加工した時に小数点以下1桁が0のものは整数表示になってしまいます。 (例)  エクセル → CSV   38.5  → 38.5   35.0  → 35 アクセスでインポートした後に、全部のレコードを小数点下1桁にするのはどうしたらよいのでしょうか?

  • 16ケタの数値の下一桁が”0”になってしまう。

    CSVファイルに出力されたテキストファイルをエクセルで読み込みました。その時に”1000058216333401”と秀丸などのテキストエディタでは表示されるテキストが、エクセルだと”1000058216333400”と下一桁が必ず”0”となっています。ほかにも1000件程度のデータで16桁のデータの必ず下一桁が”0”となってしまいます。 ”1000058216333401” このようにCSVファイルに書かれている通りのデータにする日はどうしたらよいでしょうか? どうぞ、ご教授の程よろしくお願い致します。

  • Aceess2000で8桁の数字を日付型のフィールドにインポートする方法

    Access2000でマクロを使って簡単にデータ取り込み等を実現しようとしています。 しかし、インポート元のCSVに、日付を表わす8桁の数字(2000年12月1日なら20011201)があり、これを日付型のフィールドにインポートしようとすると、データが削除されてしまいます。 どなたか、簡単にデータを変換、取り込む方法をご存知の方がおりましたら、お教えください。お願いします!!!

  • Access CSVファイルインポート時にタイトルを省く

    毎日送られてくる会員データ(CSVファイル)を Accessで管理しようと考えております。 そのとき、先頭のタイトルを省いてインポートしたいのですがどのようにすればいいのでしょうか。 現在、フォーム上からCSVファイルを選択し「実行」コマンドを クリックするとインポートするようにしているのですが 一行目のタイトルを省く方法がわかりません。 Private Sub 実行_Click() TextConv Me.テキスト1, "インポート_定義", "T_会員データ" End Sub よろしくお願いします。

  • 途中で改行されたCSVをAccessに正常に取り込むには?

    以下のようなCSVファイルがあり、これをAccessにインポートしようとしています。 フィールド1  数字7桁 フィールド2  数字2桁 ・・・・・    フィールド20 テキスト42桁 ・・・ フィールド26 数字13桁 ただ、レコードの中には長すぎるためか途中で改行されてしまっている レコードがあり、レコードが途中で切れてしまい、続きが次の行に 読み込まれると言う少し困った状態になっています。 (見たところ、フィールド20で切れているようです) 数箇所なら元のCSVを修正してから取り込めばいいのですが、全体が約80万件で、 そのうち200件以上はあるため、手作業でなく何か自動的に直す方法で対処したいと思っています。 (元のCSV自体が読み込みが重いため、手作業は困難です・・) Accessに取り込むためのいい方法はないでしょうか? OSはWinXPのSP2、Accessは2003です。

  • ACCESSからエクセルへのエクスポート

    非常に困っています。どなたか教えて下さい。 エクセルのCSVファイルからアクセスのテーブルにデータをインポートして そのテーブルから新しいエクセルファイルにデータをエクスポートします。 (1)エクセルの元ファイル 列1 数値 1桁 (2)アクセスにインポート(インポート定義)        列1 数値型 1桁                 書式で3桁にする。 (3)エクセルにエクスポート(エクスポート定義)  列1 1桁になってしまいます。 ※(2)までは書式に000を入れることで解決しました。   (3)にエクスポートした状態で 列1を3桁にしたいのです                     例えば0→000 ちなみにアクセスは2002を使用しています。 どなたか教えて下さい。本当に困っています。

  • アクセスのテーブルからエクスポートした際のケタ落ち

    Accessの通常のテーブルからエクスポート (業務系DBにインポートする為にカンマ区切りのcsvファイル) する際に、小数4桁のフィールドが2桁に切り捨てられてしまいます。 テーブルの定義で4桁固定等色々試してみたのですが・・。 エクスポートのウィザード画面では4桁まで見えているのですが、 実行後にcsvファイルを見ると2桁に切られてしまっています。 これを避けるにはどの様にすれば良いのでしょうか? 初歩的な質問かも知れませんが、どうぞ宜しくお願いいたします。

  • テキストでは0が表示。アクセスだと消える

    すみません、助けてください。 テキストのCSVからアクセスへインポートした際、 テキスト表示では「012345」となっているものが、 アクセスにインポートすると、「12345」となってしまいます。元データは全部で6桁ありまして、例えば、「5」の表示は「000005」、「14」の表示は「000014」というように表示させたい場合、テーブルの設定はどうすればよいでしょうか。10万件のデータのため、エクセルでは入りきりません。 よろしくお願いいたします。

  • csvファイルをAccessに取り込むとデータ数が増える

    項目をカンマで区切っただけの単純なcsvファイルをAccessでインポートしてテーブルを作成したら、データ数が増えてしまいました。 (csvファイルをテキストで開いたときの行数と、Accessの行数が異なる) 5000件ぐらいなら、csvもAccessもデータ数は同じなのですが、データ数が大きくなると、csvとAccessのテーブルで6万件とかの差分が出てしまいます。 csvファイルとAccessで、データ数を同じにするにはどうしたら良いでしょうか。 参考になるURLでも良いので、教えて頂ければと思います。 よろしくお願いします!

  • 【ACCESS】文字列を抜き出したい

    初心者ですが。分かる方お願いいたします(__)(至急ですみません) 会社の専用システムからCSVデータをダウンロードしました。 その時点で、「商品コード」のフィールドが「"=0123456"」 のようなってしまっています。(「0123456」のように数字だけになっていてほしい) CSVの段階で、文字列関数を使用して数字だけにしてしまえばいいのですが、何万件とデータが重く、ファイルも複数あることから時間がかかってしまいます。 そこで、ACCESSにデータをインポートして加工しようとしましたが、どのようにすれば数字だけ抜き取ることができるでしょうか。 Right関数、left関数も考えましたが、商品コードの文字数が一定していないためできません。 インポートした時点で商品コードのフィールドがテキスト型にされていたので、数値型にすれば数字だけになるかな?と思ってやってみましたがデータがすべて失われてしまいました・・。 良い知恵をお貸しください。 どうぞよろしくお願いいたします。 それをACCESSにインポートしてテーブルを作成致しました。