powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Новичек + VFP + SQL Server2000
25 сообщений из 34, страница 1 из 2
Новичек + VFP + SQL Server2000
    #32935371
StasX4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!!!

Вот решил совокупить VFP и SQL Server... И пошли трудности... :(

1) Создал таблицу в SQL Server 2000 с полями timestamp,char,char;
2) Добавил несколько записей в таблицу;
3) Сделал в SQL Server 2000 View;
4) Сделал в VFP Remote View ссылающуюся на View из SQL Server;
5) Организовал форму с гридом, в dataenvironment добавил view;

Изменяю значение поля с типом char одной записи... Перехожу на другую запись. Потом возвращаюсь к записи, которую недавно редактировал и опять ее пытаюсь редактировать... Перехожу опять на другую запись и... Update conflict...
Как читал на форуме попытаюсь через aerror выяснить точную причину... На вскидку что это может быть???

И еще... Можете подсказать как реализовать такую схему работы в многопользовательском режиме?:

1) Пользователь №1 открыл форму со списком платежек.
2) Пользователь №2 тоже открыл форму со списком платежек.
3) Пользователь №1 выбрал платежку №44 и открыл форму для ее редактирования.
4) Пользователь №2 тоже выбрал платежку №44 и попытался открыть форму для ее редактирования.

Нужно сделать так чтобы эти два пользователя не могли одновременно редактировать одну и ту же платежку. Т.е. возможен один из следующих вариантов работы:

а) Когда пользователь №1 открыл платежку для редактирования, то №2 уже не может открыть ее для редактирования. Т.е. при попытки открытия выскакивает сообщение о том, что платежка редактируется другим пользователем.
б) Когда пользователь №1 открыл платежку для редактирования, то №2 при попытке открытия может только просмотреть ее. Т.е. у второго пользователя все поля формы имеют значение read only (делается программно).

А в идеале было бы здорово если бы в списке платежек стояла бы отметка, что данная запись редактируется уже.


Заранее большое спасибо!!!
...
Рейтинг: 0 / 0
Новичек + VFP + SQL Server2000
    #32935378
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StasX4 А в идеале было бы здорово если бы в списке платежек стояла бы отметка, что данная запись редактируется уже.
Ну так и кто Вам мешает это сделать

По поводу первого вопроса - воспользуйтесь посиком - мы уже многократно этот вопрос обсудждали.

Good luck!
...
Рейтинг: 0 / 0
Новичек + VFP + SQL Server2000
    #32935443
StasX4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По первому вопросу я уже читал воспользовавшись поиском... Буду в понедельник экспериментировать...

А вот по второму вопросу... Мне мешает это сделать незнание данных способов реализации или хотя бы направления в котором нужно думать...

С уважением, Стас.
...
Рейтинг: 0 / 0
Новичек + VFP + SQL Server2000
    #32935493
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi StasX4!

> 3) Сделал в SQL Server 2000 View;

Зачем этот лишний шаг?

> Изменяю значение поля с типом char одной записи... Перехожу на другую
> запись. Потом возвращаюсь к записи, которую недавно редактировал и опять
> ее пытаюсь редактировать... Перехожу опять на другую запись и... Update
> conflict...
> Как читал на форуме попытаюсь через aerror выяснить точную причину...
> На вскидку что это может быть???

Плохо заданы свойства представления -
KeyFieldList/UpdatableFieldList/WhereType, не обновляется поле Timestamp
и/или ключевое поле, после "сохранения", которое в случае позаписной
буферизации (3) происходит при перемещении между этими самыми записями...
Или накладывается то, что на шаге 3 сделано промежуточное звено, которое
может как-то мешать.

> И еще... Можете подсказать как реализовать такую схему работы в
> многопользовательском режиме?:

Никак. Конфликт можно отследить лишь в момент сохранения записи - т.е.
"начать править" оно могут, а вот при сохранении "второй" как раз и получит
ошибку "Update conflict" которую можно по разному решать.
Теоретически для того что ты хочешь сделать требуется наложение блокировки
на запись (чего MS SQL насколько я в курсе не умеет - у него страницы
блокируются, а там может быть куча записей) - и опять же теоретически это
можно сделать, но практически это вызовет такую кучу проблем, что лучше
забыть про этот способ уже сейчас.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Новичек + VFP + SQL Server2000
    #32935521
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StasX4 А вот по второму вопросу... Мне мешает это сделать незнание данных способов реализации или хотя бы направления в котором нужно думать...

