Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];

Вниз

не сохраняются данные   Найти похожие ветки 

 
bambry   (2004-12-06 00:08) [0]

У меня база данных interbase,архитектура клиент-сервер.При выполнении в клиентском приложении метода applyupdate на сервере данные не сохраняются.Подскажите,что я не так делаю или недоделываю.


 
GanibalLector ©   (2004-12-06 01:54) [1]

IbTransaction.commit ?


 
bambry   (2004-12-06 19:12) [2]

а без транзакций никак?


 
Zacho ©   (2004-12-06 19:27) [3]

Никак. Вообще. Любой запрос работает только в контексте транзакции.
Правда, некоторые компоненты (например, BDE) могут сами стартовать/завершать транзакции.
Читать учебники и http://www.ibase.ru


 
bambry   (2004-12-06 21:20) [4]

Смотри,я на сервере пишу
ibtransaction.starttransaction;
try
ibquery.post;
except
ibtransaction.Rollback;
end;
ibtransaction.Commit;
end;
потом вызываю эту процедуру на клиенте ,и при запуске выдаётся сообщение transaction is active
Чего я напутал?


 
Zacho ©   (2004-12-06 21:47) [5]

Как это ты этот код "пишешь на сервере", а вызываешь на клиенте ? Или у тебя 3-х звенка и ещё и сервер приложений есть ?

А такое сообщене об ошибке означает, что в момент StartTransaction транзакция уже была стартована. Т.е. ты или где-то до этого явно стартовал транзакцию и не завершил, или транзакция была запущена неявно, компонентами IBX. Лично я всегда использую только явное управление транзакциями, т.ч. как в IBX с неявным запуском транзакций сказать не могу, просто не помню. Читай документацию. И ещё раз настоятельно советую прочитать статьи на http://www.ibase.ru/develop.htm , кстати, там была статья и о транзакциях в IBX.

И ещё:
except
ibtransaction.Rollback;
end;

- лишнее, т.к. каждая SQL-команда атомарна.
И ещё один совет - лучше используй TIBDataSet, а не TIBQuery, потенциальных проблем меньше.


 
jack128 ©   (2004-12-06 22:02) [6]

Zacho ©   (06.12.04 21:47) [5]
except
ibtransaction.Rollback;
end;

- лишнее, т.к. каждая SQL-команда атомарна.


Хе, причем тут атомарность sql-команд, при нынешнем коде у человека банально "Transaction is not active" будет..


 
bambry   (2004-12-06 22:54) [7]

Почему тогда выдаётся transaction active?


 
jack128 ©   (2004-12-06 22:59) [8]

bambry   (06.12.04 22:54) [7]
Нет, я глючу "Transaction is not active" будет если у тя запрос ошибку выдаст.

А твоя ошибка не из-за приведенного кода.. Обычно можно писать так:

f := not IBTransaction.InTransaction;
if f then
 IBTransaction.StartTransaction;
try
 IBQuery.Post;
finally
 if f then
   IBTransaction.Commit;
end;


 
Zacho ©   (2004-12-06 23:22) [9]

jack128 ©   (06.12.04 22:02) [6]
Хе, причем тут атомарность sql-команд,


Ни причём, просто к слову пришлось, что Rollback в данном случае лишний.

bambry   (06.12.04 22:54) [7]
Я тебе уже объяснил - потому что транзакция уже активна, а ты пытаешься запустить её ещё раз. Впрочем, jack128 ©   (06.12.04 22:59) [8] уже дал тебе возможное решение.


 
GanibalLector ©   (2004-12-07 00:47) [10]

скорее всего у тебя ТIbTransaction.Active=true. Убери и все сразу заработает.


 
ksa2002   (2004-12-07 07:07) [11]

Всё проще ... посмототри у себя установки  IbTransaction
AvtostopAction и  DefaultAction

AvtostopAction - предназначена для автоматического старта и завершение транзакций . То что тебе походу  и надо .


 
bambry   (2004-12-18 20:16) [12]

