powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / После TableUpdate() записи в курсоре помечаются как удалённые
5 сообщений из 5, страница 1 из 1
После TableUpdate() записи в курсоре помечаются как удалённые
    #36275169
DenDen79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть удалённое представление

View no05_1
*UpdateType 1
*WhereType 1
*FetchMemo TRUE
*ShareConnection TRUE
*SendUpdates TRUE
*Prepared FALSE
*CompareMemo TRUE
*FetchAsNeeded FALSE
*UseMemoSize 255
*FetchSize -1
*MaxRecords -1
*Tables no05_1
*SQL select c_lg,c_us,date_b,prav_vl,q_ld,proc_lg,type_nr,nrpp,nor_lg,nor_dp,bg_1,bg_2,form_co from no05_1
*ConnectName city2000s01
*SourceType 2
*BatchUpdateCount 1

выполняю след. код

open database ...
use no05_1 in 0
select no05_1
? cursorsetprop('buffering',5) && возвр. .Т.
repl all bg_1 with 0
? tableupdate(.T.,.T.) && возвр. .Т.

в результате строки курсора, в которых bg_1 равнялось 0 помечаются на удаление, в других значение меняется, записи как удалённые не помечаются

ВОПРОС: почему записи помечаются на удаление, что я делаю не правильно
...
Рейтинг: 0 / 0
После TableUpdate() записи в курсоре помечаются как удалённые
    #36275261
DenDen79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавлю, что на сервер данные уходят нормально. и после requery() в курсоре видны те зименения которые нужно. Но почему после TableUpdate записи помечаются на удаление не могу найти ответа. Подскажите где искать плз!
...
Рейтинг: 0 / 0
После TableUpdate() записи в курсоре помечаются как удалённые
    #36275426
DenDen79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нашёл что нужно сделать чтобы такого небыло. вместо tableupdate(.t.,.t.) использовать tableupdate(.f.,.t.) или tableupdate(). только пока не совсем чётко представляю почему..... буду разбираться.

если использовать tableupdate(.t.) aerror выдаёт ошбку update conflict in cursor....

может кто подскажет где можно найти толковую информацию, чтобы разобраться во всех этих буферизациях?
...
Рейтинг: 0 / 0
После TableUpdate() записи в курсоре помечаются как удалённые
    #36275761
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TableUpdate() ничего не удаляет. Он всего-лишь сбрасывает изменения из буфера View в таблицу-источник.

TableUpdate(.F.) - сбрасывает буфер одной (текущей) записи View
TableUpdate(.T.) - сбрасывает буфер всех записей View

Сообщение Update Conflict говорит о том, что пока Вы вносили изменения во View какой-то другой пользователь изменил те же самые данные. Причем "другой пользователь" не обязательно "другой человек". Это может быть и другое View, например.

Если данные оказались удалены, значит либо их удалил другой пользователь, либо в базе данных сработал триггер при модификации поля.
...
Рейтинг: 0 / 0
После TableUpdate() записи в курсоре помечаются как удалённые
    #36276573
DenDen79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разобрался в чём была причина , но для меня по прежнему загадка что такого делает VFP , что в результате сброса буфера в удалённую таблицу, запись в локальном курсоре становится удалённой .

ОЧЕНЬ БЫ ХОТЕЛОСЬ УСЛЫШАТЬ МНЕНИЕ ДРУГИХ УЧАСТНИКОВ ФОРУМА. А ТО ВДРУГ Я ЧТО-НИБУДЬ ОПЯТЬ ПРОГЛЯДЕЛ ))))

Итак проводил следующие эксперименты

1 компьютер . На нём запущен MySQL сервер

В VFP на этом же компьютере делаю следующее:

1) create database data1
2) создаю соединение в Database disiner
3) добавляю Remote View на таблицу no05_1
4) выставляю нужные настройки

В итоге получился вот такой листинг команды LIST DATABASE

Код: 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.
Database Name:            DATA1			
Database Path:          h:\city2000s1\data1.dbc			
Database Version:       10			

Database   StoredProceduresDependencies			

-----------------------------------------------------------------------------------
Connection conn			| View no05_1
-----------------------------------------------------------------------------------
*Asynchronous	FALSE		| *UpdateType      1
*BatchMode	TRUE		| *WhereType       1
*DispWarnings	TRUE		| *FetchMemo       TRUE
*DispLogin	1		| *ShareConnection FALSE
*Transactions	1		| *SendUpdates     TRUE
*ConnectTimeOut	15		| *Prepared        FALSE
*QueryTimeOut	0		| *CompareMemo     TRUE
*IdleTimeOut	0		| *FetchAsNeeded   FALSE
*WaitTime	100		| *UseMemoSize     255
*PacketSize	4096		| *FetchSize       -1			
*Datasource	CITY2000S	| *MaxRecords      -1			
*UserId	cityadmin		| *Tables          no05_1			
*Password	city		| *SQL             SELECT * FROM no05_1 No05_1			
*Database	city2000s01	| *ConnectName     conn			
				| *SourceType      2			
				| *BatchUpdateCount1			
