• 締切済み

アクセスで複数データ削除

myPath = "D:\" myfilename = Dir(TxB04) Do Until myfilename = "" DoCmd.TransferText acImportDelim, , "tbl1", myPath & myfilename, False myfilename = Dir Loop MsgBox "取込が正常に終了しました。" MsgBox "二重打刻をチェックしてます。" '取込ファイル名を変換します。 DoCmd.SetWarnings False DoCmd.OpenQuery "データ変換" DoCmd.OpenQuery "実績追加" DoCmd.OpenQuery "重複データ削除" DoCmd.OpenQuery "削除クエリ" DoCmd.SetWarnings True Cmd21.Enabled = False ★Kill (strInFPath)★ 'メッセージマスタ取得 Sqlstate2 = "SELECT * FROM 氏名登録なし;" Set M_MSG2 = MyDB2.OpenRecordset(Sqlstate2, dbOpenSnapshot) If M_MSG2.RecordCount > 0 Then DoCmd.SetWarnings False DoCmd.OpenQuery "くえり1" DoCmd.SetWarnings True End If Exit Sub Err_Set_Seisan_Click: End Sub 今、vbでこのようなデータ取込を作っており★のところで取込データを削除させてます。 ただこれだと1つのデータしか削除できず、複数あったときには対応が困ってます。 こちら歯どのような対応でできるでしょうか? ご指導お願いします。

みんなの回答

noname#140971
noname#140971
回答No.3

補足:KILL は危険。 通常、原始データは削除しないでリネームするかバックアップフォルダに移すと思いますが・・・。

noname#60992
noname#60992
回答No.2

do-loopのなかでkill処理してはどうでしょうか?

noname#140971
noname#140971
回答No.1

Const conPATH = "C:\Temp\" Const conIMPORTFILES = "ImportData*.txt" Private Sub コマンド1_Click()   Dim stPath   As Integer   Dim strFileName As String      If Verify("ファイルを取込します?") = vbYes Then     strFileName = Dir(conPATH & conIMPORTFILES)     Do Until strFileName = ""       DoCmd.TransferText acImportDelim, , "tab1", conPATH & strFileName, False       strFileName = Dir()     Loop   End If End Sub Private Sub コマンド2_Click()    Kill conIMPORTFILES End Sub Verify()は、標準モジュールに登録しないと使えません。 さて、先に、インポート対象ファイルを呼び込むのにワイルドカードを使っていましたよね。 肝心の strInFPath でワイルドカード(* or ?)を使っていますか? そこが問題です。 なお、実際のインポートテストでは、 ImportData01.txt ImportData02.txt を用いました。 これは、"ImportData*.txt" にパターンマッチしますので当然に削除されます。

