powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Transaction and TableUpdate
23 сообщений из 23, страница 1 из 1
Transaction and TableUpdate
    #33539968
Student////
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
решил вот попробовать транзакции:

BEGIN TRANSACTION

INSERT INTO T1
UPDATE T2
DELETE FROM T3

END TRANSACTION

все ОК, но вижу в хелпе варианты с буфферизацией - транзакцией и ТаблАпдэйтом - так сказать все в куче...
Подумалось мне - применять все вместе нужно только для того, чтобы отследить ошибки, вероятно возникшие при транзакции?
так как в методе
BEGIN TRANSACTION

INSERT INTO T1
UPDATE T2
DELETE FROM T3

END TRANSACTION
если где-то внутри возникнет ошибка - транзакция просто не пройдет
(да,, для того, чтобы при ошибке откатить транзакцию - нужно придумать механизм а-ля Если любая ошибка == немедленный роллбэк)

Верно я понимаю???
то есть - если просто транзакция без буфферизаций - в случае неудачи - изменения не пройдут
а в случае Транзакции и и ТаблАпдэйта - можно не только откатить изменения - но и проанализировать "а почему...?"
Реально мне например анализ ошибок не нужен - то есть я могу не заморачиваться?
...
Рейтинг: 0 / 0
Transaction and TableUpdate
    #33540076
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неверно понимаешь.

Транзакция и буферизация - это два РАЗНЫХ процесса. У них РАЗНОЕ назначение.

Отловить ошибку можно значительно проще, через TRY...CATCH. Или ON ERROR в младших версиях. То, что это можно сделать и при буферизации - это следствие, а не причина использования буферизации.

Что такое буферизация и транзакция читай во вложенном файле.
...
Рейтинг: 0 / 0
Transaction and TableUpdate
    #33540129
Student////
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМНеверно понимаешь.

Транзакция и буферизация - это два РАЗНЫХ процесса. У них РАЗНОЕ назначение.

Отловить ошибку можно значительно проще, через TRY...CATCH. Или ON ERROR в младших версиях. То, что это можно сделать и при буферизации - это следствие, а не причина использования буферизации.

Что такое буферизация и транзакция читай во вложенном файле.

Владимир! именно Ваши посты натолкнули меня на сей пост :-)
Я их уже чилат.. просто подумал
есть ли смысл делать
1 буфферизацию
2 транзакци.
3 сброс данных внутри транзакции через TableUpdate
именно такой код я использую (взял с данного форума и это Ваш код)
и он прекрасно работает, за что Вам спасибо огромное...
Но вот подумал - ведь достаточно и
BEGIN TRANSACTION

INSERT INTO T1
UPDATE T2
DELETE FROM T3

END TRANSACTION
пробовал "силой" валить транзакцию (например 3-ю строку намеренно писал с ошибкой) - получил полный откат изменений и все.. то есть что мне надо?
либо изменить одновременно данные в нескольких таблицах, либо, в случае ошибки откат всего
Этого таким простым кодом и добился...
потому и возник сей вопрос.. а надо ли усложнять свой код буфферизацией, если он и в таком простом виде работает?
...
Рейтинг: 0 / 0
Transaction and TableUpdate
    #33540145
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ради интереса можете взглянуть на простой пример в котором даны два варианта транзакций...

Good luck!
...
Рейтинг: 0 / 0
Transaction and TableUpdate
    #33540249
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Student////
Владимир! именно Ваши посты натолкнули меня на сей пост :-)
Я их уже чилат.. просто подумал
есть ли смысл делать
1 буфферизацию
2 транзакци.
3 сброс данных внутри транзакции через TableUpdate
Ты по прежнему не понимаешь ЗАЧЕМ нужна буферизация.

Если подходить чисто формально, то в коде сохранения изменений буферизация - это лишний шаг.

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

Если же у тебя нет шага внесения изменений пользователем и процесс сохранения - это некий автоматический процесс (например, внутри тела триггера), то буферизация - это лишнее.
...
Рейтинг: 0 / 0
Transaction and TableUpdate
    #33540350
Student////
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ
Если же у тебя нет шага внесения изменений пользователем и процесс сохранения - это некий автоматический процесс (например, внутри тела триггера), то буферизация - это лишнее.

не совсем так.. пользователь вручную меняет данные...
нажимает на кнопку сохранить.. под которой написано:
BEGIN TRANS
UPDATE MyTable SET MyField = Thisform.TextBox1.Value......
.......
END TRANS

