2013-10-24 1 views
0

Есть ли способ ограничить мой массив к дате файла? Я хочу, чтобы все файлы были с диска, но только если дата в файле -> последнее хранимое время импорта. Когда я строю массив на «asterisk.asterisk», он занимает слишком много времени. Есть предположения?Состояние массива

fsLAST = '' 
USE CMEMAILS IN 0 
SELECT CMEMAILS 
SET ORDER TO DTSTAMP && DTSTAMP 
GO BOTTOM 
fsLAST = CMEMAILS.DTSTAMP 
local array MyFiles[1,5] 
     nFilesFound = ADIR(MyFiles, ALLTRIM(cmcontrol.cpath) + '*.*') 

    for i = 1 to nFilesFound 
     SELECT cmemails 
    DO CASE 
    CASE DATETIME(YEAR(MyFiles[ i, 3]), MONTH(MyFiles[ i, 3]), DAY(MyFiles[ i, 3]), VAL(LEFT(MyFiles[ i, 4], 2)), VAL(SUBS(MyFiles[ i, 4], 4, 2)), VAL(SUBS(MyFiles[ i, 4],7,2))) > fsLAST 
      insert into cmemails (cprimary, csubject, ddate, dtime, cattribs, dtstamp) values ; 
      (generateGuid(26), MyFiles[ i, 1], MyFiles[ i, 3], MyFiles[ i, 4], MyFiles[ i, 5],DATETIME(YEAR(MyFiles[ i, 3]), MONTH(MyFiles[ i, 3]), DAY(MyFiles[ i, 3]), VAL(LEFT(MyFiles[ i, 4], 2)), VAL(SUBS(MyFiles[ i, 4], 4, 2)), VAL(SUBS(MyFiles[ i, 4],7,2)))) 
    ENDCASE 
endfor 

ответ

1

поскольку массив имеет элемент 3, как дата и 4 в то время, вы могли бы сделать ..

for i = ... 
    ltFileTime = CTOT(DTOC(MyFiles[1,3]) + " " + MyFiles[1,4]) 
    if ltFileTime > fsLast 
    */ do your insert... 

    endif 
endfor 

вам может понадобиться, чтобы убедиться, что

SET CENTURY ON

, чтобы обеспечить правильное преобразование даты и времени.

Вы также можете использовать ltFileTime вместо вашего DATETIME (год, месяц, дата и т.д.) для удобства чтения ...

+0

Высокий @DRapp. Это именно то, что мне нужно. – Zornjac