0

Microsoft Access 2003 で DIR() コマンドを使用して、フォルダー A 内のファイルをループ処理しました。これは正常に機能しますが、各ファイルが別の場所 (フォルダー B) にも存在するかどうかを確認し、存在する場合にのみファイルを処理する必要があります。フォルダ B には存在しません。

問題は、フォルダー B に存在するファイルのチェックでも DIR() 関数が使用され、これにより元のファイルがリセットまたは混乱され、その結果、フォルダー A にそれ以上のファイルが見つからないことです。

DIR を使用せずにファイルが存在するかどうかを確認する方法はありますか?

または、DIR の別のインスタンスを持つ方法はありますか?

フォルダー A 内のファイルのリストを配列に構築し、配列内のエントリを処理できると思いますが、これはかなり「ぎこちない」ようです。

より良い解決策の提案はありますか?

ありがとう

4

2 に答える 2

0

私は FSO をあまり信頼していないので、ファイル API を好みます。FindFirstFile: パフォーマンスの比較 - FSO と APIも参照してください。 たとえば、100 個未満のファイルでは、パフォーマンスの違いはそれほど重要ではありません。File API Routinesで、単純なファイル リストまたは再帰的にサブ フォルダーを検索するのに役立つサンプル コードが多数含まれています。

于 2010-05-02T03:48:26.790 に答える
0

オペレーティング システムと要件によっては、SystemIndex の検索が役立つ場合があります。ここにいくつかのメモがあります。

Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strSQL As String

''This is the Windows Search connection string to use
cn.Open "Provider=Search.CollatorDSO;" _
    & "Extended Properties='Application=Windows';"

''SQL SELECT  statement specifies what properties to return,
''            you can add more if you want
''    FROM -  use SystemIndex for a local query or
''            MACHINENAME.SystemIndex for remote
''    WHERE - specify restrictions including SCOPE and other
''            conditions that must be true

''To add scope restriction:
''strSQL = "SELECT System.ItemName, System.ItemTypeText, " _
''       & "System.Size FROM SystemIndex " _
''       & "WHERE Scope='file:c:\Users\'"

strSQL = "SELECT System.ItemName, System.ItemTypeText, " _
       & "System.Size, System.ItemFolderPathDisplay " _
       & "FROM SystemIndex " _
       & "WHERE System.ItemName='AnExampleFile.mdb'"

rs.Open strSQL, cn
rs.MoveFirst

Do Until rs.EOF
    Debug.Print rs.Fields.Item("System.ItemName")
    Debug.Print rs.Fields.Item("System.ItemTypeText")
    Debug.Print rs.Fields.Item("System.Size")
    Debug.Print rs.Fields.Item("System.ItemFolderPathDisplay")
    Debug.Print String(30, "-")
    rs.MoveNext
Loop

rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

詳細情報:
http://msdn.microsoft.com/en-us/library/bb266517(VS.85).aspx
http://msdn.microsoft.com/en-us/library/bb419046(v=VS.85 .aspx
http://msdn.microsoft.com/en-us/library/bb776859(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/bb231297(v=VS ) .85).aspx

于 2010-04-30T10:04:22.073 に答える