и никакой буфферизации.. следовательно могу сделать поспешный вывод - "в такй методике буфферизация лишняя..."
Да, я понимиаю - если другой пользователь изменил в то же время те же данные - то прав окажется конечно тот, кто последний сохранил - это меня устраивает
...
Рейтинг: 0 / 0
Transaction and TableUpdate
    #33540358
Student////
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey ChРади интереса можете взглянуть на простой пример в котором даны два варианта транзакций...

Good luck!


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
BEGIN TRANSACTION
  TRY
    INSERT INTO 
    INSERT INTO 
    UPDATE USERS SET lastvisit = DATETIME() WHERE User_ID=m.lnuser_id
    END TRANSACTION
  CATCH TO 
    ROLLBACK
  FINALLY
  ENDTRY


да Сергей тут мой метод практически совпадает с Вашим
...
Рейтинг: 0 / 0
Transaction and TableUpdate
    #33540668
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Student//// да Сергей тут мой метод практически совпадает с Вашим
Там в самом низу второй пример, как раз то, о чем писал Владимир...

Мое личное мнение - оба подхода вполне имеют право не жизнь... НО, учтите что у меня этот код работает в контейнере базы данных как ХП (хранимая процедура)...

Good luck!
...
Рейтинг: 0 / 0
Transaction and TableUpdate
    #33540726
Student////
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Ch Student//// да Сергей тут мой метод практически совпадает с Вашим
Там в самом низу второй пример, как раз то, о чем писал Владимир...

Мое личное мнение - оба подхода вполне имеют право не жизнь... НО, учтите что у меня этот код работает в контейнере базы данных как ХП (хранимая процедура)...

Good luck!


в любом случае (проверено несколько раз)
= если внутри транзакции в какой-либо, (не 1-й) строке ошибка - транзакция откатывает ВСЕ....
Было опасение, что например 1-2-3 таблицы изменятся, а 4-5- нет - что есть нарушение целостности... но опыт показал, что такого нету..
либо я не так тестил?
...
Рейтинг: 0 / 0
Transaction and TableUpdate
    #33542519
Student////
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Ch
Мое личное мнение - оба подхода вполне имеют право не жизнь... НО, учтите что у меня этот код работает в контейнере базы данных как ХП (хранимая процедура)...
Good luck!

Будьте добры выскажите свое мнение - если "всунуть" модификацию данный в ХП - значит ли это увеличение надежности?
Ведь слышал я на данном форуме, что ХП из ДБС файла выполняется на клиенте, а не на сервере...
иными словами что есть лучше
1 код модификации (разумеется внутри транзакции) непосредственно на форме
2 код модификации в контейнере базы данных как ХП
...
Рейтинг: 0 / 0
Transaction and TableUpdate
    #33542580
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Student////Будьте добры выскажите свое мнение - если "всунуть" модификацию данный в ХП - значит ли это увеличение надежности?
Ведь слышал я на данном форуме, что ХП из ДБС файла выполняется на клиенте, а не на сервере...
иными словами что есть лучше
1 код модификации (разумеется внутри транзакции) непосредственно на форме
2 код модификации в контейнере базы данных как ХП[/quot]

1. Присутствие кода в ХП не изменит надёжности, если код криво написан, даже если код написан одинаково хорошо, то он будет одинаково исполняться.

2. Весь код в формате Фокса выполняется на клиенте - это имеет свои минусы и плюсы

3. Идеологически правильно написать ХП по нескольким соображениям
а) Твои ХП может использовать стороннее приложение, те уходим от зависимости от клиента
б) Из файл-серверного (2-х звенного) приложения возможно построить 3-х звенку
в) Бизнес логика хранится в контеёнере БД, а не раскидана по формам.
...
Рейтинг: 0 / 0
Transaction and TableUpdate
    #33542749
Student////
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWist
3. Идеологически правильно написать ХП по нескольким соображениям
а) Твои ХП может использовать стороннее приложение, те уходим от зависимости от клиента
б) Из файл-серверного (2-х звенного) приложения возможно построить 3-х звенку
в) Бизнес логика хранится в контеёнере БД, а не раскидана по формам.

пока что останавливает (не помню чье) утверждение на данном форуме "не перегружайте контейнер ДБС хранимками..."

