frb_noname
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Есть код, в котором производится вставка данных в БД SQLite. Вставка производится много (от 100 и больше) раз в цикле. Соответственно возникает тормоз от 1-2 минут и больше. На форумах нашел информацию о том, что нужно делать "многострочную вставку" (multirow insert) или сделать это в одной транзакции. Как это практически реализовать ? Прошу Вашей помощи. Код: Func addallfiles() ;=========== чистим буферную базу ============================= If Not _SQLite_Exec (-1, "delete from bazadir;") = $SQLITE_OK Then MsgBox(16, "SQLite Error", _SQLite_ErrMsg ()) ;========== получаем в массив имена всех файлов из директории ========== $filename1 = _FileListToArray(@scriptdir) ;====== для каждой записи массива выполняем =================== For $x=1 to UBound($filename1)-1 ;======== выделение из всего пути имени непосредственно файла ======== $filename=StringRight($filename1[$x],stringlen($filename1[$x])-stringInStr($filename1[$x],"\",2,-1)) ;======= выделяем дату из имени файла =============== $filedate=StringMid($filename, 9,2) & "." & StringMid($filename, 7,2) & "." & StringMid($filename, 3,4) ;========== вставка данных в буфернную базу ======== If Not _SQLite_Exec (-1, "INSERT INTO bazadir VALUES (null,'"& $filename & "','"& $filedate & "','');") = $SQLITE_OK Then _ MsgBox(16, "SQLite Error", _SQLite_ErrMsg ()) Next ;=== вставка из буферной таблицы в базу тех имен файлов, которых в базе еще нет ==== If Not _SQLite_Exec (-1, "insert into baza select null,filename,filedate,descript from bazadir where bazadir.filename not in (select baza.filename from baza);") = $SQLITE_OK Then _ MsgBox(16, "SQLite Error", _SQLite_ErrMsg ()) select_all() EndFunc ;=====>>> addallfiles ======== |
| Всего записей: 47 | Зарегистр. 03-11-2008 | Отправлено: 09:40 02-09-2010 | Исправлено: frb_noname, 09:55 02-09-2010 |
|