powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблема! Если заблокировать запись в таблице под VFPRO, а потом другим приложением с OLE DB VFPRO 8.0 делать изменения все ОК!
12 сообщений из 12, страница 1 из 1
Проблема! Если заблокировать запись в таблице под VFPRO, а потом другим приложением с OLE DB VFPRO 8.0 делать изменения все ОК!
    #32579087
andrewFOX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Причем выборка из измененной таблицы, показывает измененную запись, НО...
Если рефрешим таблицу в ФОКСЕ, запись старая, уходим из фокса, загружаем по новой, вновь грузим таблицу-запись старая. Если кто наступал на грабли поделитесь, чтоб не больно полбу било КАК...или проблема в провайдере?
...
Рейтинг: 0 / 0
Проблема! Если заблокировать запись в таблице под VFPRO, а потом другим приложением с OLE DB VFPRO 8.0 делать изменения все ОК!
    #32579094
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слишком мало информации. Вообще-то у мяня все работает...

Нельзя ли более конкретно?

- какие приложения
- куски кода
- буферизация
- это свободные таблицы?
- транзакции?
...
Рейтинг: 0 / 0
Проблема! Если заблокировать запись в таблице под VFPRO, а потом другим приложением с OLE DB VFPRO 8.0 делать изменения все ОК!
    #32579193
andrewFOX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Слишком мало информации. Вообще-то у мяня все работает...

Нельзя ли более конкретно?

- какие приложения
1c
- куски кода
Con = CreateObject("ADODB.Connection");
Com = CreateObject("ADODB.Command");
recset = CreateObject("ADODB.RecordSet");
StrCon="Provider=Microsoft.Jet.OLEDB.4.0;
|Data Source=d:\ADODBTEL\;
|Extended Properties=dBASE IV";
Con.Open(strCon);
Cmd.ActiveConnection = Con;
StrCom="UPDATE tel SET id_N='XXXXXX' where num='НННННН' and ret is null";
recset.CursorType=2;
recset.LockType=2;
recset=Execute(strcom);
StrCom="select num,id_n,ret from tel where num='8462458488'";
recset=Execute(strcom);
Так вот здесь select выдает измененную строку!
- буферизация
чего?
- это свободные таблицы?
да.
- транзакции?
вот здесь мне кажется что нужно явное подтверждение транзакции
я прав?
...
Рейтинг: 0 / 0
Проблема! Если заблокировать запись в таблице под VFPRO, а потом другим приложением с OLE DB VFPRO 8.0 делать изменения все ОК!
    #32579541
andrewFOX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема уточнилась, оказывается не может измениться поле на котором стоит курсор-указаталь, т.е. в режиме редактирования поля. Как это поббороть, хотя бы получить сведения, редактируется ли в данный момент поле или нет?
...
Рейтинг: 0 / 0
Проблема! Если заблокировать запись в таблице под VFPRO, а потом другим приложением с OLE DB VFPRO 8.0 делать изменения все ОК!
    #32580117
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раз никто не берется ответить, прийдется продолжить:

Копать надо тут:

