Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
3-50658
Азазелло
2002-08-23 09:11
2002.09.16
Delphi+ADO+MSSQL


14-50916
Мася
2002-08-21 09:11
2002.09.16
Автозагрузка


4-51014
Alexcool
2002-07-24 12:32
2002.09.16
stdout?


1-50731
Шурик Ш
2002-09-05 16:37
2002.09.16
Иконки TreeView


4-51041
Igor_Z
2002-07-21 22:53
2002.09.16
Как отключить запуск приложения при двойном клике по иконке ???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский