![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Здравствуйте! как вывести размер файла  
		
	
		
		
		
		
		
	
		
		
	
	
	  Код: 
	procedure TForm1.FileSearch(const dirName:string);
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
            ListBox2.Items.Append(IncludeTrailingBackSlash(dirName)+searchResult.Name);
            memo3.Lines.Add(inttostr(searchResult.Size)); //size image
            // a[i]:=searchResult.Size;
            // memo5.Lines.Add(inttostr(a[i]));
          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;Код: 
	procedure TForm1.Button6Click(Sender: TObject);
begin
FileSearch('d:\image');
memo5.Lines.Add(a);
end; | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 вернее как его вывести я знаю:  
		
	
		
		
		
		
		
	
		
		
	
	
	Код: 
	memo5.Lines.Add(inttostr(a[i])); Код: 
	procedure TForm1.Button6Click(Sender: TObject);
begin
FileSearch('d:\image');
memo5.Lines.Add(a);
end; | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Ну сделай call-back  в функции поиска, например. 
		
	
		
		
		
		
		
	
		
		
	
	
	Или я просто не понимаю что ты хочешь. Вывод информации о файле при клике на его имя в ListBox? Ну так для этого эту информацию надо где-то сохранять. Тут есть разные варианты. Надо понимать что надо сделать, как это должно работать с точки зрения пользователя, а уж как это сделать - вопрос чисто технический, тем более, что задача типовая...  | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 я тоже подумал записать в простой listbox и считывать от туда  
		
	
		
		
		
		
		
	
		
		
	
	
	  Код: 
	ListBox2.Items.Append(IncludeTrailingBackSlash(dirName)+searchResult.Name); Код: 
	procedure TForm1.FileSearch(const dirName:string);
var
    searchResult: TSearchRec;
begin
Result:=searchResult.Size;
end;
 Код: 
	procedure TForm1.Button6Click(Sender: TObject);
var i:integer;
begin
FileSearch('d:\image');
memo5.Lines.Add(Result);
end;Код: 
	SqlQuery1.ParamByName('size').AsString := '4456874mb'; //inttostr(imgsize); | 
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Еще раз. 
		
	
		
		
		
		
		
	
		
		
	
	
	Какой функционал ты пытаешься сделать? Поиск файлов и вставка их в БД? Т.е. пользовательского интерфейса нет. Соответсвенно, вполне можно сделать 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); // Записали в БДА вообще, это еще и в отдельный поток можно "вытолкнуть", что бы основной процесс (интерфейс) не подвисал.  | 
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
 
leon2009 (20.09.2023)
  | ||
| 
		 
			 
			#6  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 про id забыли 
		
	
		
		
		
		
		
	
		
		
	
	
	Код: 
	FileSearch(IncludeTrailingBackSlash(dirName)+searchResult.Name,AddToMemoCb); Код: 
	procedure TForm1.AddToMemoCb(AFileName : String; ASize : Integer);
begin
inc(id);
  Memo5.Lines.Add(Format('id: %id, File: %s; Size: %d',[AFileName,ASize]));
end; | 
| 
		 
			 
			#7  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Ну, во первых, сам добавишь что там тебе надо. 
		
	
		
		
		
		
		
	
		
		
	
	
	Во вторых, главное что бы принцип понял, а конкретные поля принципиально ничего не меняют. В третьих, как я понимаю, id - это уникальный идентификатор в БД. Проблема в том, что значение этого поля обычно не доступно до тех пор. пока запись не будет добавлена в таблицу. Более того, обычно новый id либо запрашивается из БД, либо вообще добавляется триггером автоматически (его в этом случае даже не указывают в запросе вставки записи). В подобном коде, когда идет вставка большого кол-ва записей, назначение id оставляется на БД. Потом, если надо, эти записи после вставки вычитываются из БД обратно и тогда получишь эти id.  |