Конференция "Базы" » Delphi6 Oracle DbExpress Помогите пожалуйста закончить транзакцию
 
  • KA3AK © (25.10.17 14:12) [0]
    Имеется следующая конструкция
    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.
    Момогите если можно пожалуйста.
  • rrrrrrr © (25.10.17 14:25) [1]
    транзакции здесь не при делах и ничем не помогут.
    тем более что она там и так уже открывается, даже если не стартована явно.
  • KA3AK © (25.10.17 14:43) [2]
    На практике выглядит так.
    Всё вроде работает.
    Даже в DbGrid вывожу данные после добавления.
    Они отражаются.
    Но смотрю напрямую после на сервере, их там нет.
    Как бы отмена или RollBack выполняется почему то.
  • rrrrrrr © (25.10.17 14:49) [3]
    окей. еще раз попробую.

    транзакция (неявная) там уже есть.
    и добавление явной транзакции через StartTransaction ничего в этой ситуации не изменит.
  • KA3AK © (25.10.17 14:51) [4]
    Есть же ещё метод Commit в SqlConnection.
    Может как то по другому всё надо делать.
  • rrrrrrr © (25.10.17 15:01) [5]
    твой коммит был бы выполнен в любом случае, независимо от того, сам ты его вызываешь или не вызываешь сам.

    но он не выполняется, так как генерируется исключение, после которого делается роллбэк.

    а почему генерируется исключение - ты и сам видишь в сообщении
  • KA3AK © (25.10.17 15:31) [6]
    Чего то не понял.
    Я не вижу почему делается ролбэк.
  • rrrrrrr © (25.10.17 15:52) [7]
    не видишь то, что сам же и написал.
    бывает.
    наверное ты робот.
  • KA3AK © (25.10.17 15:56) [8]
    Ну объясни пожалуйста.
    Я действительно не понимаю.
    Где, когда и почему делается этот ролбэк
  • rrrrrrr © (25.10.17 15:59) [9]
    для лайв запросов в оракле бывает важен регистр имени таблицы (зависит от движка доступа).
    универсальный вариант - имя таблицы в апперкейсе
  • KA3AK © (25.10.17 16:05) [10]
    Я же по сути этот запрос
    dmodule.SQLClientDataSet1.CommandText := 'Select * from bookkeep.reestr_payment'
    dmodule.SQLClientDataSet1.Active := true;
    в DbGrid показываю и он отражается.
    Написать что ли всё большими буквами
    'Select * from BOOKKEEP.REESTR_PAYMENT'  ???
  • KA3AK © (27.10.17 15:43) [11]
    Понял, что применение этих методов не целесообразно
    как то не корректно всё работает.
    Пришлось самому копать.
    лучше это
       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);
 
Конференция "Базы" » Delphi6 Oracle DbExpress Помогите пожалуйста закончить транзакцию
Есть новые Нет новых   [134427   +26][b:0][p:0]