хотя, я бы написал одну ХП с параметрами
имяТаблицы
СКЛ_команда
и было бы не всев одной ХП (в идеале)
...
Рейтинг: 0 / 0
Transaction and TableUpdate
    #33542754
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Student//// Будьте добры выскажите свое мнение - если "всунуть" модификацию данный в ХП - значит ли это увеличение надежности?
Ведь слышал я на данном форуме, что ХП из ДБС файла выполняется на клиенте, а не на сервере...
иными словами что есть лучше
1 код модификации (разумеется внутри транзакции) непосредственно на форме
2 код модификации в контейнере базы данных как ХП
Если Вы прочитаете внимательно все то, что я привел - там используется маленькая хитрость, которая называется Web Services и очень надежный подход к разработке приложений - так как база данных FoxPro а это случае хранится на сервере и ХП выполняется на нем-же... Это сервер может быть весьма надежным, что резко повышает надежность всей системы - клиент прислал запрос в виде строки, сервер обработал и послал ответ опять-же в виде строки... У меня есть много приложений, работающих по подобному принципу - преимущество в том, что это чистое Клиент - Серверное приложение, причем работать с данными Ваши клиенты могут в любой точке земного шара и при желании все можно шифровать...

К недостатком моего подхода можно отнести:
- сравнительная дешевизна (то есть ниша, где зарплата программистов невысока)
- много кода писать надо вручную (я пытался унифицировать этот процесс, приблизив по возможности к ADO.NET, но у меня не хватает времени и денег на это)
- все сервисные службы, которые есть уже, например в MS SQL Server 2005 надо писать самому. В принципе ничего сложного для FoxPro, но опять-же время, за которое никто никогда не заплатит, а семью надо чем-то кормить...

But anyway, good luck!
...
Рейтинг: 0 / 0
Transaction and TableUpdate
    #33542923
Student////
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Ch[Если Вы прочитаете внимательно все то, что я привел - там используется маленькая хитрость, которая называется Web Services

Да я читаю Ваши статьи, но в силу того, что я все же еще учусь, но заказ уже есть... а до Web Services я еще "не дорос", то вот из-за чего возникают мои вопросы....
Увы, дабы постичь технолгию Web Services мне нужно какое-то время, но его как раз и нет , а писать проект уже надо
...
Рейтинг: 0 / 0
Transaction and TableUpdate
    #33547860
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Sergey!

Тут есть тонкость - если кто-то попытается использовать подобную ХП не из
фокса (а через ODBC или OLE DB) то будет весьма разочарован - уж не знаю
почему, но даже в последнем провайдере не поддерживается структурная
обработка ошибок, а заодно и макро :(
А писать в ХП то что не может реально работать как ХП - как-то не очень
хорошо...
То что "вообще" стоит отделять код работы с данными от визуальных форм - это
не вызывает сомнений :) Другое дело как это делать...

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Transaction and TableUpdate
    #33548395
Student///
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor Korolyov
Hi Sergey!

Тут есть тонкость - если кто-то попытается использовать подобную ХП не из
фокса (а через ODBC или OLE DB) то будет весьма разочарован - уж не знаю
почему, но даже в последнем провайдере не поддерживается структурная
обработка ошибок, а заодно и макро :(
А писать в ХП то что не может реально работать как ХП - как-то не очень
хорошо...
То что "вообще" стоит отделять код работы с данными от визуальных форм - это
не вызывает сомнений :) Другое дело как это делать...

Posted via ActualForum NNTP Server 1.3

ну Вы еще поделитесь примерчиком, если можно.. итак 3 варианта
1 ХП с параметрами Таблица - СКЛ команда
2 класс на форму
3 прямо под кнопками (хуже всего)
...
Рейтинг: 0 / 0
Transaction and TableUpdate
    #33548690
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor KorolyovТут есть тонкость - если кто-то попытается использовать подобную ХП не из
фокса (а через ODBC или OLE DB) то будет весьма разочарован - уж не знаю
почему, но даже в последнем провайдере не поддерживается структурная
обработка ошибок, а заодно и макро :(
А писать в ХП то что не может реально работать как ХП - как-то не очень
хорошо...
То что "вообще" стоит отделять код работы с данными от визуальных форм - это
не вызывает сомнений :) Другое дело как это делать...
В приведенном мной примере как раз подобная тонкость учтена - там как раз даны примеры для среды VFP и OLE DB Provider... Причем мой пример реально работает на WEB Site который ничего о FoxPro не знает Причем работает уже порядка 6 месяцев...

Если нет доверия, то можно скачать готовый пример и попробовать он работает on-line...
...
Рейтинг: 0 / 0
Transaction and TableUpdate
    #33553672
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Student!

> 1 ХП с параметрами Таблица - СКЛ команда

Бессмысленно. Если параметром передаётся сам текст SQL команды. то на кой
вообще нужна эта процедура? Если уж делать слой доступа к данным в виде ХП,
то делать это в идеологии CRUD - т.е. отдельные процедуры для добавления,
изменения, удаления... А разнообразные "поля таблицы" тут передаются в виде
множества параметров.
Что же касается собственно фокса, то т.к. ХП всё равно исполняются не на
сервере а на клиенте, то особого прока не видно даже в "правильном" слое
доступа - ну разве что нужно "подсоединять" к базе другие программы через
Ole DB провайдер, или если планируется впоследствии апсайзить базу данных на
более мощную платформу - на один из промышленных SQL-серверов (при этом
конечно полноценный сервер с нормальной поддержкой ХП). Т.е. с целью
унификации - чтоб при любом сервере клиент работал по более-менее одинаковой
схеме (хотя полной унификации конечно не добиться - а ходить к своим
собственным фоксовым таблицам через ADO - это IMHO извращение).

> 2 класс на форму

Не понял - в смысле отдельный объект производный от класса работы с данными
помещённый на форму? Или просто класс формы в котором прописана логика
работы с таблицей? Если первое, то это и есть объектный слой доступа к
данным, если второе - ну это конечно получше чем п.3 но всё-же не совсем
то - ибо крайне сложно в перспективе "отделить" такой слой доступа, для
размещения его скажем на удалённом сервере (COM+ или WebService), или просто
для "повторного использования" в других местах программы - в других формах,
в отчётах, в просто расчётных процедурах...
Кстати частично вопрос со слоем достпа позволяет решить CursorAdapter - НО я
бы не советовал именно на его основе создавать бизнес-объекты - вот то что
бизнес-объект внутри себя может создать один или более CAD - это более
красиво и функционально.

> 3 прямо под кнопками (хуже всего)

Именно так - хуже не придумаешь :)

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Transaction and TableUpdate
    #33553691
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Sergey!

Извини, промахнулся слегка - то сообщение должно было быть адресовано
Student - и его коду с try ... catch

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Transaction and TableUpdate
    #33553813
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor KorolyovИзвини, промахнулся слегка - то сообщение должно было быть адресовано Student - и его коду с try ... catch
Да без проблем, будем надеяться, что теперь данная особенность MS VFP Ole DB Provider 9.0 отложится в наших головах...

Good luck!
...
Рейтинг: 0 / 0
Transaction and TableUpdate
    #33555143
Student///
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor Korolyov
> 2 класс на форму

Не понял - в смысле отдельный объект производный от класса работы с данными
помещённый на форму? Или просто класс формы в котором прописана логика
работы с таблицей?

именно так вроде... класс со свойствами - в которіе передаются СКЛ команді, и методом - віполнить єти СКЛ команді, обернув их транзакцией + обработка ошибки=транзакция не прошла - откат
...
Рейтинг: 0 / 0
Transaction and TableUpdate
    #33561971
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Sergey!

Я бы предпочёл, чтобы в очередной версии провайдера эту "особенность"
устранили - без этого очень сложно писать нормальные триггера :( ибо там
приходится по старинке применять ON ERROR - а это жутко неудобно :(

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Transaction and TableUpdate
    #33562058
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Student!

> именно так вроде... класс со свойствами - в котор?е передаются СКЛ команд?

Ну не знаю - до нормальных бизнес-объектов от этого как до луны... А раз так
то стоит ли вообще городить огород.
Не должна вообще "внешняя" часть сложного (многослойного) приложения
манипулировать SQL запросами и тому подобным низкоуровневым добром - т.е.
внешний слой видит объекты и какие-то их методы/свойства - в случае фокса
появляется нехорошее (но больно уж удобное) исключение в виде курсора - не
совсем объекта, но и не совсем простого "хранилища информации" - т.е. это
можно рассматривать как такое сложное "полу-свойство, полу-объект".
НО он не имеет прямой аналогии/связи с той таблицей в которой реально
хранится информация - т.е. таблицу могут 20 раз перекроить по структуре
(вообще сделать из одной "широкой" таблицы 50 "узких" в предельно
нормализованной схеме, или напротив "слить" хранение кучи разных
таблиц-сущностей в 10-15 реальных таблиц "универсальной" схемы), да даже
просто поперекладывать с сервера на сервер (меняя возможно собственно
СУБД) - а вот код который работает с бизнес-объектом этого вообще не
заметит! Ибо лишь где-то "внутри" бизнес объекта (или даже в отдельных
классах-фабриках, или в системе ORM - если уж "по-взрослому" отказаться от
фоксовых курсоров) скрыто то, каким образом из "системы хранения" мы
извлекаем информацию в нашу "систему представления"...

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Transaction and TableUpdate
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]