Hi Colin
Just so you know, the code you have below is not Craig's code. A much cleaner and simpler version of the code is this: That is because it does not use public variables, it does not use 2 arrays and it does not use macro substitution.
CLEAR
LOCAL lnBadCount, lcTable, loError
lnBadCount = 0
lcTable = SYS(2000,"*.DBF")
DO WHILE NOT m.lcTable == ""
TRY
USE (m.lcTable) IN 0 ALIAS thisDbf
USE IN SELECT("thisDbf")
CATCH TO loError
? "Table " + m.lcTable + " is bad."
lnBadCount = m.lnBadCount + 1
ENDTRY
lcTable = SYS(2000,"*.DBF",1)
ENDDO
? IIF(m.lnBadCount = 0, "No errors.", TRANSFORM(m.lnBadCount) + " table(s) could not be opened.")
>>Borislav gave you the code.
>>
>>Keep in mind that this will not guarantee the file is not corrupt. It will simply tell you if it can be opened.
>
>That is exactly what i wanted it to do - it enables me to spot the corrupt tables and replace them from a backup
>
>Thanks for your help
>
>>
>>
>>>This is my code - it opens the first database and then errors trying to get the second with Funcion argument value type or count is invalid - I must be missing something very obvious
>>>
>>>CLEAR
>>>CLEAR ALL
>>>SET EXACT ON
>>>SET TALK off
>>>SET DEFAULT TO c:\global
>>>PUBLIC dbfs,cta
>>>DIMENSION dbfs(1000)
>>>DIMENSION gadatabase(1000)
>>>gadatabase=""
>>>
>>>
>>>gnDbcnumber = ADIR(gaDatabase, '*.DBF') && Create array
>>>FOR nCount = 1 TO gnDbcnumber && Loop for number of databases
>>>dbfs(ncount)=gadatabase(ncount,1)
>>>ENDFOR
>>>
>>>
>>>STORE ncount TO cta
>>>
>>>DIMENSION dbfs(cta)
>>>
>>>
>>>FOR xxxx=1 TO cta
>>>STORE ALLTRIM(dbfs,xxxx) TO tablex
>>>tablex=ALLTRIM(tablex)
>>>USE &tablex IN 0 SHARED
>>>next