Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Replace, Delete in Transaction / 25 сообщений из 32, страница 1 из 2
27.06.2006, 12:01
    #33816331
Sea.s2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Replace, Delete in Transaction
Hi alles
Значит хочу записать мусор в одно из полей перед удалением
Появилась проблема если я делаю Replace потом Delete и затем TableUpdate в transaction то replace не updat'ится только удаляется запись тогда я сделал 2 транзакции. Вопрос можно так делать или как заставить до первого tableupdate сделать и Replace и Delete. Спасибо!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
      ……..
      REPLACE &lcAlias .&tcField1 WITH “TT”
      BEGIN TRANSACTION       
      IF TABLEUPDATE(.F., .T., lcAlias) = .T.
        BEGIN TRANSACTION
        DELETE IN &lcAlias
        IF TABLEUPDATE(.F., .T., lcAlias) = .T.
          END TRANSACTION
          END TRANSACTION
         ………
        ELSE
          RollBack
          RollBack
          TABLEREVERT(.T.)
          ………..
        ENDIF
      ELSE
        ThisForm.RollBack()
        ……..
      ENDIF
        ……..

...
Рейтинг: 0 / 0
27.06.2006, 12:33
    #33816452
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Replace, Delete in Transaction
Что-то ты не договариваешь

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
create cursor test (id i)

INSERT INTO test (id) VALUES ( 1 )

SET DELETED  OFF 
SET MULTILOCKS ON 

CURSORSETPROP("Buffering" , 5 )

BEGIN TRANSACTION 

replace id WITH  2 

IF TABLEUPDATE(.f.,.t.)
	BEGIN TRANSACTION 
	DELETE 
	IF TABLEUPDATE(.f.,.t.)
		ROLLBACK 
		ROLLBACK  
	ELSE
		END TRANSACTION 
		END TRANSACTION 
	ENDIF 
ELSE
	ROLLBACK tran 
ENDIF 

BROWSE 
...
Рейтинг: 0 / 0
27.06.2006, 13:09
    #33816584
Sea.s2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Replace, Delete in Transaction
Hi PaulWist ты повторил мой первый вариант :) но он мне не нравится мне и мой последний вариант не нравится так как при падении delete внутри транзакции иногда вылетает ошибка "нельзя делать внутри транзакции..."

Я бы хотел replace и delete сделать и выполнить всего один TableUpdate

Что никак?
...
Рейтинг: 0 / 0
27.06.2006, 13:12
    #33816596
Sea.s2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Replace, Delete in Transaction
SET DELETED ON
...
Рейтинг: 0 / 0
27.06.2006, 13:23
    #33816645
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Replace, Delete in Transaction
Тогда напиши внятно, что хочешь получить, если вложенные транзакции не нравятся.

Если просто записать мусор и удалить, то

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
begin tran
replace ....
delete ....

if tableupdate()
end ...
else
rollback 
end
А то, что у тебя ругается - это скорее на tablerevert, что действительно нельзя делать внутри транзакции.
...
Рейтинг: 0 / 0
27.06.2006, 14:50
    #33816984
Sea.s2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Replace, Delete in Transaction
Дело вовсе на в трпнзакциях у меня какой-то косяк во View

пишу в command

replace num1 with "TT"
Delete

все нормально

TAbleupdate(.T.)

REQUERY()

и у меня поле num1 возвращает значение до replace в чем дело?
...
Рейтинг: 0 / 0
27.06.2006, 14:59
    #33817016
Sea.s2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Replace, Delete in Transaction
Работает только в случае как я и говорил сначала

REplace

TAbleupdate(.T.)

delete

TAbleupdate(.T.)

REquery()

тогда все нормально
...
Рейтинг: 0 / 0
27.06.2006, 15:25
    #33817110
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Replace, Delete in Transaction
Sea.s2Дело вовсе на в трпнзакциях у меня какой-то косяк во View

пишу в command

replace num1 with "TT"
Delete

все нормально

TAbleupdate(.T.)

REQUERY()

и у меня поле num1 возвращает значение до replace в чем дело?

Посмотреть, что возвращает Tableupdate() и если .F., то вызвать ф-ию AERROR() и посмотреть на расшифровку ошибки, что-то типа

Код: plaintext
1.
2.
3.
4.
5.
if not tableupdate()
aerror(arr)
for i =  1  to alen(arr)
?arr(i)
endfor
endif 
...
Рейтинг: 0 / 0
27.06.2006, 15:29
    #33817122
Sea.s2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Replace, Delete in Transaction
TAbleUpdate везде возвращает .T.

Просто заменяет replace на oldval


replace
delete
tableupdate(.T.)
BROWSE
показывает все нормально

REQUERY()

Замещает на старое
...
Рейтинг: 0 / 0
27.06.2006, 15:29
    #33817125
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Replace, Delete in Transaction
Кстати вот этот lcAlias - это алиас чего, таблицы или view, и какая буферизация стоит на таблице?

Если схема такая, то надо

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
cursorsetprop('buffering', 5 ,'MyTable')
cursorsetprop('buffering', 5 ,'MyView)

replace..
delete...

tableupdate('MyView')
tableupdate('MyTable')
...
Рейтинг: 0 / 0
27.06.2006, 15:36
    #33817159
Sea.s2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Replace, Delete in Transaction
Исходная таблица buffering 1
Разве надо буфферизовать исходные таблицы?, никогда итого неделаю

НА View 5
...
Рейтинг: 0 / 0
27.06.2006, 15:37
    #33817165
Sea.s2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Replace, Delete in Transaction
Тем более TableUpdate(.T.)
я делал два раза на View исходной вообще не трогал
...
Рейтинг: 0 / 0
27.06.2006, 16:01
    #33817253
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Replace, Delete in Transaction
Да, смотри-ка, какая особенность обновления view, действительно новое значение игнорируется, а выставляется только пометка на удаление. Даже затрудняюсь сказать глюк это или так и должно быть, совершенно разное поведение для таблицы и view.
...
Рейтинг: 0 / 0
28.06.2006, 12:43
    #33819005
Sea.s2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Replace, Delete in Transaction
Так и не смог ито побороть одним TableUpdatom
+ еще одна странность:
Имеется 2 формы с Private DataSession в первой создал структурный индекс
INDEX on expr TAG TT

Захожу в другую где делаю USE того же view in 0

Создаю другой структурный индекс INDEX on expr TAG TT1
выхожу из нее делаю USE in ..

Опять в первой форме создаю индекс INDEX on expr TAG TT
Но теперь создается неструктурный индекс хотя таже DS
и теперь при удалении возникает ошибка закройте неструктурный индекс
Хотя нигде TAG OF не использовал в чем дело?
...
Рейтинг: 0 / 0
28.06.2006, 13:20
    #33819093
Sea.s2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Replace, Delete in Transaction
Даже вот так
До REQUERY()
можно насоздавать хоть сколько структурных индексов после пойдут неструктурные
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CURSORSETPROP("Buffering", 3 )
INDEX ON num1 TAG num1
CURSORSETPROP("Buffering", 5 )
REQUERY()
CURSORSETPROP("Buffering", 3 )
INDEX ON num1 TAG num2
CURSORSETPROP("Buffering", 5 )
...
Рейтинг: 0 / 0
29.06.2006, 02:11
    #33820576
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Replace, Delete in Transaction
Hi Sea!

Поищи тут объяснения способов работы обновляемых представлений - тогда тебе
станет понятно, почему не происходит никакой "замены" при удалении записей.
Попросту нет такой SQL команды "заменить и удалить" - а из двух этих
альтернатив фокс при сбросе буфера представления естественно выбирает более
правильную - удаление.
Также поищи обсуждение индексов по представлениям - это тоже было - да,
после REQUERY() изменяется имя "подлежащего" dbf-а (точнее tmp) - и все
вновь создаваемые индексы идут в "новый" cdx (одноименный новому tmp) - тем
не менее "старый" cdx всё ещё существует и именно он остаётся структурным
cdx-ом.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
29.06.2006, 09:03
    #33820720
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Replace, Delete in Transaction
Igor Korolyov

Igor KorolyovПопросту нет такой SQL команды "заменить и удалить" - а из двух этих
альтернатив фокс при сбросе буфера представления естественно выбирает более
правильную - удаление.

Игорь, ты не прав, если бы такое поведение было как для буфф. таблицы так и для View, то такое предположение можно было бы принять, НО поведение для таблицы отличается от View.

Для буфф. таблицы сбрасываются как изменения поля, так и пометка на удаление, а для View сбрасывается только пометка на удаление.

Налицо, либо баг, либо недокументированная фича.
...
Рейтинг: 0 / 0
29.06.2006, 11:44
    #33821250
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Replace, Delete in Transaction
Нет. Это не глюк. Все как положено.

View - это НЕ исходная таблица. Это еще одна ДРУГАЯ таблица.

Чтобы изменения, сделанные во View попали в исходную таблицу, необходимо сделать ЗАПИСЬ в исходной таблице. По косвенным признакам, это делается через команды INSERT-SQL, UPDATE-SQL и DELETE-SQL.

Т.е. по команде TableUpdate() выполняется одна из этих 3 команд применительно к текущей записи View.

Но именно, что "одна из", а не несколько. А по постановке задачи Sea.s2 хочет, чтобы было дано несколько команд. Local View на это не рассчитан. В данном случае, придется делать 2 сброса буфера:

Код: plaintext
1.
2.
3.
REPLACE ...
TableUpdate()
DELETE
TableUpdate()

На первый TableUpdate() пройдет обновление по команде UPDATE-SQL, а на второй TableUpdate() пройдет удаление записи по команде DELETE-SQL. Что, собственно, он и сделал.
...
Рейтинг: 0 / 0
29.06.2006, 12:57
    #33821486
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Replace, Delete in Transaction
ВладимирМ

ВладимирМView - это НЕ исходная таблица. Это еще одна ДРУГАЯ таблица.

Ну дык.

ВладимирМЧтобы изменения, сделанные во View попали в исходную таблицу, необходимо сделать ЗАПИСЬ в исходной таблице. По косвенным признакам, это делается через команды INSERT-SQL, UPDATE-SQL и DELETE-SQL.

Владимир, это всё правильно, только при сбросе буфера таблицы почему-то выполняются (по твоей классификации) ДВЕ команды (UPDATE and DELETE), а при сбросе из VIEW только ОДНА (DELETE), те явное нарушение описанной логики.

ВладимирМТ.е. по команде TableUpdate() выполняется одна из этих 3 команд применительно к текущей записи View.

Ткни носом в хелп где об этом написано. Пока вижу

авторCommits changes made to a buffered row, a buffered table, cursor, or cursor adapter.

ВладимирМНо именно, что "одна из", а не несколько.

Здесь можно только строить предположения о приоритетах, какая команда выполняется сначала, ведь сброс буфера скорее всего основан на GETFLDSTATE()
...
Рейтинг: 0 / 0
29.06.2006, 13:14
    #33821541
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Replace, Delete in Transaction
PaulWist ВладимирМЧтобы изменения, сделанные во View попали в исходную таблицу, необходимо сделать ЗАПИСЬ в исходной таблице. По косвенным признакам, это делается через команды INSERT-SQL, UPDATE-SQL и DELETE-SQL.

Владимир, это всё правильно, только при сбросе буфера таблицы почему-то выполняются (по твоей классификации) ДВЕ команды (UPDATE and DELETE), а при сбросе из VIEW только ОДНА (DELETE), те явное нарушение описанной логики.
Почему ты решил, что буфер - это тоже таблица? Или о каком буфере идет речь?

Чтение данных идет по цепочке

Исходная таблица - Local View

Запись данных идет по цепочке

Буфер Local View - Local View - буфер исходной таблицы - исходная таблица

Перенос информации из буфера в исходную таблицу осуществляется каким-то другими механизмами.

То, что описал я - это перенос данных между таблицами. А что такое буфер - не в курсе. Какой механизм сброса буфера - понятия не имею.

PaulWist
ВладимирМТ.е. по команде TableUpdate() выполняется одна из этих 3 команд применительно к текущей записи View.

Ткни носом в хелп где об этом написано. Пока вижу

авторCommits changes made to a buffered row, a buffered table, cursor, or cursor adapter.
Ты путаешь понятия. Я описал перенос данных не из буфера, а между двумя таблицами, поскольку Local View - это однозначно таблица. Вот я и описал перенос данных из одной таблицы в другую. Из Local View в исходную таблицу.

Косвенных ссылок на то, что этот сброс осуществояется SQL-командами в HELP - полно. Но я не знаю ни одной SQL команды, которая одновременно выполняла бы 2 действия - модификацию и удаление.

PaulWist
ВладимирМНо именно, что "одна из", а не несколько.

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

Тут команда TableUpdate() вводит в заблуждение, поскольку применительно к Local View она выполняет 2 действия: сбрасывает собственно буфер Local View в сам Local View (тут все в порядке), а затем переносит изменения сделанные в Local View в исходную таблицу. И вот на этом этапе и срабатывают все те механизмы команд SQL о которых я написал выше.
...
Рейтинг: 0 / 0
29.06.2006, 13:58
    #33821695
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Replace, Delete in Transaction
ВладимирМ

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
CLOSE DATA ALL

CREATE DATABASE 'LOCALVIEWDB.DBC'

CREATE TABLE 'TABLEFORVIEW.DBF' NAME 'TABLEFORVIEW' (ID I NOT NULL, ;
                           NAME C( 10 ) NOT NULL)

CREATE SQL VIEW "LOCALVIEW" ; 
   AS SELECT Tableforview.id, Tableforview.name FROM localview!tableforview

DBSetProp('LOCALVIEW', 'View', 'UpdateType',  1 )
DBSetProp('LOCALVIEW', 'View', 'WhereType',  3 )
DBSetProp('LOCALVIEW', 'View', 'FetchMemo', .T.)
DBSetProp('LOCALVIEW', 'View', 'SendUpdates', .T.)
DBSetProp('LOCALVIEW', 'View', 'UseMemoSize',  255 )
DBSetProp('LOCALVIEW', 'View', 'FetchSize',  100 )
DBSetProp('LOCALVIEW', 'View', 'MaxRecords', - 1 )
DBSetProp('LOCALVIEW', 'View', 'Tables', 'localview!tableforview')
DBSetProp('LOCALVIEW', 'View', 'Prepared', .F.)
DBSetProp('LOCALVIEW', 'View', 'CompareMemo', .T.)
DBSetProp('LOCALVIEW', 'View', 'FetchAsNeeded', .F.)
DBSetProp('LOCALVIEW', 'View', 'FetchSize',  100 )
DBSetProp('LOCALVIEW', 'View', 'Comment', "")
DBSetProp('LOCALVIEW', 'View', 'BatchUpdateCount',  1 )
DBSetProp('LOCALVIEW', 'View', 'ShareConnection', .T.)

DBSetProp('LOCALVIEW.id', 'Field', 'KeyField', .T.)
DBSetProp('LOCALVIEW.id', 'Field', 'Updatable', .F.)
DBSetProp('LOCALVIEW.id', 'Field', 'UpdateName', 'localview!tableforview.id')
DBSetProp('LOCALVIEW.id', 'Field', 'DataType', "I")

DBSetProp('LOCALVIEW.name', 'Field', 'KeyField', .F.)
DBSetProp('LOCALVIEW.name', 'Field', 'Updatable', .T.)
DBSetProp('LOCALVIEW.name', 'Field', 'UpdateName', 'localview!tableforview.name')
DBSetProp('LOCALVIEW.name', 'Field', 'DataType', "C(10)")
*
**********************************************
* заполним табличку
USE TABLEFORVIEW IN  0 
INSERT INTO TABLEFORVIEW (id, name ) VALUES ( 1 , 'One')
INSERT INTO TABLEFORVIEW (id, name ) VALUES ( 2 , 'Two')
INSERT INTO TABLEFORVIEW (id, name ) VALUES ( 3 , 'Three')
* пехали
SET MULTILOCKS ON 
SET DELETED OFF 
*
* поставим буфферизацию на табличку
CURSORSETPROP("Buffering" , 5 ,'TABLEFORVIEW')
*
* изменим первую запись в таблице
GO TOP IN TABLEFORVIEW
replace name WITH 'OneOne' IN TABLEFORVIEW
* и удалим её
DELETE IN TABLEFORVIEW
* запишем
?TABLEUPDATE(.t.,.t.,'TableForView')
* закроем и откроем табличку
USE IN TABLEFORVIEW
USE TABLEFORVIEW IN  0  && табличка не буфферизирована
* смотрим - видим измененную и удаленную запись
BROWSE 

*
* делаем тоже самое со View
USE LOCALVIEWDB!LocalVIEW IN  0 
* идем на вторую запись
GO  2  IN LocalView
replace name WITH 'TwoTwo' IN LocalVIEW
* и удалим её
DELETE IN LocalVIEW
* записываем
?TABLEUPDATE(.t.,.t.,'LocalView')
* смотрим View - всё замечательно есть изменение, есть удаление
SELECT LocalView 
BROWSE 
* смотрим табличку - а тут прилипла только пометка на удаление
SELECT TABLEFORVIEW
BROWSE 
...
Рейтинг: 0 / 0
29.06.2006, 19:39
    #33822703
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Replace, Delete in Transaction
Комментирую

1) "Голая таблица"

