2017-02-15 19 views
0

添付ファイルのフィールドを持つローカルテーブルがあります。 vbaで手動で削除しようとしましたが、以前の添付ファイルは元に戻ります。私はレコードセットとSQLでそれを試した。 SQL添付ファイルのデータを削除する

Let strSQL = "DELETE tblSpecsPics.PicID,tblSpecsPics.SpecID,tblSpecsPics.SpecDetailID,tblSpecsPics.PicNum,tblSpecsPics.Pic.FileData,tblSpecsPics.Pic.FileName,tblSpecsPics.Pic.FileType,tblSpecsPics.ImageDesc FROM tblSpecsPics;" 

db.Execute strSQL, dbSeeChanges 

レコード

Set rst = db.OpenRecordset("SELECT * FROM tblSpecsPics WHERE Not (tblSpecsPics.Pic.FileData) Is Null;", dbOpenDynaset, dbSeeChanges) 

If Not rst.BOF And Not rst.EOF Then 
rst.MoveFirst 
Do Until rst.EOF 
    rst.Edit 
    Set rsv = rst.Fields(4).Value 
    rsv.Delete 
    rst.Update 
    rst.MoveNext 
Loop 

エンド

私は新しいレコードを追加するとした場合、古い添付ファイルは必ず再表示されます。

+1

レコードのフィールドを「削除」しないでください。値をnullに設定します。削除はフルレコードのみに適用されます。 –

+0

実際に@TimWilliams、MS Accessテーブルの添付ファイルタイプは、実際にはメインテーブルへのポインタを持つテーブルを結合します。すべてのメタデータを削除するには、基になるリンクレコードを削除する必要があります。 – Parfait

+0

@パルフェット - 訂正してくれてありがとうございます。それは私にとって新しいものです。 –

答えて

1

MS Access Attachment Typeは実際にはメタデータ(filename、filedata、fileflag、filetype、など)のリンクテーブルであるため、これらの基礎となるリンクレコードを削除する必要があります。したがって、メインテーブルの添付フィールド値に別のレコードセットループを入れ子にすることを検討してください。

strSQL = "SELECT * FROM tblSpecsPics WHERE Not (tblSpecsPics.Pic.FileData) Is Null;" 

Set rst = db.OpenRecordset(strSQL, dbOpenDynaset, dbSeeChanges) 

If Not rst.BOF And Not rst.EOF Then 
    rst.MoveFirst 
End If 

Do Until rst.EOF 

    Set childrst = rst.Fields(4).Value 
    Do Until childrst.EOF 
     childrst.Delete 
     childrst.MoveNext 
    Loop 

    rst.MoveNext 
Loop 
+0

私は実行したSQLステートメント(ポスト)で同じことをしましたが、レコードセットであなたの考えを試しました。添付ファイルが削除されないという問題はまだあります。私はすべてを削除することができますが削除されるように見えますが、新しい添付ファイルを読み込もうとすると、古い添付ファイルは削除されなかったかのように再表示されます。古い添付ファイルは新しいファイルとは別の場所に保存されています。コードをステップ実行すると、変数に表示される唯一の添付ファイルが新しい添付ファイルですが、テーブルを見ると古い添付ファイルが再び表示されます。これは非常にイライラしています。 –

+0

あなたの*再現*問題を再現することはできません。確かに、私はこのコードを再実行しました。私は3つのレコードにまたがって2つの添付ファイルを(異なるフォルダから)添付ファイルフィールドに追加しました。私の掲示されたコードをここに置き、すべてのレコードのすべての添付ファイルを削除しました。そして、新しい添付ファイルを追加しようとすると、以前のものは表示されませんでした。どのようにあなたは*ローディング*ですか?フォームやテーブルから? – Parfait

+0

フォルダ内のファイルから添付ファイルを読み込んでいます。それは読み込まれている特定の添付ファイルにのみあるようです。 SQLステートメントまたはレコードセットを使用すると、他のものは削除されます。 –

関連する問題