-
Имеется следующая конструкция
dmodule.SQLClientDataSet1.CommandText := 'Select * from bookkeep.reestr_payment'
dmodule.SQLClientDataSet1.Active := true;
dmodule.SQLClientDataSet1.Append;
dmodule.SQLClientDataSet1.FieldByName('LS').Value := a_csv;
dmodule.SQLClientDataSet1.Post;
а после выполнения
dmodule.SQLClientDataSet1.ApplyUpdates(10);
выскакиваеи сообщение "Таблица или представление не существует"
Подумал, что возможно нужно сделать так:
dmodule.SQLConnection1.StartTransaction(TransDesc: TTransactionDesc);
но не знаю как описать переменную TransDesc.
Момогите если можно пожалуйста.
-
транзакции здесь не при делах и ничем не помогут.
тем более что она там и так уже открывается, даже если не стартована явно.
-
На практике выглядит так.
Всё вроде работает.
Даже в DbGrid вывожу данные после добавления.
Они отражаются.
Но смотрю напрямую после на сервере, их там нет.
Как бы отмена или RollBack выполняется почему то.
-
окей. еще раз попробую.
транзакция (неявная) там уже есть.
и добавление явной транзакции через StartTransaction ничего в этой ситуации не изменит.
-
Есть же ещё метод Commit в SqlConnection.
Может как то по другому всё надо делать.
-
твой коммит был бы выполнен в любом случае, независимо от того, сам ты его вызываешь или не вызываешь сам.
но он не выполняется, так как генерируется исключение, после которого делается роллбэк.
а почему генерируется исключение - ты и сам видишь в сообщении
-
Чего то не понял.
Я не вижу почему делается ролбэк.
-
не видишь то, что сам же и написал.
бывает.
наверное ты робот.
-
Ну объясни пожалуйста.
Я действительно не понимаю.
Где, когда и почему делается этот ролбэк
-
для лайв запросов в оракле бывает важен регистр имени таблицы (зависит от движка доступа).
универсальный вариант - имя таблицы в апперкейсе
-
Я же по сути этот запрос
dmodule.SQLClientDataSet1.CommandText := 'Select * from bookkeep.reestr_payment'
dmodule.SQLClientDataSet1.Active := true;
в DbGrid показываю и он отражается.
Написать что ли всё большими буквами
'Select * from BOOKKEEP.REESTR_PAYMENT' ???
-
Понял, что применение этих методов не целесообразно
как то не корректно всё работает.
Пришлось самому копать.
лучше это
dmodule.SQLQuery1.SQL.Text :='Insert into Bookkeep.reestr_payment_tmp '+
'(ls, summa, fio, ul, dom, kv, city, dat, kod_pl) ' +
'values (....)';
а затем
dmodule.SQLQuery1.ExecSQL(true);