関連するQ&A

  • アクセスでテキストデータの取込

    アクセスでデータ取込行っているのですが、 テキストデータが2個になったときに テキストデータを二つ取り込みではなく、 テキストデータを2回取り込んでしまってます。 テキストデータの名前は20080222152953.txt VBでの取り込みは strInFName = Dir(TxB04) strInFPath = strInFDir + strInFName If MsgBox("ファイルを取込します。 ", vbOKCancel) = vbCancel Then Exit Sub End If ErrFlg = False myPath = "D:\" myfilename = Dir(TxB04) Do Until myfilename = "" DoCmd.TransferText acImportDelim, , "テーブル名", myPath & strInFName, False myfilename = Dir() Loop という形で行っています。 ご指導宜しくお願い致します。

  • 重複データのエラー処理

    アクセス2002 XPの使用環境です。 CSVファイルよりアクセスのテーブルにインポートする時に キーを設定して重複データのインポートを避けていますが アクセスのエラーを非表示にしてエラーメッセージを出したいのですが うまく動作しません ご指南ください。 Private Sub データ取込_Click() On Error GoTo myErr DoCmd.SetWarnings False DoCmd.TransferText acImportDelim, , "データ取込", "c:\データ.csv", False MsgBox "データを取り込みました" DoCmd.SetWarnings True Exit Sub myErr: MsgBox "重複していますのでデータを確認してください" End Sub 正常の場合 データを取り込みました 重複の場合 重複していますのでデータを確認してください というメッセージを出したいのです。

  • Access csvファイルの取り込み

    Access2021 2箇所の保存先の違う所からcsvファイルの取り込みについて伺います。 csv取り込みボタンは、2つ用意しています。 1つ目のボタンに、コード記述して動作確認は正常に動作して他のボタンも正常に動作。 2つ目にのボタンに、csvの格納パス名のみ変更後コード記述して動作確認したら全てのボタンが反応しなくなりました。 動作としては、削除クエリでテーブルのデータを削除してから、指定したフォルダからcsvファイルを選択して取り込ます。 同じテーブルを使用して、格納先の違うcsvファイルを使用する操作になります。 コードは、以下の通りです。 ①ボタン1 Private Sub コマンド61_Click() '削除クエリ実行 DoCmd.SetWarnings False DoCmd.OpenQuery "テーブルデータ削除" DoCmd.SetWarnings True Dim msg As String msg = getFilePicker If msg = "" Then Exit Sub On Error GoTo err_sample DoCmd.TransferText acImportDelim, , "インポート先テーブル名", msg, True MsgBox "インポートが終了しました。", vbInformation + vbOKOnly, "処理完了" Exit Sub err_sample: Select Case Err.Number Case 3011 MsgBox "ファイルが見つかりません。処理を終了します。" Case Else MsgBox Err.Number & ":" & Err.Description End Select End Sub Function getFilePicker(Optional dTitle As String = "ファイル選択") '2003以降 Const msoFileDialogFilePicker As Integer = 3 Dim fDlg As Object Set fDlg = Application.FileDialog(msoFileDialogFilePicker) fDlg.Title = dTitle fDlg.InitialFileName = "csvインポートデータのフォルダパス名①" fDlg.AllowMultiSelect = False fDlg.Filters.Clear fDlg.Filters.Add "すべてのファイル", "*.*" fDlg.Filters.Add "CSV ファイル (*.csv)", "*.csv" fDlg.FilterIndex = 1 If fDlg.Show Then getFilePicker = fDlg.SelectedItems(1) Else getFilePicker = "" Me.Refresh End Function ②ボタン2 Private Sub コマンド62_Click() '削除クエリ実行 DoCmd.SetWarnings False DoCmd.OpenQuery "テーブルデータ削除" DoCmd.SetWarnings True Dim msg As String msg = getFilePicker If msg = "" Then Exit Sub On Error GoTo err_sample DoCmd.TransferText acImportDelim, , "インポート先テーブル名", msg, True MsgBox "インポートが終了しました。", vbInformation + vbOKOnly, "処理完了" Exit Sub err_sample: Select Case Err.Number Case 3011 MsgBox "ファイルが見つかりません。処理を終了します。" Case Else MsgBox Err.Number & ":" & Err.Description End Select End Sub Function getFilePicker(Optional dTitle As String = "ファイル選択") '2003以降 Const msoFileDialogFilePicker As Integer = 3 Dim fDlg As Object Set fDlg = Application.FileDialog(msoFileDialogFilePicker) fDlg.Title = dTitle fDlg.InitialFileName = "csvインポートデータのフォルダパス名②" fDlg.AllowMultiSelect = False fDlg.Filters.Clear fDlg.Filters.Add "すべてのファイル", "*.*" fDlg.Filters.Add "CSV ファイル (*.csv)", "*.csv" fDlg.FilterIndex = 1 If fDlg.Show Then getFilePicker = fDlg.SelectedItems(1) Else getFilePicker = "" Me.Refresh End Function ご教授の程、宜しくお願い致します。

  • アクセス2000→エクセル2010へエクスポート

    Private Sub cmd出力ボタン_Click() DoCmd.SetWarnings False DoCmd.TransferSpreadsheet acExport, 8, "出力クエリ", "C:データ.xlsx", True, "" DoCmd.SetWarnings True End Sub 実行すると 外部テーブルのフォーマットが正しくありません と出てしまいます。 エクセル97の形式にエクスポートする際は大丈夫でした。 spreadsheettypeの引数が違うのかとは思いますが適切な数値がわかりません。 他のやり方等もあれば教えて下さい。

  • アクセス2007 テーブルの全削除とデータ移動

    アクセス2007 テーブルの全削除とデータ移動 全テーブルを削除して、データをインポートしようとしています。 質問1. 下記のコードで、リレーションの張ってあるテーブルの削除でエラーになります。 でも、DoCmd.SetWarnings Falseの状態で、手動で削除するとエラーになりません。 だったらと思い、コードにDoCmd.SetWarnings Falseを追加したのですが、やはりエラーになります。 対処法はないでしょうか? 質問2. テーブルの中に「~TMP******」という勝手に作られたテーブルは、削除してもいいものなのでしょうか? 質問3. 削除後にインポートをしたいのですが。 手動でアクセスメニュー>外部データ>アクセス(のインポート)>現在の~~>すべて選択(テーブル)>OK これを実現するVBの記述は、どんなコードになるのでしょうか? --------------------------------------------------------------------- Private Sub 旧バージョンからデータ移動_Click() Dim i As Integer Dim tbls As DAO.TableDefs Dim tbl As DAO.TableDef '開いているフォーム全てを閉じる For i = Forms.Count - 1 To 0 Step -1 DoCmd.Close acForm, Forms(i).Name Next i Set tbls = CurrentDb.TableDefs DoCmd.SetWarnings False  '追加-------------------    ’全テーブル削除 For Each tbl In tbls If InStr(1, tbl.Name, "MSys", vbBinaryCompare) = 0 And InStr(1, tbl.Name, "~TMP", vbBinaryCompare) = 0 Then tbls.Delete (tbl.Name) End If Next DoCmd.SetWarnings True   '追加----------------   ’旧バージョンからのデータインポート   ’VBコードがわかりません End Sub ------------------------------------------------------------------------- ※旧バージョンとはアクセス本体ではなく、自分でつくったDBの旧バージョンです。 複数質問で申し訳ありませんが、よろしくお願い致します。

  • ACCESS VBA でのCSV取込エラー

    ACCESS VBA でのCSV取込エラー ACCESSにてフォルダ内にあるCSVファイルをすべてインポートしようとしています。 インポート定義を作成して、下記のコードを書いてみましたが、 データはすべてインポートされるのですが、 カンマが無視され、フィールドとフィールドの中間で途切れてデータが格納されてしまいます。 またフィールド4は日付形式なのですがこれがインポートエラーになります。 フィールド1 フィールド2 フィールド3 フィールド4 aaa aa,bbb bbb,ccc  エラー 2日間ほどネットサーフィンをして調べたのですが、 回避方法が見つからなかったので、お知恵を拝借できますでしょうか? よろしくお願いいたします。 Private Sub cmd06_Click() Dim MyFile As String Dim MyName As String Dim strFolderName As String DoCmd.SetWarnings False DoCmd.OpenQuery "Q09_全CSVデータ削除" DoCmd.SetWarnings True strFolderName = GetFolderName() 'フォルダ選択ダイアログを表示 If Len(strFolderName) > 0 Then '選択結果を評価 MyFile = strFolderName & "\*.csv" '【拡張子csvのファイルのみ取得】 MyName = Dir(MyFile, vbNormal) Do While MyName <> "" If MyName <> "." And MyName <> ".." Then If GetAttr(strFolderName & "\" & MyName) <> vbDirectory Then DoCmd.TransferText acImportFixed, "インポート定義", "T03_全CSVデータ", strFolderName & "\" & MyName, False, "" '【取得したファイルをインポート】 End If End If MyName = Dir Loop Else MsgBox "フォルダは選択されませんでした" End If MsgBox "データのインポートが終了しました" End Sub

  • Accessクエリ実行時のメッセージ表示について

    クエリ実行時にメッセージが表示されるのが面倒なので以下のようにしました DoCmd.SetWarnings False クエリ実行 DoCmd.SetWarnings True こうするとメッセージが表示されなくなりますが、他の箇所 (テーブルを開いてデータを削除とか、フォームの削除とか) でもメッセージが出なくなってしまいます。 他のところではメッセージが出るようにしたいのですが… また、一度mdbを閉じて開きなおすと、ちゃんと出ます

  • Access97でのエクスポートエラーメッセージ

    OS WINXP Excel2002 Access97で、下記の操作をやると、 Microsoft Visual Basic 実行時エラー ’1004’:’講習会資料.xls’にアクセスできません。 というメッセージがでます。 再起動してやるとエラーにはならないのですが、もう1回やるとまた エラーメッセージがでます。 EXCELのファイルが何かおかしいのでしょうか? 教えてください。 Private Sub 講習会収支明細_Click() DoCmd.SetWarnings False DoCmd.Maximize If gOnErrorCtl Then On Error GoTo Err_講習会収支明細_Click Dim sh DoCmd.OpenQuery "Q_総会資料用", acViewNormal, acReadOnly DoCmd.OpenQuery "Q_借方仕訳伝票一覧印刷用", acViewNormal, acReadOnly DoCmd.OpenQuery "Q_貸方仕訳伝票一覧印刷用", acViewNormal, acReadOnly DoCmd.OpenQuery "Q_講習会資料残高用", acViewNormal DoCmd.TransferSpreadsheet acExport, 5, "T01_講習会資料残高用", "c:\講習会会計\講習会資料.XLS", True sh = Shell("C:\Program Files\Microsoft Office\Office10\EXCEl c:\講習会会計\講習会資料残高用.XLS", 1) DoCmd.SetWarnings False DoCmd.OpenQuery "Q_講習会収入残高用", acViewNormal DoCmd.TransferSpreadsheet acExport, 5, "T02_講習会資料残高用", "c:\講習会会計\講習会資料.XLS", True Exit_講習会収支明細_Click: Exit Sub Err_講習会収支明細_Click: MsgBox Err.Description Resume Exit_講習会収支明細_Click End Sub

  • ACCESS2013で複数ファイルのインポート

    お世話になっております。 環境は windows7 ACCESS2013 ACCESS2013を使って特定フォルダにある、AAA1.csv AAA2.csv・・・・とファイル名下一桁が連番になっているデータをACCESS2013のT_AAAという名前のテーブルにインポートをさせたいです。 テーブルのフィールド名やデータ型はどのファイルも同一です。 色々とネットで検索したのですが、あまりに初心者レベルのために理解できずにおります。 アドバイスをお願いいたします。 ネットで調べて真似して書いてみましたがエラーになります。 DoCmdでエラーになります。 どこが悪いのかさっぱり解りません。 Private Sub コマンド0_Click() Dim MyPath As String Dim MyCSV As String MyPath = "C:\Users\OOO_OOO\Desktop\test\AAA*.csv" MyName = Dir(MyPath, vbNormal) Do While MyName <> "" DoCmd.TransferText acImportDelim, "T_AAA", _ "C:\Users\OOO_OOO\Desktop\test\" & MyName, False MyName = Dir Loop End Sub 大変申し訳ございませんが、アドバイスをお願い申し上げます。

  • (VBA) Dir 関数で取得するファイル一覧の順序

    タイトルの通り、下記のサンプルコードを実行して取得するファイル一覧の順序についての質問です。 Public Sub Test1() Dim WSH As Object Dim MyPath As String Dim MyFileName As String Set WSH = CreateObject("WScript.Shell") MyPath = WSH.SpecialFolders("MyDocuments") MyFileName = Dir(MyPath & "\" & "*.*") Do Until MyFileName = "" MsgBox MyFileName MyFileName = Dir Loop Set WSH = Nothing End Sub (質問) ファイル名の昇順では取得できないようですが、もしファイル名の昇順に並べ替えるとしたら、 どのように処理したらよいのでしょうか?