Работаем только с буфером таблицы. Все изменения по команде TableUpdate() переносятся из буфера в исходную таблицу. Причем сначала переносится метка на удаление и только потом модификация.

Как я это узнал. Поставил в триггерах таблицы .F. после того, как TableUpdate() вернул .F. посмотрел значение 5 элемента массива полученного по AERROR(). Там стояла 3. Т.е. сработал триггер на удаление.

2) Local View

По команде TableUpdate() происходит 2 события:

-) Сброс буфера Local View в собственно Local View
-) Перенос изменений сделанных в Local View в исходную таблицу. Заметь, здесь речь уже вообще не идет о буферах. Это просто обновление данных в одной таблице данными из другой.

Хотя порядок этих двух операций скорее всего обратный: сначала перенос из буфера Local View в исходную таблицу, а потом сброс буфера самого Local View.

Перед переносом вполне логично делается анализ на тип выполняемого изменения. Сначала делается анализ на факт удаления. Имеет место быть. Вот и выполняем удаление.

А вот следующего шага на модификацию уже удаленной записи не делается, что вполне логично. Какой смысл изменять не существующую запись?

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

Попробуй в созданном Local View создать новую запись и тут же ее удалить. При сбросе буфера в исходной таблице новой удаленной записи не появится. Однако если то же самое сделать на самой таблице, то новая удаленная запись появится.