Все очень просто - вводится поле - запись взята для работы - при взятие записи пишите туда 1. Остальные пользователь получают доступ только на чтение... Но это все надо писать Вам самому - то есть этот контроль доступа и не забыть случай, когда клиент может взять запись и "отвалиться" - тут можно по таймеру очищать поле, например раз в час

Good luck!
...
Рейтинг: 0 / 0
Новичек + VFP + SQL Server2000
    #32937209
StasX4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь что так долго не писал...

Решал вопрос о том как узнать обновил ли другой пользователь таблицу...
Для этого ввел в таблицу поле timestamp...
Создал курсор вычисляющий максимум по полю timestamp...
Этот максимум запоминается в переменный при открытии формы со списком...
Создал таймер, который каждые 60 секунд обновляет курсор с результирующим максимум по timestamp и сравнивает с запомненным результатом и если он отличается,то обновляет курсор с основным списком.
Скажите, мыслю в правильном направлении???

У меня сейчас созрел вопрос... А что произойдет если последующая запись увеличит значение поля timestamp превышающее 8 байт? Сбросится на ноль, зациклиться или же автоматически перенумеруется?

P.S.
С первым вопросом по поводу update conflict разобрался... Поставил не там галочку в представлении... Поставил на timestamp... :)

А вот со вторым вопросом никак... О варианте Sergey_Ch уже думал, но вот его недостаток, о котором он сам указал, меня смущает немного...
Просто хочется чтобы все работало по человечески, а не через одно место... Типа, пользователь ввел дофига данных, а во время сохранения узнает, что кто-то другой уже редактирует и он не может ничего сохранить... Обидно...
Может все-таки есть более корректное решение данного вопроса???
...
Рейтинг: 0 / 0
Новичек + VFP + SQL Server2000
    #32937378
Александр Третьяков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я тоже перепробовал массу вариантов, реализовал следующую схему
1. на сервере только хранимые процедуры, которые отдаю данные на локальные машины в таблицы
2. если кто-то открыл позыцию то он пометил поле useredit своим id, когда покидает накоаную, то обнуляет это поле.
...
Рейтинг: 0 / 0
Новичек + VFP + SQL Server2000
    #32937380
Александр Третьяков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
изменяю данные на сервере тоже с помощью хранимых процедур.
...
Рейтинг: 0 / 0
Новичек + VFP + SQL Server2000
    #32937477
Cyrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
StasX4Может все-таки есть более корректное решение данного вопроса???
@@spid - идентификатор текущего процесса (соединения) на SQL Server
sysprocesses - таблица, хранящая информацию об активных процессах

Query Analyzer есть?
Подключаемся к серверу, создаем предварительные условия
Код: 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.
-- тестовая таблица
CREATE TABLE [dbo].[test_table] (
	[id] [int] IDENTITY ( 1 ,  1 ) NOT NULL PRIMARY KEY, -- ключ
	[data] [varchar] ( 50 ) NOT NULL , -- какие-то данные, для примера один столбец
	[spid] [smallint] NULL -- идентификатор процесса либо NULL
) ON [PRIMARY]
GO
-- Выборка из таблицы, столбец readonly в фоксе будет логического типа
CREATE PROCEDURE select_test_table 
@id int
AS
SET NOCOUNT ON
DECLARE @spid smallint
SELECT @spid = spid FROM test_table WHERE id = @id
IF @spid IS NULL 
OR NOT EXISTS(SELECT * FROM master.dbo.sysprocesses WHERE spid = @spid)
	UPDATE test_table SET spid = @@spid
	WHERE id = @id 
SELECT data, 
CAST(CASE WHEN spid = @@spid THEN  0  ELSE  1  END AS bit) AS readonly
FROM test_table WHERE id = @id
GO
-- обновление данных и сброс идентификатора процесса в NULL
-- "чужие" данные обновлять нельзя
CREATE PROCEDURE update_test_table
@id int,
@data as varchar ( 50 )
AS
SET NOCOUNT ON
DECLARE @spid smallint
SELECT @spid = spid FROM test_table WHERE id = @id
IF @spid = @@spid 
	UPDATE test_table SET data = @data, spid = NULL
	WHERE id = @id
