プロが教えるわが家の防犯対策術!

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

会員データは0001から9999までランダムに1000件から2000件程度
送られてきます。

よろしくお願いします。

A 回答 (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
    • good
    • 0
この回答へのお礼

おはようございます。
早速のご回答ありがとうございます。

更新クエリ、SQL文実行関数、2つ実行させていただいたのですが、
「レコードでキー違反」のエラーが出てしまいます。
ご教授お願いします。

お礼日時:2007/07/10 12:05

実行時エラー'-2147467256(80004005)';



インデックス、主キー、またはリレーションシップで値が重複しているので、
テーブルを変更できませんでした。・・・・・

<Test>
ID_____会員番号
1______0001
2______1

仮に[会員番号]がユニークキーであれば、[ID]=2でエラーが発生します。

ですから、通常は、インポートアプリケーションを作成し種々のチェックをします。

※情報が、少ないので、これ位しかエラー要因を思い付きませんでした。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/07/10 15:43

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

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