Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Загрузить все записи в Stringlist одним махом? 
:(
    Опции темы
Poseidon
Дата 18.5.2005, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 3
Всего: 133



Код
{Loading millions of records into a stringlist can be very slow } 

procedure TForm1.SlowLoadingIntoStringList(StringList: TStringList); 
begin 
  StringList.Clear; 
  with SourceTable do 
  begin 
    Open; 
    DisableControls; 
    try 
      while not EOF do 
      begin 
        StringList.Add(FieldByName('OriginalData').AsString); 
        Next; 
      end; 
    finally 
      EnableControls; 
      Close; 
    end; 
  end; 
end; 

{ This is much, much faster } 
procedure TForm1.QuickLoadingIntoStringList(StringList: TStringList); 
begin 
  with CacheTable do 
  begin 
    Open; 
    try 
      StringList.Text := FieldByName('Data').AsString; 
    finally 
      Close; 
    end; 
  end; 
end; 

{ How can this be done? 

  In Microsoft SQL Server 7, you can write a stored procedure that updates every night 
  a cache table that holds all the data you want in a single column and row. 
  In this example, you get the data from a SourceTable and put it all in a Cachetable. 
  The CacheTable has one blob column and must have only one row. 
  Here it is the SQL code: } 


Create Table CacheTable 
(Data Text NULL) 
GO 

Create  

procedure PopulateCacheTable as 
  begin 
  set NOCOUNT on 
  DECLARE @ptrval binary(16), @Value varchar(600) - 
  - a good Value for the expected maximum Length 
  - - You must set 'select into/bulkcopy' option to True in order to run this sp 
  DECLARE @dbname nvarchar(128) 
  set @dbname = db_name() 
EXEC sp_dboption @dbname, 'select into/bulkcopy', 'true' 
- - Declare a cursor 
DECLARE scr CURSOR for 
SELECT  OriginalData + char(13) + char(10) - - each line in a TStringList is 
separated by a #13#10 
FROM    SourceTable 
- - The CacheTable Table must have only one record 
if EXISTS (SELECT * FROM CacheTable) 
Update CacheTable set Data = '' 
else 
Insert CacheTable VALUES('') 
- - Get a Pointer to the field we want to Update 
SELECT @ptrval = TEXTPTR(Data) FROM CacheTable 

Open scr 
FETCH Next FROM scr INTO @Value 
while @ @FETCH_STATUS = 0 
begin - - This UPDATETEXT appends each Value to the  
end  
of the blob field 
UPDATETEXT CacheTable.Data @ptrval NULL 0 @Value 
FETCH Next FROM scr INTO @Value 
end 
Close scr 
DEALLOCATE scr 
- - Reset this option to False 
EXEC sp_dboption @dbname, 'select into/bulkcopy', 'false' 
end 
GO 

{ You may need to increase the BLOB SIZE parameter if you use BDE } 



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0608 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.