Разные механизмы работают при "простом" сбросе буфера и при переносе изменений из Local View в таблицу источник.
...
Рейтинг: 0 / 0
30.06.2006, 11:05
    #33823546
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Replace, Delete in Transaction
ВладимирМКомментирую

1) "Голая таблица"

Работаем только с буфером таблицы. Все изменения по команде TableUpdate() переносятся из буфера в исходную таблицу. Причем сначала переносится метка на удаление и только потом модификация.


Ну, что же, ты подтвердил мои предыдущие слова

PaulWistДля буфф. таблицы сбрасываются как изменения поля, так и пометка на удаление, а для View сбрасывается только пометка на удаление.

ВладимирМ2) Local View
.......
Перед переносом вполне логично делается анализ на тип выполняемого изменения. Сначала делается анализ на факт удаления. Имеет место быть. Вот и выполняем удаление.

А вот следующего шага на модификацию уже удаленной записи не делается, что вполне логично. Какой смысл изменять не существующую запись?

Вот это-то и удивило автора топика, для таблицы делаем replace-delete, получаем все изменения в таблице, он ожидал такого же поведения и для View, ан нет "облом-с".

Поэтому было написано

PaulWistДа, смотри-ка, какая особенность обновления view, действительно новое значение игнорируется, а выставляется только пометка на удаление. Даже затрудняюсь сказать глюк это или так и должно быть, совершенно разное поведение для таблицы и view

