frb_noname
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Нашел решение своего вопроса относительно использования транзакций при многократной вставке записей в БД SQLite, может кому пригодится - скорость вставки возросла в разы ! Код: Func addallfiles() ;==== чистим буферную базу ============ If Not _SQLite_Exec (-1, "delete from bazadir;") = $SQLITE_OK Then MsgBox(16, "SQLite Error", _SQLite_ErrMsg ()) ;======= получаем в массив имена всех файлов из директории ============ $filename1 = _FileListToArray(@scriptdir) ;----------------- НАЧАЛО ТРАНЗАКЦИИ ====== _SQLite_Exec (-1, "begin transaction;") ;========== для каждой записи массива выполняем ========== 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 ()) ;======== КОНЕЦ ТРАНЗАКЦИИ =============== _SQLite_Exec (-1, "commit;") select_all() EndFunc ;==========>>> addallfiles ======================= |
| Всего записей: 47 | Зарегистр. 03-11-2008 | Отправлено: 10:51 03-09-2010 | Исправлено: frb_noname, 10:55 03-09-2010 |
|