Forgive me if I am being dense,

You have a directory of .pdf that you wish to record in a table.  

You are running checks
A: .pdf in PDF_Table -> !in directory
B: .pdf in directory -> !in PDF_Table

Would it not be easier to 
A: Create scratch table of .pdf that actually exist in the directory
B: Clear PDF_Table of .pdf (delete * from PDF_Table)
C: Append Scratch table to PDF_Table

If not possible, can you use a scratch table & a simiar SQL to this:
Delete from PDF_Table where name not = scratch.name

I have no experience of Advantage, but stored procedures are standard in
most rdbms


 

> -----Original Message-----
> From: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] On Behalf Of 
> [EMAIL PROTECTED]
> Sent: 28 June 2007 10:07
> To: [email protected]
> Subject: RE: Slowing down in loop
> 
> "Nesler, Thomas J" <[EMAIL PROTECTED]>
> Sent by: [EMAIL PROTECTED]
> 27/06/2007 15:27
> Please respond to
> "Borland's Delphi Discussion List" <[email protected]>
> 
> 
> To
> "Borland's Delphi Discussion List" <[email protected]>
> cc
> 
> Subject
> RE: Slowing down in loop
> 
> 
> 
> 
> Thanks for all the replays. 
> The database I am using is Advantage Database Server. Their 
> publicity says 
> that the locate will use an underlying index if one is available, the 
> field is indexed. The reason I tried locate was I do not control the 
> naming of the files or the entire of the file names into the 
> table. So I 
> used locate for a case insensitive search.
>         After reading the replays I now have a thread run on 
> loading that 
> turns all the pdf names in the table to lower case. This is 
> not visible to 
> the user so the second or so it takes is not important.
> 
> I have included the timing from all three runs for completeness. 
> 
> Code fragment. .
>  The filenames are loaded into the stringlist as lowercase 
> 
> for i := 0 to pred(sl_PdfFiles.Count )  do begin
> SearchForFileInTable(i, start, psFilePath, sl_PdfFiles, y, tb);
> on E:EADSDatabaseError do begin
> showmessage(e.Message);
> raise;
> end;
> 
> procedure TDM1.SearchForFileInTable(i: Integer; start: Int64; 
> psFilePath: 
> string; sl_PdfFiles: TStringList; var y: Integer; tb: TAdsTable);
> begin
>         y := i;
>         tb.indexname := 'PDFNAME';
>         if not tb.FindKey([ sl_PdfFiles[i] ]) then begin
> 
> //      if not tb.Locate('PdfName', sl_PdfFiles[i], 
> [loCaseInsensitive]) 
> then begin
> 
> //      dosql(format('Select * from %s where lower(PdfName) = ''%s'' 
> ',[tb.TableName,sl_PdfFiles[i]]),Qypl, SQL_SELECT );
>   //    if qypl.RecordCount = 0 then begin
> 
> 
>                 inc(x);
>                 AddRecordToPdfTable(sl_PdfFiles[i], tb, psFilePath);
>                 fmMain.LbStaticText1.Caption := ' PDFs added = ' + 
> IntToStr(x);
>         end;
> 
>         RefreashPRgBar(i);
>         if i mod 100 = 0 then begin
>                 WriteftoFile('c:\log\Pdfupdate.log', 
> IntToStr(Gettickcount 
> - start), FL_APPEND);
>                 start := GetTickCount;
>         end;
> 
> end
> 
> ==============================================================
> ==================
> FINDKEY ======= LOCATE  ==========   SQL 
> =====================================
> ===========================================
> 16                                   32                       
>         31
> 63                                 141                        
>       609
> 94                                 344                            1125
> 157                               657                            1688
> 266                               969                            2219
> 344                             1344                            2750
> 422                             1891                            3344
> 485                             2407                            3875
> ==============================================================
> ==================
>   0                                     15 15
> 47                                  140                       
>       1359
> 78                                  359                       
>       2703
> 125                                609                        
>      4078
> 172                               1031                            5437
> 219                               1437                            6859
> 250                               1906                            8250
> 297                               2546                            9656
> 344                               3296                        
>     11062
> 391                               4031                        
>     12422
> 438                               4921                        
>     13875
> 485                               5812                        
>     15281
> 531                               6781                        
>     16656
> 578                               7859                        
>     18047
> 625                               9031                        
>     19453
> 688                             10265                           20890
> 735                             11593                           22328
> 781                             12968                           23718
> 828                             14421                           25093
> 891                             15968                           26468
> 953                             17609                           27859
> 1000                            19296                           29250
> 1063                            21031                           30640
> 1125                            22906                           32000
> 1188                            24828                           33406
> 1235                            26843                           34828
> 1297                            29015                           36297
> 1360                            31156                           37843
> 1438                            33437                           39422
> 1500                            35812                           41000
> 1610                            38218                           42515;
> 
> Hi Robert!
> 
> Is there any way you could read in the file names into a stringlist,
> sort the stringlist and then do the locate?  I think it would help if
> you could give us a sample of your code to critique.
> 
> One of your problems is to determine what is slowing down the process.
> Is it the reading of the file names or is it the database search?
> 
> Tom Nesler
> Live long!...   Code Well!...   and Prosper!...   V
> 
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On
> Behalf Of [EMAIL PROTECTED]
> Sent: Tuesday, June 26, 2007 8:18 AM
> To: [email protected]
> Subject: Slowing down in loop
> 
> 
> i have an app that has to update two table with pdf files from 
> directories. There are about  900 files in one Dir and about 
> 3000 in the
> 
> other. I have to check if each file is in the table if not 
> add it. This 
> requires 3000 searches on the table but as the app progresses 
> it slows 
> down to a crawl. Anybody have any ideas?.
> 
> I have to add to this the revers for deleted files, so I 
> really could do
> 
> with speeding up the loop.
> 
> The list below is the milliseconds it takes to do 100 hundred 
> records. 
> There are no updates in the trimmings just locates
> bob Pointon
> 
> ======================================
> IPACTA_TRIALS_PDFS
> 0 
> 109 
> 203 
> 266 
> 328 
> 500 
> 531 
> 610 
> ======================================
> IPACTA_LABELS_PDFS
> 0 
> 110 
> 297 
> 250 
> 328 
> 422 
> 578 
> 579 
> 718 
> 750 
> 813 
> 937 
> 1000 
> 1063 
> 1094 
> 1250 
> 1328 
> 1406 
> 1453 
> 1516 
> 1578 
> 1718 
> 2047 
> 1907 
> 1875 
> 2031 
> 2032 
> 2187 
> 2250 
> 2344 
> 2406 
> _______________________________________________
> Delphi mailing list -> [email protected]
> http://www.elists.org/mailman/listinfo/delphi
> 
> 

_______________________________________________
Delphi mailing list -> [email protected]
http://www.elists.org/mailman/listinfo/delphi

Reply via email to