Конференция "Базы" » Транзакции в Access [D7, Access]
 
  • zsv © (11.06.10 17:44) [0]
    День добрый помогите с проблемкой.
    использую базу данных Access2000, подкл через ADO
    одной програмкой пишу в базу
    frmMain.con1.BeginTrans;
    q.SQL.Text:='insert into MyTable (IdUser,NameUser) values(1,'Вася');
    q.ExecSQL;
    frmMain.con1.CommitTrans;

    второй програмкой тут же пытаюсь считать эту строку, но запрос пустой.
    погонял считывание в цикле. показало что данные видны второй программкой спустя 2 сек примерно.
    А вот если не использовать явные транзакции - то видны мгновенно. В чем тут дело?
    frmMain.con1.IsolationLevel:=ilCursorStability в обоих программках.
    ЗЫ. транзакции использовать обязательно ,тк необходимо делать несколько вставок в разные табл
    Спасибо
  • sniknik © (12.06.10 10:37) [1]
    > показало что данные видны второй программкой спустя 2 сек примерно.
    в чем транзакции скорее всего не виноваты, поведение похоже на то когда не используют общий ADOConnection а прописывают строки соединений в компонентах, что приводит к созданию нескольких com объектов, и таймаутам на синхронизацию данных между ними.

    > frmMain.con1.BeginTrans;
    > использовать явные транзакции
    это не явные, это клиентские... во что их транслирует, и как, используемый провайдер только ему одному известно (авторы уже давно это по-забывали), делай их запросами, тогда не будет зависеть от непонятных интерпретаций (и сразу будет видно если сервер не поддерживает, то и команд не будет, и не будешь думать на всякие эмуляции, что это полноценная транзакция. да, это не про аксесс это "вообще").

    > q.ExecSQL;
    ну и ... - ADOCommand, ADODataset .

  • > sniknik ©   (12.06.10 10:37) [1]

    а как же

    > zsv ©   (11.06.10 17:44)  


    > второй програмкой тут же пытаюсь считать эту строку, но
    > запрос пустой.


    ?
  • это я о
    > не используют общий ADOConnection

    ...
    общего коннекшина и не м.б. в принципе
  • sniknik © (12.06.10 18:00) [4]
    > общего коннекшина и не м.б. в принципе
    в одной программе. т.е. frmMain.con1 здесь один, q другой.
  • zsv © (14.06.10 18:06) [5]
    >sniknik ©

    q:=TADOQuery.Create(nil);
    q.Connection:=frmMain.con1;

    >ADOCommand, ADODataset .
    не помогают - все также не видит записи...

    причем более долгие наблюдения показали, что 2с - это не факт, может быть и 4 сек а может и менее одной секунды...непредсказуемо.
    я в ступоре...
  • sniknik © (14.06.10 19:17) [6]
    > не помогают - все также не видит записи...
    это не для помощи в твоих проблемах, это правильные компоненты для использования.
    помощь была в первом-втором абзаце первого поста.
 
Конференция "Базы" » Транзакции в Access [D7, Access]
Есть новые Нет новых   [134433   +22][b:0][p:0]