GO
-- INSERT, просто INSERT
CREATE PROCEDURE insert_test_table 
@data as varchar( 50 )
AS
SET NOCOUNT ON
INSERT INTO test_table (data) VALUES (@data)
GO
-- удаление данных 
-- "чужие" данные удалять нельзя
CREATE PROCEDURE delete_test_table
@id as int
AS
SET NOCOUNT ON
DECLARE @spid smallint
SELECT @spid = spid FROM test_table WHERE id = @id
IF @spid IS NULL 
OR NOT EXISTS(SELECT * FROM master.dbo.sysprocesses WHERE spid = @spid)
	DELETE FROM test_table WHERE id = @id
GO
-- сброс идентификатора процесса в NULL
-- например, по кнопке "отмена"
CREATE PROCEDURE free_test_table
@id int
AS
SET NOCOUNT ON
DECLARE @spid smallint
SELECT @spid = spid FROM test_table WHERE id = @id
IF @spid = @@spid 
	UPDATE test_table SET spid = NULL
	WHERE id = @id
GO
Жмем F5 и открывает в QA новое окно
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
EXEC insert_test_table '11111'
GO
EXEC insert_test_table '22222'
GO
EXEC insert_test_table '33333'
GO
EXEC select_test_table  3 
GO
SELECT * FROM test_table
GO
Снова жмем F5 и открывает в еще одно окно
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
EXEC select_test_table  3 
GO
EXEC update_test_table  3 , '44444'
GO
EXEC select_test_table  3 
GO
EXEC free_test_table  3 
GO
SELECT * FROM test_table
GO
Зкарываем окно № 2 (всесте с ним закрывается соединение и процесса больше нет). В третьем окне опять жмем F5.
Сравниваем результаты.
Похожее проделываем в фоксе с помощью формочек, sqlconnect() и sqlexec(). учитывая, что GO - это разделитель группы команд, а не команда TSQL.

PS подробности в BOL, VFP Help и на лучших форумах рунета.
...
Рейтинг: 0 / 0
Новичек + VFP + SQL Server2000
    #32937507
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi StasX4!

Скажите, мыслю в правильном направлении???
Нет.
Просто хочется чтобы все работало по человечески, а не через одно
место...
"По человечески" это и есть проверять на конфликт совместного доступа и
РАЗРЕШАТЬ этот конфликт тем или иным способом.
Типа, пользователь ввел дофига данных, а во время сохранения узнает,
что кто-то другой уже редактирует и он не может ничего сохранить
Почему не может? Вполне может - ему можно предъявить изменённые данные, он
сравнит что "другой" ввёл, и что он сам и выберет - сохранить свои данные
(переписав "чужие" конечно) или отменить то что он навводил. Для этого
предусмотрено - и TableUpdate(..., .T.) и конечно всегда можно запросить
"наисвежайшие" данные с сервера - как раз для "конфликтной" записи :)

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Новичек + VFP + SQL Server2000
    #32939786
StasX4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
@Cyrus
Спасибо, попробую поэкспериментировать... Но когда бегло проссмотрел, то кажется там нет защиты от вываливания (вернее есть, но возможны ситуации когда условия будут соблюдены)... Но это надо проверить опытным путем...

@Igor Korolyov
Почему я мыслю не в правильном направлении? Да, я допустил ошибку... Нужно было считать не максимум, а сумму по полю timestamp (максимальное значение остается прежним при удалении записи не с максимальным значением)... Естественно при подсчете суммы перевел ее в формат int в самом селекте... Проверил... Вроде работает... Где может возникнуть ошибка?

@All
Сегодня пытался разобраться с ADSI и удаленным вызовом процедур...

С ADSI ничего не получилось... Подозрения, что нужен SP по новее и винды по новее... Экспериментировал и лазил по инету несколько часов...

А с вызовом удаленных процедур не совсем понятна одна вешь... Как и где вычитать результат, который возвратила процедура используя return XX???
В курсор не возвращаются эти данные естественно, в ?@Result тоже не лезит и это тоже понятно... И другие варианты... Но тогда откуда???

Код: plaintext
1.
p=SQLEXEC(nConnect,"EXEC GetTVTimeStamp 'tstView1'","MyCursor")

Хочется обработать именно по return... По select и ?@Result1,?@Result2 понятно как...
...
Рейтинг: 0 / 0
Новичек + VFP + SQL Server2000
    #32939801
StasX4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ошибочка вышла:
Подозрения, что нужен SP по новее и винды по новее...

Я имел ввиду:

Подозрения, что нужен SP по новее как для Windows 2000 Server, так и для SQL Server...


P.S.
Я решил наконец-то зарегистрироваться... :) Но главное не это, а мучащие меня вопросы...
...
Рейтинг: 0 / 0
Новичек + VFP + SQL Server2000
    #32939917
Cyrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
StasX4Спасибо, попробую поэкспериментировать... Но когда бегло проссмотрел, то кажется там нет защиты от вываливания (вернее есть, но возможны ситуации когда условия будут соблюдены)... Но это надо проверить опытным путем...
Дык проверяй. Честно говоря, у меня кто последним ввел данные, того и тапки, поэтому всякое может быть.

StasX4А с вызовом удаленных процедур не совсем понятна одна вешь... Как и где вычитать результат, который возвратила процедура используя return XX???
Возвращаемое знаечение вещь спецфичная.. BOL читал?
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/acdata/ac_8_con_04_25f2.asp

StasX4В курсор не возвращаются эти данные естественно, в ?@Result тоже не лезит и это тоже понятно... И другие варианты... Но тогда откуда???
Код: plaintext
1.
p=SQLEXEC(nConnect,"EXEC GetTVTimeStamp 'tstView1'","MyCursor")
Хочется обработать именно по return... По select и ?@Result1,?@Result2 понятно как...
Создай отдельную ХП, которая будет обрабатывать значение, полученное от твоей ХП.
Можно, конечно и в лоб
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE PROCEDURE test_proc 
	@p1 int , 
	@p2 int OUTPUT
AS
	DECLARE @p int
	SET @p = @p2 + @p1
	SET @p2 = @p2 * @p1
RETURN @p
GO
Код: plaintext
1.
2.
3.
4.
5.
p1 =  2 
p2 =  3 
?SQLEXEC( 1 , "declare @return int exec @return=test_proc ?p1, ?@p2 select @return as value", "return")
? p1
? p2
? return.value
...
Рейтинг: 0 / 0
Новичек + VFP + SQL Server2000
    #32939940
StasX4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
@Cyrus

Да, хитро...
Интересно, а без курсора это реально сделать??? А то как-то сложно получается и леге использовать будет не return, а OUTPUT...
Сейчас проверить не имею возможности, но такой вариант может и прокатить...

Код: plaintext
1.
p=SQLEXEC(nConnect,"EXEC ?@pp=GetTVTimeStamp 'tstView1'")
...
Рейтинг: 0 / 0
Новичек + VFP + SQL Server2000
    #32939947
Cyrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
StasX4Интересно, а без курсора это реально сделать???
Через дополнительную ХП
Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE PROCEDURE test_proc2 
	@p1 int, 
	@p2 int OUTPUT, 
	@return int OUTPUT
AS
	EXEC @return = test_proc @p1, @p2 OUTPUT
GO
Код: plaintext
?SQLEXEC(nConnect, "exec test_proc2 ?p1, ?@p2, ?@pp")
StasX4А то как-то сложно получается и леге использовать будет не return, а OUTPUT...
О чем и речь. Не стоит изобретать велосипед.
StasX4Сейчас проверить не имею возможности, но такой вариант может и прокатить...
Код: plaintext
1.
p=SQLEXEC(nConnect,"EXEC ?@pp=GetTVTimeStamp 'tstView1'")

Нет, не прокатит. Выходные параметры работают тольео с ХП. В данномм случае на сервер будет передано что-то вроде
Код: plaintext
1.
2.
3.
declare @P1 int
set @P1= 0 
exec sp_executesql N'EXEC @P1 OUTPUT =GetTVTimeStamp ''tstView1''', N'@P1 int OUTPUT', @P1 output
select @P1
и ты получишь синтаксическую ошибку.
...
Рейтинг: 0 / 0
Новичек + VFP + SQL Server2000
    #32942358
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Cyrus!

А где это написано что @@spid не может повторяться? Например создали коннект
1 - он имеет spid=100 - запустили "выборку" - ХП пометила запись - потом
коннект убили, запустили через некоторое время коннект 2 и коннект 3 - они
получили например spid = 100 (повторно - ведь "старый" 100-й уже давно
умер!) и spid=101 - и если теперь запросить из коннекта 3 запись - получим
отлуп.

P.S. Даже если в рамках нормальной работы MS SQL идентификаторы не
повторяются (что вряд-ли), то например после "падения" и перезапуска сервера
они 100% будут повторяться - так что твой вариант хоть и хитёр, но весьма и
весьма небезупречен. Так что тут по любому нужна блокировка со всеми
вытекающими из этого неприятными последствиями.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Новичек + VFP + SQL Server2000
    #32942360
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi StasX4!

> Почему я мыслю не в правильном направлении?