-----------------------------------------------------------------------------------
Field c_lg			| Field c_us			| Field date_b
-----------------------------------------------------------------------------------
*KeyField	TRUE		| *KeyField	TRUE		| *KeyField	TRUE
*Updatable	FALSE		| *Updatable	FALSE		| *Updatable	FALSE
*UpdateName	no05_1.c_lg	| *UpdateName	no05_1.c_us	| *UpdateName	no05_1.date_b
*DataType	C(2)		| *DataType	C(2)		| *DataType	C(10)
-----------------------------------------------------------------------------------
Field nor_dp			| Field bg_1			| Field bg_2
-----------------------------------------------------------------------------------
*KeyField	FALSE		| *KeyField	FALSE		| *KeyField	FALSE
*Updatable	TRUE		| *Updatable	TRUE		| *Updatable	TRUE
*UpdateName	no05_1.nor_dp	| *UpdateName	no05_1.bg_1	| *UpdateName	no05_1.bg_2
*DataType	N(3)		| *DataType	N(2)		| *DataType	N(2)
-----------------------------------------------------------------------------------


Создаю процедуру след. вида:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CLEAR
CLOSE DATABASE ALL
OPEN DATABASE data1 EXCLUSIVE
USE no05_1 IN  0 
CURSORSETPROP ('buffering', 3 ) && хотя и так данный тип буферизации используется по умолчанию
GO TOP
REPLACE bg_1 WITH  0 
? GETFLDSTATE('bg_1')
? OLDVAL('bg_1')
? bg_1
IF ! TABLEUPDATE () && здесь варианты описанные ниже 
   AERROR (atmp)
   ? ALLTRIM (STR (atmp( 1 )))+' '+atmp( 2 )
   TABLEREVERT ()
ELSE
   ? 'ok'
ENDIF
BROW

далее следующие варианты выполнения:

1) если до выполнения команды REPLACE в поле bg_1 находилась 1
то при использовании команды TABLEUPDATE( .F.,.F. )
выводится следующее:
2
1
0
ок
Лог на серваке показывает, что пришла команда
Код: plaintext
UPDATE no05_1 SET bg_1= 0  WHERE c_lg='01' AND c_us='01' AND date_b='01.01.2001';

2) если до выполнения команды REPLACE в поле bg_1 находился 0
то при использовании команды TABLEUPDATE( .F.,.F. )
выводится следующее:
2
0
0
1585 Update conflict !!!!!!!!!!!!!!!!!
ТЕМ НЕ МЕНЕЕ лог на серваке показывает, что пришла команда
Код: plaintext
UPDATE no05_1 SET bg_1= 0  WHERE c_lg='01' AND c_us='01' AND date_b='01.01.2001';

3)
если до выполнения команды REPLACE в поле bg_1 находилась 1
то при использовании команды TABLEUPDATE( .T.,.T. )
выводится следующее:
2
1
0
ок
Лог на серваке показывает, что пришла команда
Код: plaintext
UPDATE no05_1 SET bg_1= 0  WHERE c_lg='01' AND c_us='01' AND date_b='01.01.2001';

4) если до выполнения команды REPLACE в поле bg_1 находился 0
то при использовании команды TABLEUPDATE( .T.,.T. )
выводится следующее:
2
0
0
ок !!!!!!!!!!!!!!!!!!!!
Лог на серваке показывает, что пришла команда
Код: plaintext
UPDATE no05_1 SET bg_1= 0  WHERE c_lg='01' AND c_us='01' AND date_b='01.01.2001';
ВРОДЕ ВСЁ ПУТЁМ, НО ОБНОВЛЯЕМАЯ СТРОКА КУРСОРА ПОМЕЧАЕТСЯ НА УДАЛЕНИЕ!!!

Переключаюсь на программу MySQL query browser
Выполняю запрос
Код: plaintext
UPDATE no05_1 SET bg_1= 0  WHERE c_lg='01' AND c_us='01' AND date_b='01.01.2001';
и вижу следующее:
если данные действительно обновились, то выводится "1 row affected", если нет (когда bg_1 уже и так = 0) то выводится "query returned no result". вот тут у меня в голове начинает брезжить что-то похожее на решение проблемы .
Открываю администратора источников данных ODBC, смотрю настройки своего источника данных (connector/ODBC 3.51.27 Configure Data Source Name).
Среди всех прочих нахожу такую " Return Matching Rows ". Описание для данной настройки следующее:
The client can`t handle that MySQL returns the true value of affected rows. If this flag is set, MySQL returns ``found rows" instead. You must have MySQL 3.21.14 or newer to get this work.

Ну собственно и ставлю эту галочку. И ВСЁ ЗАРАБОТАЛО КАК НАДО!!!!!! Покрайней мере я очень расчитываю, что ничего не проглядел ))))
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / После TableUpdate() записи в курсоре помечаются как удалённые
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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