Форум: "Базы";
Текущий архив: 2002.09.16;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.011 c