|
|
|
Transaction and TableUpdate
|
|||
|---|---|---|---|
|
#18+
решил вот попробовать транзакции: BEGIN TRANSACTION INSERT INTO T1 UPDATE T2 DELETE FROM T3 END TRANSACTION все ОК, но вижу в хелпе варианты с буфферизацией - транзакцией и ТаблАпдэйтом - так сказать все в куче... Подумалось мне - применять все вместе нужно только для того, чтобы отследить ошибки, вероятно возникшие при транзакции? так как в методе BEGIN TRANSACTION INSERT INTO T1 UPDATE T2 DELETE FROM T3 END TRANSACTION если где-то внутри возникнет ошибка - транзакция просто не пройдет (да,, для того, чтобы при ошибке откатить транзакцию - нужно придумать механизм а-ля Если любая ошибка == немедленный роллбэк) Верно я понимаю??? то есть - если просто транзакция без буфферизаций - в случае неудачи - изменения не пройдут а в случае Транзакции и и ТаблАпдэйта - можно не только откатить изменения - но и проанализировать "а почему...?" Реально мне например анализ ошибок не нужен - то есть я могу не заморачиваться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2006, 09:40 |
|
||
|
Transaction and TableUpdate
|
|||
|---|---|---|---|
|
#18+
Неверно понимаешь. Транзакция и буферизация - это два РАЗНЫХ процесса. У них РАЗНОЕ назначение. Отловить ошибку можно значительно проще, через TRY...CATCH. Или ON ERROR в младших версиях. То, что это можно сделать и при буферизации - это следствие, а не причина использования буферизации. Что такое буферизация и транзакция читай во вложенном файле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2006, 10:35 |
|
||
|
Transaction and TableUpdate
|
|||
|---|---|---|---|
|
#18+
ВладимирМНеверно понимаешь. Транзакция и буферизация - это два РАЗНЫХ процесса. У них РАЗНОЕ назначение. Отловить ошибку можно значительно проще, через TRY...CATCH. Или ON ERROR в младших версиях. То, что это можно сделать и при буферизации - это следствие, а не причина использования буферизации. Что такое буферизация и транзакция читай во вложенном файле. Владимир! именно Ваши посты натолкнули меня на сей пост :-) Я их уже чилат.. просто подумал есть ли смысл делать 1 буфферизацию 2 транзакци. 3 сброс данных внутри транзакции через TableUpdate именно такой код я использую (взял с данного форума и это Ваш код) и он прекрасно работает, за что Вам спасибо огромное... Но вот подумал - ведь достаточно и BEGIN TRANSACTION INSERT INTO T1 UPDATE T2 DELETE FROM T3 END TRANSACTION пробовал "силой" валить транзакцию (например 3-ю строку намеренно писал с ошибкой) - получил полный откат изменений и все.. то есть что мне надо? либо изменить одновременно данные в нескольких таблицах, либо, в случае ошибки откат всего Этого таким простым кодом и добился... потому и возник сей вопрос.. а надо ли усложнять свой код буфферизацией, если он и в таком простом виде работает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2006, 10:50 |
|
||
|
Transaction and TableUpdate
|
|||
|---|---|---|---|
|
#18+
Ради интереса можете взглянуть на простой пример в котором даны два варианта транзакций... Good luck! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2006, 10:56 |
|
||
|
Transaction and TableUpdate
|
|||
|---|---|---|---|
|
#18+
Student//// Владимир! именно Ваши посты натолкнули меня на сей пост :-) Я их уже чилат.. просто подумал есть ли смысл делать 1 буфферизацию 2 транзакци. 3 сброс данных внутри транзакции через TableUpdate Ты по прежнему не понимаешь ЗАЧЕМ нужна буферизация. Если подходить чисто формально, то в коде сохранения изменений буферизация - это лишний шаг. Все дело в том, что буферизация нужна не внутри транзакции, а снаружи . Именно для того, чтобы пользователь мог откатить свои изменения сделанные вручную и не мешать процессу модификации других пользователей. Если же у тебя нет шага внесения изменений пользователем и процесс сохранения - это некий автоматический процесс (например, внутри тела триггера), то буферизация - это лишнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2006, 11:21 |
|
||
|
Transaction and TableUpdate
|
|||
|---|---|---|---|
|
#18+
ВладимирМ Если же у тебя нет шага внесения изменений пользователем и процесс сохранения - это некий автоматический процесс (например, внутри тела триггера), то буферизация - это лишнее. не совсем так.. пользователь вручную меняет данные... нажимает на кнопку сохранить.. под которой написано: BEGIN TRANS UPDATE MyTable SET MyField = Thisform.TextBox1.Value...... ....... END TRANS и никакой буфферизации.. следовательно могу сделать поспешный вывод - "в такй методике буфферизация лишняя..." Да, я понимиаю - если другой пользователь изменил в то же время те же данные - то прав окажется конечно тот, кто последний сохранил - это меня устраивает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2006, 11:49 |
|
||
|
Transaction and TableUpdate
|
|||
|---|---|---|---|
|
#18+
Sergey ChРади интереса можете взглянуть на простой пример в котором даны два варианта транзакций... Good luck! Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. да Сергей тут мой метод практически совпадает с Вашим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2006, 11:52 |
|
||
|
Transaction and TableUpdate
|
|||
|---|---|---|---|
|
#18+
Student//// да Сергей тут мой метод практически совпадает с Вашим Там в самом низу второй пример, как раз то, о чем писал Владимир... Мое личное мнение - оба подхода вполне имеют право не жизнь... НО, учтите что у меня этот код работает в контейнере базы данных как ХП (хранимая процедура)... Good luck! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2006, 13:18 |
|
||
|
Transaction and TableUpdate
|
|||
|---|---|---|---|
|
#18+
Sergey Ch Student//// да Сергей тут мой метод практически совпадает с Вашим Там в самом низу второй пример, как раз то, о чем писал Владимир... Мое личное мнение - оба подхода вполне имеют право не жизнь... НО, учтите что у меня этот код работает в контейнере базы данных как ХП (хранимая процедура)... Good luck! в любом случае (проверено несколько раз) = если внутри транзакции в какой-либо, (не 1-й) строке ошибка - транзакция откатывает ВСЕ.... Было опасение, что например 1-2-3 таблицы изменятся, а 4-5- нет - что есть нарушение целостности... но опыт показал, что такого нету.. либо я не так тестил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2006, 13:28 |
|
||
|
Transaction and TableUpdate
|
|||
|---|---|---|---|
|
#18+
Sergey Ch Мое личное мнение - оба подхода вполне имеют право не жизнь... НО, учтите что у меня этот код работает в контейнере базы данных как ХП (хранимая процедура)... Good luck! Будьте добры выскажите свое мнение - если "всунуть" модификацию данный в ХП - значит ли это увеличение надежности? Ведь слышал я на данном форуме, что ХП из ДБС файла выполняется на клиенте, а не на сервере... иными словами что есть лучше 1 код модификации (разумеется внутри транзакции) непосредственно на форме 2 код модификации в контейнере базы данных как ХП ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2006, 08:57 |
|
||
|
Transaction and TableUpdate
|
|||
|---|---|---|---|
|
#18+
[quot Student////Будьте добры выскажите свое мнение - если "всунуть" модификацию данный в ХП - значит ли это увеличение надежности? Ведь слышал я на данном форуме, что ХП из ДБС файла выполняется на клиенте, а не на сервере... иными словами что есть лучше 1 код модификации (разумеется внутри транзакции) непосредственно на форме 2 код модификации в контейнере базы данных как ХП[/quot] 1. Присутствие кода в ХП не изменит надёжности, если код криво написан, даже если код написан одинаково хорошо, то он будет одинаково исполняться. 2. Весь код в формате Фокса выполняется на клиенте - это имеет свои минусы и плюсы 3. Идеологически правильно написать ХП по нескольким соображениям а) Твои ХП может использовать стороннее приложение, те уходим от зависимости от клиента б) Из файл-серверного (2-х звенного) приложения возможно построить 3-х звенку в) Бизнес логика хранится в контеёнере БД, а не раскидана по формам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2006, 09:33 |
|
||
|
Transaction and TableUpdate
|
|||
|---|---|---|---|
|
#18+
PaulWist 3. Идеологически правильно написать ХП по нескольким соображениям а) Твои ХП может использовать стороннее приложение, те уходим от зависимости от клиента б) Из файл-серверного (2-х звенного) приложения возможно построить 3-х звенку в) Бизнес логика хранится в контеёнере БД, а не раскидана по формам. пока что останавливает (не помню чье) утверждение на данном форуме "не перегружайте контейнер ДБС хранимками..." хотя, я бы написал одну ХП с параметрами имяТаблицы СКЛ_команда и было бы не всев одной ХП (в идеале) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2006, 10:34 |
|
||
|
Transaction and TableUpdate
|
|||
|---|---|---|---|
|
#18+
Student//// Будьте добры выскажите свое мнение - если "всунуть" модификацию данный в ХП - значит ли это увеличение надежности? Ведь слышал я на данном форуме, что ХП из ДБС файла выполняется на клиенте, а не на сервере... иными словами что есть лучше 1 код модификации (разумеется внутри транзакции) непосредственно на форме 2 код модификации в контейнере базы данных как ХП Если Вы прочитаете внимательно все то, что я привел - там используется маленькая хитрость, которая называется Web Services и очень надежный подход к разработке приложений - так как база данных FoxPro а это случае хранится на сервере и ХП выполняется на нем-же... Это сервер может быть весьма надежным, что резко повышает надежность всей системы - клиент прислал запрос в виде строки, сервер обработал и послал ответ опять-же в виде строки... У меня есть много приложений, работающих по подобному принципу - преимущество в том, что это чистое Клиент - Серверное приложение, причем работать с данными Ваши клиенты могут в любой точке земного шара и при желании все можно шифровать... К недостатком моего подхода можно отнести: - сравнительная дешевизна (то есть ниша, где зарплата программистов невысока) - много кода писать надо вручную (я пытался унифицировать этот процесс, приблизив по возможности к ADO.NET, но у меня не хватает времени и денег на это) - все сервисные службы, которые есть уже, например в MS SQL Server 2005 надо писать самому. В принципе ничего сложного для FoxPro, но опять-же время, за которое никто никогда не заплатит, а семью надо чем-то кормить... But anyway, good luck! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2006, 10:36 |
|
||
|
Transaction and TableUpdate
|
|||
|---|---|---|---|
|
#18+
Sergey Ch[Если Вы прочитаете внимательно все то, что я привел - там используется маленькая хитрость, которая называется Web Services Да я читаю Ваши статьи, но в силу того, что я все же еще учусь, но заказ уже есть... а до Web Services я еще "не дорос", то вот из-за чего возникают мои вопросы.... Увы, дабы постичь технолгию Web Services мне нужно какое-то время, но его как раз и нет , а писать проект уже надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2006, 11:24 |
|
||
|
Transaction and TableUpdate
|
|||
|---|---|---|---|
|
#18+
Hi Sergey! Тут есть тонкость - если кто-то попытается использовать подобную ХП не из фокса (а через ODBC или OLE DB) то будет весьма разочарован - уж не знаю почему, но даже в последнем провайдере не поддерживается структурная обработка ошибок, а заодно и макро :( А писать в ХП то что не может реально работать как ХП - как-то не очень хорошо... То что "вообще" стоит отделять код работы с данными от визуальных форм - это не вызывает сомнений :) Другое дело как это делать... Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2006, 02:22 |
|
||
|
Transaction and TableUpdate
|
|||
|---|---|---|---|
|
#18+
Igor Korolyov Hi Sergey! Тут есть тонкость - если кто-то попытается использовать подобную ХП не из фокса (а через ODBC или OLE DB) то будет весьма разочарован - уж не знаю почему, но даже в последнем провайдере не поддерживается структурная обработка ошибок, а заодно и макро :( А писать в ХП то что не может реально работать как ХП - как-то не очень хорошо... То что "вообще" стоит отделять код работы с данными от визуальных форм - это не вызывает сомнений :) Другое дело как это делать... Posted via ActualForum NNTP Server 1.3 ну Вы еще поделитесь примерчиком, если можно.. итак 3 варианта 1 ХП с параметрами Таблица - СКЛ команда 2 класс на форму 3 прямо под кнопками (хуже всего) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2006, 11:13 |
|
||
|
Transaction and TableUpdate
|
|||
|---|---|---|---|
|
#18+
Igor KorolyovТут есть тонкость - если кто-то попытается использовать подобную ХП не из фокса (а через ODBC или OLE DB) то будет весьма разочарован - уж не знаю почему, но даже в последнем провайдере не поддерживается структурная обработка ошибок, а заодно и макро :( А писать в ХП то что не может реально работать как ХП - как-то не очень хорошо... То что "вообще" стоит отделять код работы с данными от визуальных форм - это не вызывает сомнений :) Другое дело как это делать... В приведенном мной примере как раз подобная тонкость учтена - там как раз даны примеры для среды VFP и OLE DB Provider... Причем мой пример реально работает на WEB Site который ничего о FoxPro не знает Причем работает уже порядка 6 месяцев... Если нет доверия, то можно скачать готовый пример и попробовать он работает on-line... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2006, 12:26 |
|
||
|
Transaction and TableUpdate
|
|||
|---|---|---|---|
|
#18+
Hi Student! > 1 ХП с параметрами Таблица - СКЛ команда Бессмысленно. Если параметром передаётся сам текст SQL команды. то на кой вообще нужна эта процедура? Если уж делать слой доступа к данным в виде ХП, то делать это в идеологии CRUD - т.е. отдельные процедуры для добавления, изменения, удаления... А разнообразные "поля таблицы" тут передаются в виде множества параметров. Что же касается собственно фокса, то т.к. ХП всё равно исполняются не на сервере а на клиенте, то особого прока не видно даже в "правильном" слое доступа - ну разве что нужно "подсоединять" к базе другие программы через Ole DB провайдер, или если планируется впоследствии апсайзить базу данных на более мощную платформу - на один из промышленных SQL-серверов (при этом конечно полноценный сервер с нормальной поддержкой ХП). Т.е. с целью унификации - чтоб при любом сервере клиент работал по более-менее одинаковой схеме (хотя полной унификации конечно не добиться - а ходить к своим собственным фоксовым таблицам через ADO - это IMHO извращение). > 2 класс на форму Не понял - в смысле отдельный объект производный от класса работы с данными помещённый на форму? Или просто класс формы в котором прописана логика работы с таблицей? Если первое, то это и есть объектный слой доступа к данным, если второе - ну это конечно получше чем п.3 но всё-же не совсем то - ибо крайне сложно в перспективе "отделить" такой слой доступа, для размещения его скажем на удалённом сервере (COM+ или WebService), или просто для "повторного использования" в других местах программы - в других формах, в отчётах, в просто расчётных процедурах... Кстати частично вопрос со слоем достпа позволяет решить CursorAdapter - НО я бы не советовал именно на его основе создавать бизнес-объекты - вот то что бизнес-объект внутри себя может создать один или более CAD - это более красиво и функционально. > 3 прямо под кнопками (хуже всего) Именно так - хуже не придумаешь :) Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2006, 04:40 |
|
||
|
Transaction and TableUpdate
|
|||
|---|---|---|---|
|
#18+
Hi Sergey! Извини, промахнулся слегка - то сообщение должно было быть адресовано Student - и его коду с try ... catch Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2006, 04:52 |
|
||
|
Transaction and TableUpdate
|
|||
|---|---|---|---|
|
#18+
Igor KorolyovИзвини, промахнулся слегка - то сообщение должно было быть адресовано Student - и его коду с try ... catch Да без проблем, будем надеяться, что теперь данная особенность MS VFP Ole DB Provider 9.0 отложится в наших головах... Good luck! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2006, 12:30 |
|
||
|
Transaction and TableUpdate
|
|||
|---|---|---|---|
|
#18+
Igor Korolyov > 2 класс на форму Не понял - в смысле отдельный объект производный от класса работы с данными помещённый на форму? Или просто класс формы в котором прописана логика работы с таблицей? именно так вроде... класс со свойствами - в которіе передаются СКЛ команді, и методом - віполнить єти СКЛ команді, обернув их транзакцией + обработка ошибки=транзакция не прошла - откат ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2006, 11:18 |
|
||
|
Transaction and TableUpdate
|
|||
|---|---|---|---|
|
#18+
Hi Sergey! Я бы предпочёл, чтобы в очередной версии провайдера эту "особенность" устранили - без этого очень сложно писать нормальные триггера :( ибо там приходится по старинке применять ON ERROR - а это жутко неудобно :( Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2006, 22:48 |
|
||
|
Transaction and TableUpdate
|
|||
|---|---|---|---|
|
#18+
Hi Student! > именно так вроде... класс со свойствами - в котор?е передаются СКЛ команд? Ну не знаю - до нормальных бизнес-объектов от этого как до луны... А раз так то стоит ли вообще городить огород. Не должна вообще "внешняя" часть сложного (многослойного) приложения манипулировать SQL запросами и тому подобным низкоуровневым добром - т.е. внешний слой видит объекты и какие-то их методы/свойства - в случае фокса появляется нехорошее (но больно уж удобное) исключение в виде курсора - не совсем объекта, но и не совсем простого "хранилища информации" - т.е. это можно рассматривать как такое сложное "полу-свойство, полу-объект". НО он не имеет прямой аналогии/связи с той таблицей в которой реально хранится информация - т.е. таблицу могут 20 раз перекроить по структуре (вообще сделать из одной "широкой" таблицы 50 "узких" в предельно нормализованной схеме, или напротив "слить" хранение кучи разных таблиц-сущностей в 10-15 реальных таблиц "универсальной" схемы), да даже просто поперекладывать с сервера на сервер (меняя возможно собственно СУБД) - а вот код который работает с бизнес-объектом этого вообще не заметит! Ибо лишь где-то "внутри" бизнес объекта (или даже в отдельных классах-фабриках, или в системе ORM - если уж "по-взрослому" отказаться от фоксовых курсоров) скрыто то, каким образом из "системы хранения" мы извлекаем информацию в нашу "систему представления"... Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2006, 01:31 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33540668&tid=1592271]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
173ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
74ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 496ms |

| 0 / 0 |