Ну и твоё заключение

ВладимирМрРазные механизмы работают при "простом" сбросе буфера и при переносе изменений из Local View в таблицу источник.
...
Рейтинг: 0 / 0
30.06.2006, 12:34
    #33823975
Sea.s2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Replace, Delete in Transaction
Что-то не получается переоткрыть структурный индекс и уничтожить неструктурный перед удалением

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
LOCAL lcIdx

  CURSORSETPROP("Buffering",  3 , ThisForm.Alias)
  m.lcIdx   = SET("Index")
  m.lcIdx   = SUBSTR(lcIdx,  1 , AT(".cdx", lcIdx) +  3 )
  MESSAGEBOX(SET("Index"))
  CLOSE INDEXES
  &&SET INDEX TO
  SET INDEX TO &lcIdx
  SET ORDER TO
CURSORSETPROP("Buffering",  5 , ThisForm.Alias)

REQUERY()


После requery()
неструктурного индекса нет структурный виден на диске но
set index устанавливает связь на индекс исходной таблицы а стуктурный индекс view не видит
...
Рейтинг: 0 / 0
03.07.2006, 08:22
    #33826448
Sea.s2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Replace, Delete in Transaction
Вот это что за бред выполняю код без DELETE все проходит без ошибки

С DELETE проподает структурный индекс view и связь уходит на индекс исходной таблицы и соответсвенно вылетает ошибка TAG индекса не найден
у меня уже голова идет кругом от итих заморочек ну в чем тут дело
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
LOCAL lcIdx, lcOrder, lcDesc
  CURSORSETPROP("Buffering",  3 , ThisForm.Alias)
    m.lcOrder = ORDER(ThisForm.Alias)
    m.lcIdx   = SET("Index")
    m.lcIdx   = SUBSTR(lcIdx,  1 , AT(".cdx", lcIdx) +  3 )
    SET INDEX TO &lcidx
    IF !EMPTY(lcOrder) THEN
      SET ORDER TO TAG (lcOrder) ASCE
    ENDIF
  CURSORSETPROP("Buffering",  5 , ThisForm.Alias)
  
        BEGIN TRANSACTION  
       DELETE  &&Если убрать то все будет нормально
      TABLEUPDATE(.F., .T., ThisForm.Alias)
       ROLLBACK
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Replace, Delete in Transaction / 25 сообщений из 32, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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