UNIDAC и SQLite

Обсуждение возникших проблем, предложений и ошибок UniDAC компонентов
Закрыто
nail
Сообщения: 4
Зарегистрирован: Чт 06 ноя 2014 07:15

UNIDAC и SQLite

Сообщение nail » Чт 06 ноя 2014 07:30

Здравствуйте. Проблема в следующем.
База на sqlite.
На форму кидаю uniconnection1, SQLiteUniProvider1, UniQuery1, Button1
Далее код на кнопку:
UniQuery1->Close();
UniConnection1->StartTransaction();
UniQuery1->Open();
UniQuery1->Edit();
UniQuery1->FieldByName("name")->AsString="привет";
UniQuery1->Post();
UniQuery1->ApplyUpdates();
UniConnection1->Commit();

Данные меняются, но видимо локально. В базу ничего не записывается. В чем может быть дело? Перечитал все что можно.

nail
Сообщения: 4
Зарегистрирован: Чт 06 ноя 2014 07:15

Re: UNIDAC и SQLite

Сообщение nail » Чт 06 ноя 2014 07:35

В добавок. В UniQuery1 у меня стоит обычный "select * from mytable". Если на форму поставить UniSql, залепить в него запрос на update и сделать execute, данные без проблем записываются.

Alexp
Devart Team
Сообщения: 349
Зарегистрирован: Пн 27 дек 2010 10:34

Re: UNIDAC и SQLite

Сообщение Alexp » Чт 06 ноя 2014 10:33

Добрый день,

Мы не можем воспроизвести проблему. Изменения корректно вставляются в БД. Ниже приведено консольное приложение демонстрирующее это поведение (использовался UniDAC 5.5.12)

Код: Выделить всё

#include <vcl.h>
#pragma hdrstop

#include <tchar.h>
#include <iostream.h>
#include <Uni.hpp>
#include <SQLiteUniProvider.hpp>
#pragma link "SQLiteUniProvider"
//---------------------------------------------------------------------------

#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
	TUniConnection *UniConnection = new TUniConnection(NULL);
	try
	{
		UniConnection->ConnectString = "ProviderName=SQLite;Data Source=:memory:;LoginPrompt=False";
		UniConnection->Connect();
		UniConnection->ExecSQL("CREATE TABLE TEST(NAME VARCHAR2(10))");
		UniConnection->ExecSQL("INSERT INTO TEST VALUES('test')");
		TUniQuery *UniQuery = new TUniQuery(NULL);
		try
		{
			UniQuery->Connection = UniConnection;
			UniQuery->CachedUpdates = True;
			UniQuery->SQL->Text = "SELECT * FROM TEST";
			UniConnection->StartTransaction();
			UniQuery->Open();
			UniQuery->Edit();
			UniQuery->FieldByName("name")->AsString = "привет";
			UniQuery->Post();
			UniQuery->ApplyUpdates();
			UniConnection->Commit();
			UniQuery->Close();
			UniQuery->Open();
			MessageBox(NULL, UniQuery->FieldByName("name")->AsString.c_str(), NULL, NULL);
		}
		__finally
		{
			UniQuery->Free();
		}
	}
	__finally
	{
		UniConnection->Free();
	}
	return 0;
}

nail
Сообщения: 4
Зарегистрирован: Чт 06 ноя 2014 07:15

Re: UNIDAC и SQLite

Сообщение nail » Чт 06 ноя 2014 10:55

У меня unidac 4.1.4. Может проблема в нем?

Alexp
Devart Team
Сообщения: 349
Зарегистрирован: Пн 27 дек 2010 10:34

Re: UNIDAC и SQLite

Сообщение Alexp » Пт 07 ноя 2014 06:39

Приведенный выше код корректно работает (вставляет данные) как на последней версии UniDAC так и на указанной Вами версии. Пожалуйста выполните приведенный код, и если ошибка не повториться - измените код так, чтобы ошибка повторялась, и пришлите его нам.

nail
Сообщения: 4
Зарегистрирован: Чт 06 ноя 2014 07:15

Re: UNIDAC и SQLite

Сообщение nail » Пт 07 ноя 2014 08:36

Приведенный вами код вообще не работает на 4.1.4. Некоторый синтаксис не поддерживается.
Установил последнюю версию компоненты - все заработало идеально. Спасибо.

Alexp
Devart Team
Сообщения: 349
Зарегистрирован: Пн 27 дек 2010 10:34

Re: UNIDAC и SQLite

Сообщение Alexp » Пт 07 ноя 2014 13:20

Пожалуйста. Если возникнут новые вопросы, пожалуйста, обращайтесь.

P.S. в Версии 4.1.4 не поддерживается ConnectString и ExecSQL с таким набором параметров.

Закрыто