背景
アホが書いた記事なのに下記の記事のviewが10000超えてて驚愕しました。
非常に励みになります。
もう少しちゃんとしたいと思い、ファイル名やパスが変わってリンク切れになった場合の対処も書いときます。
おさらい
Accessで、こんなテーブルのPath列にPowerpointファイルのファイルパスが入っています。
方針
・リンク先のファイルがあるか確認
・なかったら消す
の処理を行うpyodbcを使ったコード
コード
import os
import pyodbc
#データベース接続
conn_str= (
r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
r'DBQ=C:\Database.accdb;'#Accessファイルのパス
)
conn=pyodbc.connect(conn_str)
cursor=conn.cursor()
#全レコードの取得
sql_select="SELECT [Path] FROM [テーブル1]"
cursor.execute(sql_select)
path_list=[item[0] for item in cursor.fetchall()]
path_list=list(set(path_list))
#リンク切れのファイルのレコードを削除
for fpath in path_list:
path_for_sql=fpath.replace(r"'",r"''") #シングルクォートのエスケープ
if not os.path.exists(fpath):
cursor.execute(r"DELETE FROM [テーブル1] WHERE [Path] = '" + path_for_sql + "'")
print (fpath + "はリンク切れのため削除")
cursor.commit()
cursor.close()
conn.close()
cursor.executeからのfetchallを使った全レコードリスト取得は汎用性ありそうですね。(自分用メモ)
動作確認
注意
ネットワーク上のPowerpointファイルのパスについては、LANの問題とかでファイルサーバーへのアクセスができない場合もリンク切れと判定されてレコードが消されるかもしれない。
そこで実行前にファイルへのアクセスが可能か確かめ、念のためバックアップ(Accessファイルのコピー)もとっておく。