Потому что не понимаешь ИДЕОЛОГИЮ работы клиент-серверных программ. Там в
99% случаев НЕ НУЖНЫ блокировки и соответственно там просто НЕ ДЕЛАЮТ так
как хочешь ты - а делают так как я описал - т.е. проверяют на конфликт в
момент сохранения, и разрешают конфликт тем или иным способом.
А что ты там с timestamp делаешь и как - я, уж извини, даже смотреть не
буду - глупости всё это и пустое. Делай всё проще и так как это принято и
будет тебе счастье :)

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Новичек + VFP + SQL Server2000
    #32942436
Cyrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor KorolyovА где это написано что @@spid не может повторяться? Например создали коннект
1 - он имеет spid=100 - запустили "выборку" - ХП пометила запись - потом
коннект убили, запустили через некоторое время коннект 2 и коннект 3 - они
получили например spid = 100 (повторно - ведь "старый" 100-й уже давно
умер!) и spid=101 - и если теперь запросить из коннекта 3 запись - получим
отлуп.
Резонно.

Igor KorolyovP.S. Даже если в рамках нормальной работы MS SQL идентификаторы не
повторяются (что вряд-ли), то например после "падения" и перезапуска сервера
они 100% будут повторяться - так что твой вариант хоть и хитёр, но весьма и
весьма небезупречен. Так что тут по любому нужна блокировка со всеми
вытекающими из этого неприятными последствиями.
Пожалуй, не соглашусь. Всегда можно найти какой-нибудь признак, который с большой вероятностью опредляет текущий процесс
Код: 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.
-- тестовая таблица
CREATE TABLE [dbo].[test_table] (
	[id] [int] IDENTITY ( 1 ,  1 ) NOT NULL PRIMARY KEY, -- ключ
	[data] [varchar] ( 50 ) NOT NULL , -- какие-то данные, для примера один столбец
	[spid] [smallint] NULL, -- идентификатор процесса либо NULL
	[login_time] [datetime ] NULL -- время старта процесса на сервере
) ON [PRIMARY]
GO
-- Выборка из таблицы, столбец readonly в фоксе будет логического типа
CREATE PROCEDURE select_test_table 
@id int
AS
SET NOCOUNT ON
DECLARE @spid smallint
DECLARE @login_time datetime
DECLARE @this_login_time datetime
SELECT @spid = spid, @login_time = login_time FROM test_table WHERE id = @id
SELECT @this_login_time = login_time FROM master.dbo.sysprocesses WHERE spid = @@spid
IF @spid IS NULL OR NOT EXISTS
(SELECT * FROM master.dbo.sysprocesses WHERE spid = @spid AND login_time = @login_time)
	UPDATE test_table SET spid = @@spid, login_time = @this_login_time
	WHERE id = @id 
SELECT data, 
CAST(CASE WHEN spid = @@spid THEN  0  ELSE  1  END AS bit) AS readonly
FROM test_table WHERE id = @id
GO
Ну и так далее..

Только не говори, что сервер можно перезапустить таким образом, что совпадут и spid, и login_time. Хотя не стану утверждать, что такого не можен быть :)
...
Рейтинг: 0 / 0
Новичек + VFP + SQL Server2000
    #32943725
StasX4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
@Igor Korolyov

Может быть я и не понимаю идеалогию клиент-сервер... Но... Скажем один пользователь открыл список платежных поручений и тупо глядит на него весь день. А второй пользователь в это время правит элементы этого списка. Т.е. добавляет, изменяет, удаляет...

И вопрос тогда... Как первый пользователь узнает, что таблица изменилась??? Добавить на форму кнопку "Обновить"? Не думаю, что это хороший способ... Делать по таймеру обновление таблицы каждую минуту? Тоже не лучший способ т.к. может быть ничего в таблице не поменялось, а перезапрос по любому делается по таймеру (загруз сети, сервака и при любом ежеминутном запросе вздергивается список в гриде)... Я же предлагал делать по таймеру проверку изменилась ли таблица или нет и в случае изменения производить перезапрос... (Этот вопрос никак не связан с блокировкой)
...
Рейтинг: 0 / 0
Новичек + VFP + SQL Server2000
    #32943839
Фотография FM32YO aka KID
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есмть два ответа
1 наша фирма работает на корпоративном софте (с фоксом НИЧЕГО общего!!!).
там при каждом клике мышей в любом месте формы происходит такое приятное подергивание, что наталкивает на мысль - задействован перезапрос данных + рефреш формы

