• ベストアンサー

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

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

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

  • ベストアンサー
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

専門家に質問してみよう