![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обработка большого кол-ва строк
Dmitry87 © (2009-02-05 01:25:00)Здравствуйте.
Скажите пожалуйста, как лучше реализовать следующее (я совсем новичек):
Нужно по определенному принципу обработать текстовый файл (около миллиона строк) и записать обработанные данные в StringGrid.
Реализовал следующим образом:
str:=tstringlist.create;
if opendialog1.Execute then
str.loadfromfile(opendialog1.FileName);
for c := 0 to str.Count-1 do
begin
str1:=str.Strings[c];
Form2.Panel3.caption:=inttostr(c+1)+' of '+inttostr(str.Count)+' complete';
StringGrid1.RowCount:= StringGrid1.RowCount+1;
z:=100*c div str.Count-1;
Form2.ProgressBar1.Position:=z;
form2.Update;
for e := 0 to 25 do
begin
ind:=pos(';',str1);
StringGrid1.Cells[e,c]:=copy(str1,0,ind-1);
delete(str1,1,ind);
end;
end;
Проблема: Приложение (судя по ProgressBar и счетчику обработанных строк) намертво виснет еще на 50-70 тысячах. Также виснет при деактивации окна. При этом память, используемая программой растет огромными темпами.
Вопрос: Куда копать? Конкретную реализацию мне не нужно - просто укажите что неправильно.
Cпасибо.
Anatoly Podgoretsky (2009-02-06 14:37:00) [1]> Dmitry87 (06.02.2009 13:00:37) [37]
Можно, но как сделать для 2005 не знаю, а для MSDE 2000 это или командная строка, или ИНИ файл, и то и другое можно сформировать в рантайм. Разворачивание базы делает путем запуска OSQL и текстового файла. АДО коннектион имеет свойство ConnectionString, которое тоже текстового типа. ADOQuery лучше никогда не использовать, для этого есть другие, более прямые компоненты. Литература для Дельфи просто не нужна, а для SQL сервером есть BOL
sniknik (2009-02-06 13:50:00) [2]> Скажите, а можно ли сделать универсальный установочник? Ну, чтобы он сам по даблклику все развернул?
не можно а нужно... клиент при установке программы ее внутренним устройством заморачиваться не должен.
и создавать базу лучше скриптом, а не из бекапа, т.к. при установке это именно создание базы а не копирование.
> Подключение к базе делать через ADOСonnection->MS OLE DB Provider for SQL Server?
да
> А запросы и взаимодействие с БД осуществляются чере ADOQuery
а вот этого не надо, сразу привыкай к нормальным компонентам, ADOCommand и ADODataSet.
ADOQuery, ADOTable, ADOStoredProc лучше даже удали с палитры чтобы не "соблазняли" на использование.
> Не подскажете ли литературу
самая лучшая литература это BOL (справка MSSQL, есть и русская, хотя по моему лучшая это от 2000го), и + любая книжка по основам SQL неважно какая и по какому типу, просто начать по ней.
Dmitry87 (2009-02-06 13:00:00) [3]to Anatoly Podgoretsky.
Спасибо большое. На данный момент взаимодействие с БД (по умолчанию) происходит через протокол SharedMemory...
Скажите, а можно ли сделать универсальный установочник? Ну, чтобы он сам по даблклику все развернул?
Подключение к базе делать через ADOСonnection->MS OLE DB Provider for SQL Server? А запросы и взаимодействие с БД осуществляются чере ADOQuery с помощью T-SQL запросов (например, запись в ячейки, про которую я спрашивал - через что-то типа "INSERT INTO...")?
Не подскажете ли литературу, в которой есть основы работы с SQL Server средствами Delphi? А то я что-то не то нашел, наверное ("Программирование баз данных MS SQL Server 2005. Базовый курс. Р. Виейра")...
Anatoly Podgoretsky (2009-02-06 12:01:00) [4]
> Dmitry87 (06.02.09 10:45) [34]
Неверно, зависит от версии MS SQL, в 2005 сеть по определению отключена, надо специально включать. Кстати и никакого localhost тоже. Если не идет сетевое взаимодействие, то в этом режиме и должно оставаться, поскольку производительно по крайней мере на порядок выше.
Базу можно переносить по разному, либо как бекап образ, либо напрямую и подключать через attach. Первый вариант считается предпочтительным, можно переносить между разными версиями, но только вверх.
Все операции можно закодировать в Дельфи, поскольку в MS SQL нет никакого другого взаимодействия с пользователем, как через клиента, с самим сервером может идти SSMS (необязательно)
Сергей М. (2009-02-06 10:57:00) [5]
> т.е. подключаться к БД из Delphi только через localhost?
Не только, но предпочтительно в дан.случае.
Это касается не только и не столько MSSQL, а любого другого сервиса, предоставляющего возможность взаимодействия с ним по TCP/IP
Dmitry87 (2009-02-06 10:45:00) [6]И снова здравствуйте! :)
немного пробежался по лит-ре по MS SQL. Как я понял, он устанавливается как набор служб, через которые и происходит доступ к БД - т.е. подключаться к БД из Delphi только через localhost?
Это значит, что при переносе БД на другой компьютер, там тоже нужно устанавлвать MS-SQL? А саму базу переносить как? Из backup'а?
korneley (2009-02-06 06:48:00) [7]
> Те, кто просил меня сделать ЭТО имели в виду БД, как выяснилось
> (просто БД для них - это "Excel")
Непременно бежать. Желательно, в противоположную от них сторону :)
Anatoly Podgoretsky (2009-02-05 13:38:00) [8]> Dmitry87 (05.02.2009 13:34:31) [31]
VS2008 слишком широкое понятие, вероятность, что есть очень высокая.
Dmitry87 (2009-02-05 13:34:00) [9]Спасибо. Нашел где скачать.
Только вот вспомнил, что есть VS2008 на HDD. В нем случайно нет этого MSSQL? И еще есть MSSQL Server 2008 Enterprise во внутренней сети, только размер в полтора гб смущает...
Anatoly Podgoretsky (2009-02-05 13:33:00) [10]> ЮЮ (05.02.2009 13:15:28) [28]
В Express студия и справка отдельно.
Плохиш (2009-02-05 13:15:00) [11]
> ЮЮ © (05.02.09 13:10) [26]
>
>
Не, прикалываюсь, как люди любят бессмысленные телодвижения делать :-))
ЮЮ (2009-02-05 13:15:00) [12]
> + Management Studio
Там есть флаконы разного объема. 50 метровый содержит и Management Studio
Anatoly Podgoretsky (2009-02-05 13:13:00) [13]> Dmitry87 (05.02.2009 12:54:24) [24]
MS это Микрософт, идешь туда м в поиске MS SQL 2005 Express
Кроме самого сервера скачиваешь еще и Bool Online + Management Studio
ЮЮ (2009-02-05 13:10:00) [14]
> Плохиш © (05.02.09 13:06) [25]
> Учителя, блин...
Чего осерчал? Конкуренции боишься? :)
Плохиш (2009-02-05 13:06:00) [15]Интересно, это я один что-ли обратил внимание на строчку
> просто в программирование только второй день вникаю.
Учителя, блин...
Dmitry87 (2009-02-05 12:54:00) [16]Спасибо.
Где и как взять MS SQL? Это что? Программа? Как полностью называется или поделитесь ссылкой, будьте добры. Из моих скромных познаний знаю, что SQL - это язык запросов, вероятно им и придется оперировать для работы с БД? Пошел качать лит-ру :).
Anatoly Podgoretsky (2009-02-05 12:10:00) [17]> Dmitry87 (05.02.2009 12:03:21) [21]
Можно и для этого не требуется программирования в Акцесс, все можно делать в прорамме на Дельфи.
Кстати я бы не советовал использовать Акцесс, возьми лучше MS SQL бесплатный - созможности много шире.
sniknik (2009-02-05 12:06:00) [18]> можно ли программно писать некоторые данные из файлов в mdb на Delphi.
> ЮЮ © (05.02.09 11:29) [17]
??? это кому писали?
Dmitry87 (2009-02-05 12:03:00) [19]> Нельзя, язык программирования в Акцессе VBA
Спасибо. Я понял. Вопрос в другом: можно ли программно писать некоторые данные из файлов в mdb на Delphi. То есть не вручную набивать или используя сам Access, а из Delph'овой программы-оболочки (данные из файлов).
Anatoly Podgoretsky (2009-02-05 11:46:00) [20]> Dmitry87 (05.02.2009 11:33:19) [19]
Нельзя, язык программирования в Акцессе VBA