Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обработка большого кол-ва строк


Страницы:   1 2

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо