powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / транзакция и insert не совместимы?
17 сообщений из 17, страница 1 из 1
транзакция и insert не совместимы?
    #35246237
beginner_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Необходимо вставить данные в связанные таблицы одним пакетом (вставленны данные в обе таблички или не вставленны ни в одну)

Охватил insert в связанные таблички блоком транзакции (begin ... end) в случае ошибки rollback.
Иногда вставляет и откатывает изменения,а иногда при попытке записи сообщает, что 'курсор только для чтения'!

Действительно фокс в хелпе пишет,что он не поддерживает инсерт для таблички охваченной транзакцией, тогда какие могут тут быть альтернативы для пакетной вставки?
...
Рейтинг: 0 / 0
транзакция и insert не совместимы?
    #35246252
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beginner_foxДобрый день!
....
Действительно фокс в хелпе пишет,что он не поддерживает инсерт для таблички охваченной транзакцией, тогда какие могут тут быть альтернативы для пакетной вставки?

И где цитата из хелпа.
...
Рейтинг: 0 / 0
транзакция и insert не совместимы?
    #35246275
beginner_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWist beginner_foxДобрый день!
....
Действительно фокс в хелпе пишет,что он не поддерживает инсерт для таблички охваченной транзакцией, тогда какие могут тут быть альтернативы для пакетной вставки?

И где цитата из хелпа.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Begins a transaction. Transactions are supported only for tables in a database. See CREATE DATABASE and ADD TABLE for information on how to create and add tables to a database.
 
BEGIN TRANSACTION
 ...
Also, the following commands and functions cannot be issued for a specific table participating in a transaction:
INSERT

...
...
Рейтинг: 0 / 0
транзакция и insert не совместимы?
    #35246344
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть две разные команды
Insert (старая со времен foxbase - вот для неё транзакции и не поддерживаются)
и
Insert SQL
...
Рейтинг: 0 / 0
транзакция и insert не совместимы?
    #35248593
beginner_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XAndyЕсть две разные команды
Insert (старая со времен foxbase - вот для неё транзакции и не поддерживаются)
и
Insert SQL

Спасибо!
У меня используется Insert sql
C чем же тогда может быть связанны проблема, что 'невозможно обновить курсор ..., так как он только для чтения' это выбрасывается исключение из процедуры блока охваченом транзакцией.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
TRY
	BEGIN TRANSACTION 
	      =Myproc_new()
	IF MESSAGEBOX("Insert record?", 4 )= 6 
		END TRANSACTION
            ELSE
		ROLLBACK
            ENDIF
CATCH TO err
	ROLLBACK
	MESSAGEBOX(err.Message+CHR( 13 )+"record not insert!!!")
ENDTRY
В режиме запуска из проекта такого не наблюдается, как только скомпилируешь возникает такая проблема.
...
Рейтинг: 0 / 0
транзакция и insert не совместимы?
    #35248658
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
транзакция и insert не совместимы?
    #35249042
beginner_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWist Не могу изменить содержимое рабочих таблиц

Спасибо большое!

Файлы базы данных были включены в проект.
На будущее,может ещё кому пригодится->
Вы включили свои таблицы внутрь проекта

Чтобы убедится в этом, откройте окно вашего проекта и найдите нужную таблицу. Слева от имени таблицы должен стоять значок перечеркнутого кружочка. Если это не так, то щелкните правой кнопкой мыши по имени таблицы и в появившемся меню выберите пункт "Exclude". После этого перекомпилируйте проект (заново постройте EXE).

Включение какого-либо файла внутрь EXE осуществляется аналогично. Правой кнопкой мыши по имени и в открывшемся меню выбрать пункт "Include".

Надо понимать, что включение какого-либо файла внутрь EXE означает, что этот файл становится частью EXE и его модификация недопустима. Это можно использовать как примитивный способ защиты своих данных, если эти данные предоставляются только на чтение.

Соответственно, файл, включенный внутрь EXE не надо поставлять клиенту (он и так находится внутри EXE).
...
Рейтинг: 0 / 0
транзакция и insert не совместимы?
    #35249804
Aki_197
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
beginner_fox
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
TRY
	BEGIN TRANSACTION 
	      =Myproc_new()
	IF MESSAGEBOX("Insert record?", 4 )= 6 
		END TRANSACTION
            ELSE
		ROLLBACK
            ENDIF
CATCH TO err
	ROLLBACK
	MESSAGEBOX(err.Message+CHR( 13 )+"record not insert!!!")
ENDTRY


Неужели никто не видит тут явной ошибки?

вот верный вариант =

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
TRY
	BEGIN TRANSACTION 
	      =Myproc_new()
	IF MESSAGEBOX("Insert record?", 4 )= 6 
		END TRANSACTION
            ELSE
		ROLLBACK
            ENDIF
CATCH TO err
	ROLLBACK
	MESSAGEBOX(err.Message+CHR( 13 )+"record is not inserted!!!")
ENDTRY
...
Рейтинг: 0 / 0
транзакция и insert не совместимы?
    #35249980
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aki_197 beginner_fox
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
TRY
	BEGIN TRANSACTION 
	      =Myproc_new()
	IF MESSAGEBOX("Insert record?", 4 )= 6 
		END TRANSACTION
            ELSE
		ROLLBACK
            ENDIF
CATCH TO err
	ROLLBACK
	MESSAGEBOX(err.Message+CHR( 13 )+"record not insert!!!")
ENDTRY


Неужели никто не видит тут явной ошибки?

вот верный вариант =

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
TRY
	BEGIN TRANSACTION 
	      =Myproc_new()
	IF MESSAGEBOX("Insert record?", 4 )= 6 
		END TRANSACTION
            ELSE
		ROLLBACK
            ENDIF
CATCH TO err
	ROLLBACK
	MESSAGEBOX(err.Message+CHR( 13 )+"record is not inserted!!!")
ENDTRY


Явная ошибка не в синтаксисе сообщения, а в идеологии, те до тех пор пока не будет получен ответ на messagebox() остается открытая транзакция - вот, что недопустимо
...
Рейтинг: 0 / 0
транзакция и insert не совместимы?
    #35250028
beginer_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aki_197 beginner_fox
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
TRY
	BEGIN TRANSACTION 
	      =Myproc_new()
	IF MESSAGEBOX("Insert record?", 4 )= 6 
		END TRANSACTION
            ELSE
		ROLLBACK
            ENDIF
CATCH TO err
	ROLLBACK
	MESSAGEBOX(err.Message+CHR( 13 )+"record not insert!!!")
ENDTRY


Неужели никто не видит тут явной ошибки?

вот верный вариант =

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
TRY
	BEGIN TRANSACTION 
	      =Myproc_new()
	IF MESSAGEBOX("Insert record?", 4 )= 6 
		END TRANSACTION
            ELSE
		ROLLBACK
            ENDIF
CATCH TO err
	ROLLBACK
	MESSAGEBOX(err.Message+CHR( 13 )+"record is not inserted!!!")
ENDTRY


Не вижу разницы между Вашим и моим сообщением???
...
Рейтинг: 0 / 0
транзакция и insert не совместимы?
    #35250038
beginer_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWist Aki_197 beginner_fox
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
TRY
	BEGIN TRANSACTION 
	      =Myproc_new()
	IF MESSAGEBOX("Insert record?", 4 )= 6 
		END TRANSACTION
            ELSE
		ROLLBACK
            ENDIF
CATCH TO err
	ROLLBACK
	MESSAGEBOX(err.Message+CHR( 13 )+"record not insert!!!")
ENDTRY


Неужели никто не видит тут явной ошибки?

вот верный вариант =

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
TRY
	BEGIN TRANSACTION 
	      =Myproc_new()
	IF MESSAGEBOX("Insert record?", 4 )= 6 
		END TRANSACTION
            ELSE
		ROLLBACK
            ENDIF
CATCH TO err
	ROLLBACK
	MESSAGEBOX(err.Message+CHR( 13 )+"record is not inserted!!!")
ENDTRY


Явная ошибка не в синтаксисе сообщения, а в идеологии, те до тех пор пока не будет получен ответ на messagebox() остается открытая транзакция - вот, что недопустимо

Идеология как раз в том и состоит чтобы по команде залить данные одним пакетом в таблички или откатить если пользователь передумал. Работа однпользовательская.
А в чём по Вашему мнению ошибка идеологии?
...
Рейтинг: 0 / 0
транзакция и insert не совместимы?
    #35250130
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beginer_fox PaulWist
Явная ошибка не в синтаксисе сообщения, а в идеологии, те до тех пор пока не будет получен ответ на messagebox() остается открытая транзакция - вот, что недопустимо

Идеология как раз в том и состоит чтобы по команде залить данные одним пакетом в таблички или откатить если пользователь передумал. Работа однпользовательская.
А в чём по Вашему мнению ошибка идеологии?


Все Ваши слова правильные, только метод реализации подкачел, надо немного не так.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
TRY
	IF MESSAGEBOX("Insert record?", 4 )= 6 

             BEGIN TRANSACTION 

	     IF  Myproc_new()
             	END TRANSACTION
                  ELSE
	             ROLLBACK
                  ENDIF
              endif 
CATCH TO err
	ROLLBACK
	MESSAGEBOX(err.Message+CHR( 13 )+"record is not inserted!!!")
ENDTRY
...
Рейтинг: 0 / 0
транзакция и insert не совместимы?
    #35251451
Aki_197
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
beginer_fox
Не вижу разницы между Вашим и моим сообщением???

Я подскажу!
Разница примерно такая как между

Me Aki и I`m Aki
...
Рейтинг: 0 / 0
транзакция и insert не совместимы?
    #35251630
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смысл в том, что недопустимо внутри открытой транзакции ожидать реакции пользователя. Вести диалог с пользователем надо либо ДО, либо ПОСЛЕ обработки транзакции. Но ни в коем случае "во время".

Общая стратегия построения многопользовательских приложений - уменьшение времени блокировки записией. А внутри открытой транзакции блокировки будут "висеть" до тех пор пока транзакция не будет завершена. Что означает "подвешивание" работы всех прочих пользователей.
...
Рейтинг: 0 / 0
транзакция и insert не совместимы?
    #35253551
beginer_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWist beginer_fox PaulWist
Явная ошибка не в синтаксисе сообщения, а в идеологии, те до тех пор пока не будет получен ответ на messagebox() остается открытая транзакция - вот, что недопустимо

Идеология как раз в том и состоит чтобы по команде залить данные одним пакетом в таблички или откатить если пользователь передумал. Работа однпользовательская.
А в чём по Вашему мнению ошибка идеологии?


Все Ваши слова правильные, только метод реализации подкачел, надо немного не так.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
TRY
	IF MESSAGEBOX("Insert record?", 4 )= 6 

             BEGIN TRANSACTION 

	     IF  Myproc_new()
             	END TRANSACTION
                  ELSE
	             ROLLBACK
                  ENDIF
              endif 
CATCH TO err
	ROLLBACK
	MESSAGEBOX(err.Message+CHR( 13 )+"record is not inserted!!!")
ENDTRY


Да,спасибо!
Но дело в том,что выполняется процедура- и после brow ,если пользователя устраивает вставка данных,он подтверждает,нет -откатывает.
Идея как раз и состоит в том,чтобы охватить одной транзакцией все таблички с кодом и не париться ...
Если же применить буферизацию в табличкам,то как завязать всё это с транзакцией грамотно?
...
Рейтинг: 0 / 0
транзакция и insert не совместимы?
    #35254088
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
транзакция и insert не совместимы?
    #35254159
beginer_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWist CM

Спасибо!

http://forum.foxclub.ru/read.php?29,311759,311795#msg-311795
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 1 . Открывает Родительскую и Дочернюю таблу 
 2 . Ставим буфферизацию  5  
 3 . Теперь можем как угодно долго модифицировать данные в буфферизированных таблах 
 4 . Когда хотим сохранить используем примерно такой код, например в кнопке 

begin transaction 
   if tableupdate(Родитель) AND tableupdate(Дочка) 
     end trans 
  else 
     rollback 
     AERROR(arr) 
     for i =  1  to alen(arr) 
        ? arr(i) 
     endfor 
endif 
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / транзакция и insert не совместимы?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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