Здравствуйте. Проблема в следующем.
База на sqlite.
На форму кидаю uniconnection1, SQLiteUniProvider1, UniQuery1, Button1
Далее код на кнопку:
UniQuery1->Close();
UniConnection1->StartTransaction();
UniQuery1->Open();
UniQuery1->Edit();
UniQuery1->FieldByName("name")->AsString="привет";
UniQuery1->Post();
UniQuery1->ApplyUpdates();
UniConnection1->Commit();
Данные меняются, но видимо локально. В базу ничего не записывается. В чем может быть дело? Перечитал все что можно.
UNIDAC и SQLite
Re: UNIDAC и SQLite
В добавок. В UniQuery1 у меня стоит обычный "select * from mytable". Если на форму поставить UniSql, залепить в него запрос на update и сделать execute, данные без проблем записываются.
Re: UNIDAC и SQLite
Добрый день,
Мы не можем воспроизвести проблему. Изменения корректно вставляются в БД. Ниже приведено консольное приложение демонстрирующее это поведение (использовался UniDAC 5.5.12)
Мы не можем воспроизвести проблему. Изменения корректно вставляются в БД. Ниже приведено консольное приложение демонстрирующее это поведение (использовался 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;
}
Re: UNIDAC и SQLite
У меня unidac 4.1.4. Может проблема в нем?
Re: UNIDAC и SQLite
Приведенный выше код корректно работает (вставляет данные) как на последней версии UniDAC так и на указанной Вами версии. Пожалуйста выполните приведенный код, и если ошибка не повториться - измените код так, чтобы ошибка повторялась, и пришлите его нам.
Re: UNIDAC и SQLite
Приведенный вами код вообще не работает на 4.1.4. Некоторый синтаксис не поддерживается.
Установил последнюю версию компоненты - все заработало идеально. Спасибо.
Установил последнюю версию компоненты - все заработало идеально. Спасибо.
Re: UNIDAC и SQLite
Пожалуйста. Если возникнут новые вопросы, пожалуйста, обращайтесь.
P.S. в Версии 4.1.4 не поддерживается ConnectString и ExecSQL с таким набором параметров.
P.S. в Версии 4.1.4 не поддерживается ConnectString и ExecSQL с таким набором параметров.