Почему когда я на сервере пишу query.post,на клиенте мне пишут,что приложение не может выполняться при закрытом наборе данных,хотя query.active=true?


 
jack128 ©   (2004-12-19 01:52) [13]

bambry   (18.12.04 20:16) [12]
Почему когда я на сервере пишу query.post,


Ты так и нет ответил на вопрос Zacho [5]


 
bambry   (2004-12-20 19:43) [14]

отвечаю...
да, у меня трехзвенка(MIDAS)


 
bambry   (2005-01-07 17:06) [15]

помогите,пожалуйста


 
Erik1 ©   (2005-01-07 17:13) [16]

У тебя очень тяжелый случай, сначала надо сохранять на AppServer. Но разные компонеты по разному реализуют интерфейс IProvider. В результате очень небрежной реализвции, может вобще ничего неработать. Коректно работает только BDE. Проверь когда у тебя приходит команда на сервер?


 
kaif ©   (2005-01-07 17:15) [17]

вместо
ibtransaction.starttransaction;

пиши всегда

if not ibtransaction.InTransaction then
  ibtransaction.starttransaction;

А твоя транзакция сама активизируется, когда ты открываешь запрос. Так как ты используешь метод Post, надо полагать, что у тебя был редактируемый набор, который до того активизировался методом Open. Этот метод и активизировал транзакцию (IBQuery1.Active := True)
Кстати, мето commit закроет открытый запрос и придется его заново активизировать.
Метод CommitRetaining оставит запрос открытым. Многие возражают против метода  Transaction.CommitRetaining, но я лично нахожу эти возражения снованными на предрассудках, а не на практических экспериментах.


 
sniknik ©   (2005-01-07 19:56) [18]

> Коректно работает только BDE
забожись.

пробовал трехзвенку для IB на компонентах DBExpress и ADO, все отлично работает, корректно.


 
bambry   (2005-01-28 23:00) [19]

люди, ничего не получается, а казалось бы все элементарно...
3-ёх звенка: с сервера на клиент все данные поступают, реализуется хранимая процедура, но на клиенте выполняю applyupdates, а  сервер никак не реагирует (данные не сохраняются), кто-нибудь может четко написать, что, где и как надо делать?Если нетрудно оставьте аську,чтобы можно было проконсультироваться в режиме реального времени


 
bambry   (2005-01-28 23:00) [20]

Удалено модератором
Примечание: дубль


 
sniknik ©   (2005-01-29 00:06) [21]

> реализуется хранимая процедура
а вот с этого места поподробнее... и ее результат ты хочеш править?

> кто-нибудь может четко написать, что, где и как надо делать?
конечно, ктото может. (книги же ктото пишет, только книги под одного не пишут... за редким исключением)


 
bambry   (2005-01-29 12:08) [22]

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


 
sniknik ©   (2005-01-29 21:54) [23]

результат работы процедуры может и не быть данными на сервере, а просто какими нибуть случайными (к примеру) значениями, или сборкой из разных таблиц даже без уточнений что откуда. как их править?

но дело хозяйское, не хочеш так не хочеш (в смысле, не отвечаеш на уточняющие вопросы это = "не хочу решения, хочу поплакатся на тяжолую долю программиста")


 
bambry   (2005-01-29 23:44) [24]

Я слишком нагородил свой вопрос,забудьте про процедуру.Короче говоря вся проблема в том,что данные не сохраняются на сервере,метод ApplyUpdates не помогает.И чего делать?



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

Форум: "Базы";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.041 c
1-1108440520
HF-Trade
2005-02-15 07:08
2005.02.27
Как в переменной задать перечисляемый тип компонентам


1-1107971109
Checist [root]
2005-02-09 20:45
2005.02.27
Замарочки с WebBrowser


6-1103212119
BVV
2004-12-16 18:48
2005.02.27
формирование заголовков ТСР пакетов


1-1108394254
Garry
2005-02-14 18:17
2005.02.27
Как работать в Дельфи с HEX кодами....


3-1106649804
MakedoneZ
2005-01-25 13:43
2005.02.27
Вопрос про DBGrid и Table.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский