Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.16;
Скачать: CL | DM;

Вниз

Delphi+ADO+MSSQL   Найти похожие ветки 

 
Азазелло   (2002-08-23 09:11) [0]

Стартую транзакцию, делаю ADODataSet.Append, зполняю, делаю Post (постится нормально). Потом решаю откатить транзакцию, на что ADO выдает мне целую серию ошибок :
1) Источник данных изменил или удалил значение ключа для данной строки в хранилище данных;
2) Дескриптор строки указывал на удаленную строку или строку, помеченную на удаление;
3) Источник данных изменил или удалил значение ключа для данной строки в хранилище данных, теперь удалена и локальная строка.

Как обойти эти ошибки? Может я что не то делаю.. Если можно, киньте к своему ответу ещё какой-нибудь исходник на эту тему. Спасибо.


 
AlexSam   (2002-08-23 10:04) [1]

Что я посоветую, если ты серьезно программируешь - не используй Table, а модифицируй данные при помощи запросов SQL в Query м XP.


 
MOA   (2002-08-23 11:40) [2]

Не может ли быть так, что в Ваших таблицах есть поля, заполняющиеся автоматически сервером (Identity, DEFAULT), о которых Дельфи "не знает"?
Удачи!


 
andy_prokofiev ©   (2002-08-23 11:44) [3]

А есть ли уникальный ключ у таблицы?


 
Азазелло   (2002-08-23 12:31) [4]

У таблицы есть primary key.


 
Юрий Жуков ©   (2002-08-23 14:02) [5]

Прочитай стначала здесь:
http://www.delphikingdom.com/helloworld/ado01.htm
http://www.delphikingdom.com/helloworld/ado02.htm
http://www.delphikingdom.com/helloworld/ado03.htm

Для понимания работы с ADO я бы еще советовал ознокомится
с соответсвующим разделом книги Марако Кэнту ( http://www.piter.com/book_about.phtml?d=978531800403&web_ok=yes)
Вопросы отпадут сами собой.


 
Азазелло   (2002-08-23 14:13) [6]

Спасибо за линки, но с ними я уже отлично знаком, поскольку достаточное время работал через ADO c MS Access. Таких ошибок при работе с Access у меня не возникало, поэтому и был задан вопрос касательно конкрентно _MSSQL_.


 
Юрий Жуков ©   (2002-08-23 17:21) [7]

Итак, у тебя патчи на D5 стоят? я надеюсь ты в курсе что без них ADO в дельфи практически неработоспособно?

Данных конечно маловато, но вот некоторые рекмендации:
1.Если есть триггеры на таблице, то первой строчкой пропиши
Set NOCOUNT ON

2. Посмотри как ты обновляешь запись в TADODATASet. Поставь обновление только по первичному ключу.
Я надеюсь ты не изменяшь значение первичного ключа?

Посмотри в Profiler что происходит - если ты не только читал, но понял смысл статей на коровесте, то ты поймешь что происходит.


 
Азазелло   (2002-08-25 12:43) [8]

Все обновления (за исключением последнего, поскольку в последней версии ADO нет транзакций : ( ) - стоят. До триггеров дело пока не дошло, да и про nocount я помню.

В dtsLanguage.Properties["Update Criteria"].Value:=0, то есть adCriteriaKey (кстати, интересно, почему он имя константы не жрет)

Стартую транзакцию. Делаю Append (само-собой pk не пишется, он у меня Identity) и Post. Проходит на ура. Пытаюсь откатить - те же ошибки, что в моем первом письме.

В Profiler :
set implicit_transactions off
------
exec sp_executesql N"INSERT INTO "SpbReg".."R_Language" ("Language") VALUES (@P1)", N"@P1 nvarchar(7)", N"Русский"
------
SELECT @@IDENTITY
------
IF @@TRANCOUNT > 0 ROLLBACK TRAN
------
set implicit_transactions off

С уважением, Игорь.


 
Юрий Жуков ©   (2002-08-25 13:47) [9]

> Все обновления (за исключением последнего, поскольку в >последней версии ADO нет транзакций

Хм, я ничего такого не слышал. Это ты про ADO говоришь? или про Delphi? ссылку плиз.

> почему он имя константы не жрет
Думаю тебе нужно прописать
uses ADOInt;

А как ты откатываешь транзакцию?


 
Азазелло   (2002-08-25 14:32) [10]

я говорю про ADO. Ссылку кину завтра, когда друг на работу выйдет, он на этом уже накололся. Правда они пишут на MS Access+MSSQL.

ADOC - TADOConnection;
стартую :
ADOC.BeginTrans;

откатываю:
ADOC.RollBackTrans;

Причем, если вместо TADODataSet использовать TADOTable, то все замечательно откатывается и никаких исключений при этом не возникает.


С уважением, Игорь.


 
Азазелло   (2002-08-25 15:03) [11]

Пардон, что я так долго "мозги компостировал". RollBack проходит нормально, эти эксепшены вываливаются после RollBack-а на dtsLanguage.Refresh. Который, по идее, должен просто перечитать датасет. Убрал Refresh, задал
dtsLanguage.Properties["Resync Command"].Value:="select IdLanguage, Language from R_Language Where IdLanguage = ?";
делаю dtsLanguage.Resync - в гриде ноль эмоций, никакого обновления, несмотря на то, что записи уже нет.

С уважением, Игорь.


 
Юрий Жуков ©   (2002-08-26 09:38) [12]

М-да, похоже действительно мозги компосируешь. :)
Заметь, что в том логе от профилера, что ты указал никаких select. А они по идее должны быть.

Вот как я делаю refresh текущей записи
ADODataSet1.UpdateCursorPos;
ADODataSet1.Recordset.Resync(adAffectCurrent, adResyncAllValues);
ADODataSet1.Resync([]);

З.Ы. И можно подробнее о друге и проблемах. А то у нас ген директоро тоже хочет писать на Access + MSSQL :(((


 
Азазелло   (2002-08-26 18:42) [13]

Саня, дай пожалуйста линк на то, что появилось новое ADO, в котором нет нранзакций...
Vishnevetsky (6:31 PM) :
Хаха, линк... Нету у меня линка, я это то ли в книжке читал, то ли слышал от более компетентных товарищей.


 
Юрий Жуков ©   (2002-08-27 09:10) [14]

ссылки я тебе уже вроде дал
Вот группа новостей. Там даже разаработчики иногда отвечают, но давно это было.
news://newsgroups.borland.com/borland.public.delphi.database.ado

Да еще, поставь себе TbetterADODataSet - снимет многие проблемы.
Еще можно в его исходниках поковыряться.


 
Юрий Жуков ©   (2002-08-27 09:32) [15]

P.S. Сдается мне что твой Саня чего-то напутал. :) или это не про MSSQL ...


 
Азазелло   (2002-08-27 10:07) [16]

Напутать он не мог, поскольку не был на той конференции.. Там был его начальник. Работают они на Access+MSSQL используя транзакционность на клиенте, поэтому эта новость их тоже задела. Я разговаривал с ним по телефону, так вот на словах представителями компании Microsoft, которая и устраивала данный семинар, было сказано, что уже есть новая версия ADO, которая, применительно к MSSQL не поддерживает транзакции. Вот, собственно и всё. Кто прав, а кто - нет, рассудит время : )

TbetterADODataSet скачал, многое, что было сокрыто - раскрыто.. : ))

Теперь, если можно, поделись пожалуйста секретами реализации клиент-серверной технологии посредством ADO.

Так получилось, что договор был заключен на разработку автоматизированного комплекса на основе IB. Первый этап был выполнен. Потом заказчик заартачился и пересмотрел свои взгляды на жизнь, поскольку MSSQL с достаточным количеством лицензий у него уже был куплен.. Вобщем, приходится всё нафиг коцать : (
С ADO в клиент-сервере я раньше никогда не работал, цеплял через него только локальные Access-овские справочники.

Интересует: тип курсора, тип блокировки,реализация обновлений, отлов ошибок (если ловятся конкретные ошибки). Если удаленная работа посредством Internet, то какова порционность передачи..

С уважением, Игорь.


 
Юрий Жуков ©   (2002-08-27 11:06) [17]

>ADO, которая, применительно к MSSQL не поддерживает транзакции

Ну я просто в растерянности. :)
> поделись пожалуйста секретами реализации клиент-серверной >технологии посредством ADO.

Тебе однозначно нужно почитать книгу Марко Кэнту. Там ответы на твои вопросы. Тока для версии 6.

А насчет IB сочуствую. Недавно игрался с компонентами FIBSPlus - очень понравилось.


 
Азазелло   (2002-08-27 13:29) [18]


Спасибо.
ЗЫ: сейчас наши Питерские ребята сделали из OpenSource IB 6.01 конфетку, под названием Yaffil. Прикольная штука, мы на ней живем(пока ещё официального палтного релиза нет).. почитать можешь на http://www.interbase-world.com


 
Юрий Жуков ©   (2002-08-27 14:45) [19]

Знаю, но увы, у меня сейчас нет проектов на IB.
Но насколько я понял Yaffil не является Open Source, и основан он скорее на FireBird



Страницы: 1 вся ветка

Текущий архив: 2002.09.16;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.015 c
1-50792
Ekaterina
2002-09-03 10:10
2002.09.16
Frame в dll


1-50783
SergeyKnyazev
2002-09-03 12:35
2002.09.16
Нужно вывести рисунок на принтер


1-50812
Konrads
2002-09-03 20:52
2002.09.16
%SystemRoot% %Temp%


6-50905
sm0k3
2002-07-09 13:10
2002.09.16
Delphi+Web


3-50593
Lego
2002-08-23 07:22
2002.09.16
Обнуление autoincrement поля... как ?