read_committed
rec_version
nowait
да, и данные через другой TSQLQuery сохраняются в БД (там используется только свойство SQL и выполняется ExecSQL). Вот пример кода, который не приводит к изменению данных в БД, а точнее данные в БД не вставляются (увеличивается только значение у Sequence):
- Код: Выделить всё
sqlQuery1.Append;
sqlQuery1.FieldByName('T_SHORT_NAME').AsString := 'короткое наименование';
sqlQuery1.Post;
SQLTransaction1.CommitRetaining;
Вот запрос из InsertSQL:
- Код: Выделить всё
INSERT INTO TEST
(
T_ID,
T_SHORT_NAME
)
VALUES
(
GEN_ID(GEN_TEST_ID,1),
:T_SHORT_NAME
)
Если к sqlQuery1 прикрутить грид, то вроде все хорошо работает, но после переоткрытия запроса добавленная строка (ее видно в гриде) пропадает, т.е.:
- Код: Выделить всё
sqlQuery1.Append;
sqlQuery1.FieldByName('T_SHORT_NAME').AsString := 'короткое наименование';
sqlQuery1.Post;
SQLTransaction1.CommitRetaining;
//видим, что строка добавилась
//в параллельной транзакции мы эту строку не видим
//т.е. она есть только в sqlQuery1
sqlQuery1.Close;
sqlQuery1.Open;
//видим, что строка пропала
это так и должно быть? TSQLQuery еще слишком сырой и не умеет работать с InsertSQL и UpdateSQL? или есть какая-то хитрость?
Добавлено спустя 25 минут 45 секунд:
а если переписать InsertSQL на
- Код: Выделить всё
INSERT INTO TEST
(
T_ID,
T_SHORT_NAME
)
VALUES
(
:T_ID,
:T_SHORT_NAME
)
то все то же самое, только генератор не увеличивается на 1