- ベストアンサー
Access 会員番号4桁にする方法
会員データをAccessで管理しております。 CSVファイルで送られてくるデータをAccessにインポートして 運用しております。 そこで、会員データは4桁の数字(0001・0002・・・)で 管理しているのですが、送られてくるCSVファイルは 頭の000がない状態で送られてきます。 この000を一括で付けるにはどのようにすればいいでしょうか。 会員データは0001から9999までランダムに1000件から2000件程度 送られてきます。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
<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
その他の回答 (1)
実行時エラー'-2147467256(80004005)'; インデックス、主キー、またはリレーションシップで値が重複しているので、 テーブルを変更できませんでした。・・・・・ <Test> ID_____会員番号 1______0001 2______1 仮に[会員番号]がユニークキーであれば、[ID]=2でエラーが発生します。 ですから、通常は、インポートアプリケーションを作成し種々のチェックをします。 ※情報が、少ないので、これ位しかエラー要因を思い付きませんでした。
お礼
ありがとうございます。 主キーを変更し、オートナンバー型に変更したら できました。 本当にありがとうございました。
お礼
おはようございます。 早速のご回答ありがとうございます。 更新クエリ、SQL文実行関数、2つ実行させていただいたのですが、 「レコードでキー違反」のエラーが出てしまいます。 ご教授お願いします。