Еще раз.
Какой функционал ты пытаешься сделать?
Поиск файлов и вставка их в БД? Т.е. пользовательского интерфейса нет.
Соответсвенно, вполне можно сделать CallBack в процедуре поиска которая и будет всталять записи в БД. Да, можно заполнить массив/список и уже из него вставлять. А зачем промежуточный код?
Например, возьмем твой код и немного его переделаем:
Код:
type
TInsertImageToDbCallBack = procedure(AFileName : String; ASize : Integer) of object;
procedure TForm1.FileSearch(const dirName:string; ACallBack : TInsertImageToDbCallBack);
var
searchResult: TSearchRec; a : array [1..255] of Integer;
begin
if FindFirst(dirName+'\*', faAnyFile, searchResult)=0 then begin
try
repeat
if (searchResult.Attr and faDirectory)=0 then begin
if SameText(ExtractFileExt(searchResult.Name), '.jpg') then begin
ACallBack(IncludeTrailingBackSlash(dirName)+searchResult.Name,searchResult.Size); end;
end else if (searchResult.Name<>'.') and (searchResult.Name<>'..') then begin
FileSearch(IncludeTrailingBackSlash(dirName)+searchResult.Name);
end;
until FindNext(searchResult)<>0
finally
FindClose(searchResult);
end;
end;
end;
Теперь вызов.
Делаем раз (делаем 2 callback'а, один для отладки, второй для вставки данных):
Код:
procedure TForm1.AddToMemoCb(AFileName : String; ASize : Integer);
begin
Memo1.Lines.Add(Format('File: %s; Size: %d',[AFileName,ASize]));
end;
procedure TForm1.AddToDbCb(AFileName : String; ASize : Integer);
begin
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add(Format('INSERT INTO tablename (name, size) VALUES (%s, %d)',[AFileName,ASize]));
SQLQuery1.Exec;
end;
Ну и, собственно, вызов:
Код:
FileSearch('c:\images\',AddToMemoCb); // Показали в Memo
FileSearch('c:\images\',AddToDbCb); // Записали в БД
А вообще, это еще и в отдельный поток можно "вытолкнуть", что бы основной процесс (интерфейс) не подвисал.