Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.05.2014, 03:21
SpetZ_Naz вне форума Посмотреть профиль Отправить личное сообщение для SpetZ_Naz Найти все сообщения от SpetZ_Naz
  № 1  
Ответить с цитированием
SpetZ_Naz

Регистрация: Aug 2012
Сообщений: 77
Question SQLLite SQLStatement.executing is true = error --ошибка цикличного запроса ?

Здравствуйте, уважаемые форумчане!

Помогите пожалуйста разобраться с организацией циклического запроса в базу данных.

Конвертирую данные из XML (там 200 записей по 96 в каждой) в локальную базу данных, созданную стандартными средствами AS3. При создании базы данных проблем не было: с помощью цикла сформировал названия 96 столбцов и собрал их в команду создания таблицы в базе данных.

Дальше пытаюсь с помощью цикла добавлять все последующие записи из XML в созданную базу данных:

Код AS3:
protected function onLoadXMLCompleteHandlerSQL(event:Event):void  // ДОБАВЛЕНИЕ ДАННЫХ В БАЗУ
		{
			_urlLoaderSQL.removeEventListener(Event.COMPLETE, onLoadXMLCompleteHandlerSQL);
 
			xml = new XML(event.target.data);
			var stringSQL:String = '';
			var stringSQLValues:String = '';
			var stringSpace:String = ', ';
			var tempSQLArray:Array = [];
			var int:uint = 0;
 
			for each (var element:XML in xml.elements()) 
			{
			int2 ++;
				if (element.name() == "Item") 
				{
					for(var i:uint = 0; i<element.elements().length()-1; i++)
					{
						if (i == element.elements().length()-2)
						{ 
							stringSpace = '';
						}
 
						stringSQL +=  element.elements()[i].name().toString()  + stringSpace;
						stringSQLValues += '@' + element.elements()[i].name().toString() + stringSpace;
 
						tempSQLArray.push(['@' + element.elements()[i].name().toString(), element.elements()[i].toString(), element.elements()[i].@_name.toString()]); // параметр
					}
					sqlConnection.begin();
 
					sqlStatement = new SQLStatement();
					sqlStatement.sqlConnection = sqlConnection;
					sqlStatement.addEventListener(SQLEvent.RESULT, onSQLResultHandler); 
					sqlStatement.addEventListener(SQLErrorEvent.ERROR, onSQLResultErrorHandler);
 
 
					sqlStatement.text = 'INSERT INTO table_of_content(' + stringSQL + ') VALUES(' + stringSQLValues + ')';
 
					sqlConnection.addEventListener(SQLEvent.BEGIN, onBeginCommitHandler);
					for (var j:uint = 0; j < tempSQLArray.length; j++) 
					{
						sqlStatement.parameters[tempSQLArray[j][0]] = tempSQLArray[j][1];
					}
					sqlConnection.commit();
 
					tempSQLArray = [];
					stringSQL = '';
					stringSQLValues = '';
				}
			}
		}
 
protected function onBeginCommitHandler(event:SQLEvent):void
		{
			sqlStatement.execute();
		}
 
protected function onSQLResultHandler(event:SQLEvent):void
		{
			trace('строка добавлена успешно');
		}
 
protected function onSQLResultErrorHandler(event:SQLErrorEvent):void
		{
			trace('ошибка);
		}
Так вот, когда программа доходит до sqlStatement.execute() начинаются проблемы:

Цитата:
Error #3106: Property cannot be changed while SQLStatement.executing is true.
Смысл ошибки я понимаю - нельзя выполнить следующий запрос не завершив предыдущий, тоесть цикл слишком быстро формирует запрос...

По одной записи отдельно добавляет, т.е. если тупо прогнать клавишей вышеописанный код, то записи формируются успешно, но как-то 200 раз клацать по кнопке... да и в будущем будет необходимость циклом запросы формировать...

Как обойти данную ошибку и применять циклы для формирования запросов? Кто сталкивался прошу помочь..



.
__________________
Набирать программы могут многие, программировать - единицы

Старый 24.05.2014, 12:18
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 2  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Сформируйте сначала массив со строками запросами, затем пустите один на обработку, дожидаясь SQLEvent.RESULT. Дождались — запустили следующий. И так далее. У Вас ход мыслей верный, нужно только чуть переписать логику.
__________________
тут я

Старый 27.05.2014, 00:57
SpetZ_Naz вне форума Посмотреть профиль Отправить личное сообщение для SpetZ_Naz Найти все сообщения от SpetZ_Naz
  № 3  
Ответить с цитированием
SpetZ_Naz

Регистрация: Aug 2012
Сообщений: 77
Сделал так как Вы посоветовали, все заработало. Спасибо
__________________
Набирать программы могут многие, программировать - единицы

Создать новую тему Ответ Часовой пояс GMT +4, время: 14:12.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
db , execute , SqlLite , sqlStatement , xml
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 14:12.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.