recset.LockType=2; ('Pessimistic Lock)

Таким образом если Вы начали что-то делать с записью, то уже никто больше сделать ничего не сможет. Если поменять значение на 3 то сохраняться будут последние изменения...

Как проверить заблокирована запись или нет? Если в FoxPro то очень просто:

Код: plaintext
1.
2.
3.
4.
if lock() then
* можно что-то делать
else
* запись кем-то блокирована, делать ничего нельзя...
endif

- транзакции со свободными таблицами можно применять только в VFP 9.0 :(

авторПроблема уточнилась, оказывается не может измениться поле на котором стоит курсор-указаталь, т.е. в режиме редактирования поля. Как это поббороть, хотя бы получить сведения, редактируется ли в данный момент поле или нет?

Если указатель стоит в FoxPro - то надо там поставить оптимистическую блокировку строки или таблицы - например

Код: plaintext
1.
SELECT tel
=CURSORSETPROP("Buffering" , 3 ) 

И не забыть потом сохранить изменения (хотя при перемещении указателя запись сохранится автоматически, подавив любые изменения которые были внеснены кем-то за время вашего бездействия):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
k=SELECT( )
FOR I =  1  TO k
  IF NOT EMPTY ( ALIAS(I) )
    SELECT (I)
    DO CASE
    CASE CURSORGETPROP("Buffering")= 5 
      DO chbuf
    CASE CURSORGETPROP("Buffering")= 3 
      DO chbufr
    OTHERWISE
    ENDCASE
  ENDIF
ENDFOR

Код: 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.
* check for all table
PROCEDURE chbuf
  IF CURSORGETPROP("Buffering")= 5 
    LOCAL llOverwrite,llChanged, lnField,lcField, lnRec
    GO TOP
    lnRec=GETNEXTMODIFIED( 0 )
    DO WHILE lnRec<> 0 
      GOTO lnRec
      llCnanged=.F.
      llOverwrite=.F.
      FOR lnField= 1  TO FCOUNT()
        lcField=FIELD(lnField)
        IF CURVAL(lcField)<>OLDVAL(lcField)
          llCnanged=.T.
          EXIT
        ENDIF
      ENDFOR
      IF llCnanged
        lnResult=MESSAGEBOX("Somebody locked your table. What we have to do?", 4 ,"Try again")
        IF lnResult= 6 
          llOverwrite=.T.
        ENDIF
      ENDIF
      IF llCnanged AND NOT llOverwrite
        =TABLEREVERT()
      ELSE
        IF m.gltransact
          BEGIN TRANSACTION
          =TABLEUPDATE(.F.,.T.)
          END TRANSACTION
        ELSE
          =TABLEUPDATE(.F.,.T.)
        ENDIF
      ENDIF
      lnRec=GETNEXTMODIFIED(lnRec)
    ENDDO
  ENDIF
  RETURN

Код: 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.
* check for only one row in table
PROCEDURE chbufr
  IF CURSORGETPROP("Buffering")= 3 
    LOCAL lnField,lcField && llOverwrite,llChanged,
    glCnanged=.F.
    glOverwrite=.F.
    FOR lnField= 1  TO FCOUNT()
      lcField=FIELD(lnField)
      IF CURVAL(lcField)<>OLDVAL(lcField)
        glCnanged=.T.
        EXIT
      ENDIF
    ENDFOR
    IF glCnanged
      lnResult=MESSAGEBOX("Somebody locked your table. What we have to do?", 4 ,"Try again")
      IF lnResult= 6 
        glOverwrite=.T.
      ENDIF
    ENDIF
    IF glCnanged AND NOT glOverwrite
      =TABLEREVERT()
    ELSE
      IF m.gltransact
        BEGIN TRANSACTION
        =TABLEUPDATE(.F.,.T.)
        END TRANSACTION
      ELSE
        =TABLEUPDATE(.F.,.T.)
      ENDIF
    ENDIF
  ENDIF
  RETURN
...
Рейтинг: 0 / 0
Проблема! Если заблокировать запись в таблице под VFPRO, а потом другим приложением с OLE DB VFPRO 8.0 делать изменения все ОК!
    #32580127
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, кстати я тут у Вас не увидел OLE DB Provider VFP 8.0

У Вас Microsoft.Jet.OLEDB.4.0 - это абсолютно разные вещи, причем в первом намного меньше ошибок и проблем, чем в Jet :(
...
Рейтинг: 0 / 0
Проблема! Если заблокировать запись в таблице под VFPRO, а потом другим приложением с OLE DB VFPRO 8.0 делать изменения все ОК!
    #32580295
andrewFOX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Sergey Ch: Спасибо за очень содержательный ответ!, Но вся проблема заключается в том, чтобы рулить(апдейтить, делать вставки, просмотр и т.д) таблицами из 1с(это как раз основное направление), потому что невозможно на данный момент отследить все изменения сделанные пользвателями в базе. А с помощью 1с, происходит регистрация пользователя, и логируются все действия с таблицами-таблицы свободные! Так вот чтобы отойти от оболочки Фокса, было принято решение сделать доступ из 1с, но в тоже время есть некоторые критические пользователи, которым все таки нужно оставить доступ к таблицам из Фокса, и вот тут и назрела проблема, как из 1с, делать изменения, когда на поле записи в Фоксе стоит указатель, а в это время 1с делает изменения, тут и получаетсЯ все описанное, т.е. 1с делает изменения, получает выборку, что изменения произошли, а на самом деле, никаких изменений нет и впомине. Так вот с этой проблемой как? ПЕРВИЧНО не ФОКС, а правильность изменений из 1с через OLE или ODBC!
...
Рейтинг: 0 / 0
Проблема! Если заблокировать запись в таблице под VFPRO, а потом другим приложением с OLE DB VFPRO 8.0 делать изменения все ОК!
    #32580526
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуем разобраться:

1. Можете ли Вы включить буферизацию в старую программу FoxPro? Если да, то ответ как это сделать смотрите выше...

2. Нельзя ли попробовать вместо Microsoft.Jet.OLEDB.4.0 использовать OLE DB VFPRO 8.0? Что - то я смутно припоминаю - в MS.JET были какие-то проблемы с обновлением данных (да и старый он очень как и глючный)...

3. Попробуйте поиграть с настройками:

recset.CursorType=2;
recset.LockType=2;

Good luck!

P.S. Может попробовать задать данный вопрос на форуме 1С?
...
Рейтинг: 0 / 0
Проблема! Если заблокировать запись в таблице под VFPRO, а потом другим приложением с OLE DB VFPRO 8.0 делать изменения все ОК!
    #32581006
Chuveljov Andrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А написать OLE сервер для вашего набора данных не судьба?
___________________
Всё вышеизложенное есть моё частное мнение и не претендует на полноту изложения.
...
Рейтинг: 0 / 0
Проблема! Если заблокировать запись в таблице под VFPRO, а потом другим приложением с OLE DB VFPRO 8.0 делать изменения все ОК!
    #32581024
Chuveljov Andrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я имел ввиду написать на Фоксе..
Единственный минус - необходимость держать фоксовые библиотеки.
___________________
Всё вышеизложенное есть моё частное мнение и не претендует на полноту изложения.
...
Рейтинг: 0 / 0
Проблема! Если заблокировать запись в таблице под VFPRO, а потом другим приложением с OLE DB VFPRO 8.0 делать изменения все ОК!
    #32581106
andrewFOX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Chuveljov Andrew: Таблички на файловом сервере, доступ практически со всех раб. мест, на все раб местах используется 1с, зачем OLE server, когда совершенно ноормально использовать ОЛЕ клиента, проблема-то только в фоксе.
2 all: Спасибо всем за участие в разговоре. Проблема разрешилась. Все просто банально. Использовали JET, а надо было использовать нормальный ОЛЕ провайдер, сами короче накосячили, поставили нормальное ПО, и все заиграло! Спасибо!
...
Рейтинг: 0 / 0
Проблема! Если заблокировать запись в таблице под VFPRO, а потом другим приложением с OLE DB VFPRO 8.0 делать изменения все ОК!
    #32581179
Chuveljov Andrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrewFOX2 Chuveljov Andrew: Таблички на файловом сервере, доступ практически со всех раб. мест, на все раб местах используется 1с, зачем OLE server, когда совершенно ноормально использовать ОЛЕ клиента, проблема-то только в фоксе.


Та программа, которая обрабатывает OLE вызовы, называется OLE server, а та, которая пользучает результат - OLE client.

Я сам в своё время пытался скрестить 1С с Фоксом. Отказался ввиду несостоятельности 1С на тех объёмах данных.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблема! Если заблокировать запись в таблице под VFPRO, а потом другим приложением с OLE DB VFPRO 8.0 делать изменения все ОК!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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