2 я бы лично кнопку ОБНОВИТЬ сделал и все... чем она Вам не угодила не знаю..

2 только что додумаолся... если есть ресурсы - подключаете микрофон и вешаете на форму восприятие голосовой команда

If this.voice("ну-ка... че ж там в этом списке нового") = .t.
thisform.refresh()
.......................
Endif
...
Рейтинг: 0 / 0
Новичек + VFP + SQL Server2000
    #32945089
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Cyrus!

Всё что ты предлагаешь - это лишь способы снизить вероятность конфликта - но
это не устраняет его причину! И вообще это всё больше смахивает на попытки
кувалдой "починить" дамские часики... Проблема не в том КАК - проблема в том
ЗАЧЕМ - решив это мы просто приходим к выводу, что все эти извращения и не
нужны вовсе :) Ну не нужно в момент НАЧАЛА редактирования чего-то там
проверять! Невозможно "синхронизировать" 2 ХП (Get и Set) так, чтобы можно
было гарантировано "проэмулировать" блокировку не делая собственно реальной
блокировки. Нужно в момент ЗАПИСИ это делать - и всего делов то!

2 StasX4

Реши идеологические вопросы сначала.
- На кой пользователю видеть что там чего-то поменялось в таблице - ты когда
ЧИТАЕШЬ или ПИШЕШЬ ОТВЕТ в форуме тоже постоянно давишь на Refresh? т.е.
прочитал слови и давай его давить - а вдруг уже новое что-то написали (хотя
ещё и старое не прочитал!) Примерно такую-же логику и у себя реализуй - НАДО
новые данные - перезапроси, но не надо их "навязывать" пользователю - ибо
моментально возникнет у тебя другой вопрос, типа описанного здесь: http://forum.foxclub.ru/read.php?f=5&i=109245&t=109245
т.е. человек сам себе сделал проблему, и теперь героически с ней борется...

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Новичек + VFP + SQL Server2000
    #32947401
Cyrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor KorolyovВсё что ты предлагаешь - это лишь способы снизить вероятность конфликта - но это не устраняет его причину!
С такой же вероятностью можно можно говорить о падениии метеорита в серверный шкаф. Это как же нужно постараться, чтобы создать два подключения с одинаковыми номером и временем соединения с точностью до миллисекунды. В рабочих условиях это будет сделать довольно затруднительно.

Igor KorolyovИ вообще это всё больше смахивает на попытки
кувалдой "починить" дамские часики... Проблема не в том КАК - проблема в том
ЗАЧЕМ - решив это мы просто приходим к выводу, что все эти извращения и не
нужны вовсе :) Ну не нужно в момент НАЧАЛА редактирования чего-то там
проверять! Невозможно "синхронизировать" 2 ХП (Get и Set) так, чтобы можно
было гарантировано "проэмулировать" блокировку не делая собственно реальной
блокировки. Нужно в момент ЗАПИСИ это делать - и всего делов то!
Я нигде не писал, что это правильный подход и что так нужно поступать. Я просто хотел показать, что это возможно. Я не знаю, какие требования предъявляют пользователи к автору топика. А пользователи, это такие люди, для которых программирование, технология клиент-сервер и прочие премудрости - пустой звук, особенно когда программа работает не так, как им хотелось бы. Поэтому иногда такое приходится воротить, что становится мучительно больно за собственный код.
...
Рейтинг: 0 / 0
Новичек + VFP + SQL Server2000
    #32948845
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Cyrus!

Ты программист - и ТЫ пишешь программу. Так что разъяснить пользователю что
он мягко говоря не прав - это твоя задача.
Интересно, когда у них был бумажный документооборот, как они контролировали
чтобы 2 человека не выписывали одновременно одинаковую бумажку?

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Новичек + VFP + SQL Server2000
    #32948909
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor KorolyovИнтересно, когда у них был бумажный документооборот, как они контролировали чтобы 2 человека не выписывали одновременно одинаковую бумажку?

Класс!!! Спасибо за идею!!! :-)))
...
Рейтинг: 0 / 0
Новичек + VFP + SQL Server2000
    #32948957
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, зря Вы мою идею не рассмотрели - на Западе так многие конторы работают... А если клиент "ушел на ланч" - то есть администратор, который выкинет данного клиента из платежки и тот уже не сможет потом ее опубликовать - так как в поле кто взял - будет пусто...

But anyway, Good luck!
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Новичек + VFP + SQL Server2000
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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