powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / sqlexec(),VFP9,курсоры. Мультиобработка
13 сообщений из 13, страница 1 из 1
sqlexec(),VFP9,курсоры. Мультиобработка
    #36474642
Доброго дня всем!
В Фосксе далеко я не первый день, а вот в SQL - недавно. Столкнулся с такой проблемой:
Все таблицы хранятся на сервере sql. Интерфейс и большая часть обработки данных, естественно, в Фоксе. Для работы с данными при загрузки формы вытягиваю данные из представления в локальный курсор. При изменении, добавлении или удалении записи хочу обновлять только редактируемые записи, что вроде бы реализовал (выполняется после каждой модификации записи):
[code]
select fvsp0
SET DELETED OFF
NextRecord = GETNEXTMODIFIED(0, "fvsp0")
do while NextRecord <> 0
do case
case deleted() and IsNull(oldVal("deleted()"))
* Создали и тут же удалили. Без действий
case IsNull(oldVal("deleted()"))
* Создали новую запись. Необходимо создать новую запись на сервер
=SQLExec(ch,"INSERT INTO fvsp (kvtp,kc,kd,osd,km,gs,kev,op,nrvsm)"+ ;
"VALUES (?fvsp0.kvtp, ?fvsp0.kc,?fvsp0.kd,?fvsp0.osd,?fvsp0.km,?fvsp0.gs,?fvsp0.kev,?fvsp0.op,?fvsp0.nrvsm)")
case deleted()
* Запись была удалена. Удаляем на сервере
=SQLExec(ch, "DELETE FROM fvsp WHERE kvtp=?OldVal([fvsp0.kvtp]) and kc=?OldVal([fvsp0.kc]) "+ ;
"and kd=?OldVal([fvsp0.kd]) and osd=?OldVal([fvsp0.osd]) "+ ;
"and km=?OldVal([fvsp0.km]) and gs=?OldVal([fvsp0.gs]) "+ ;
"and kev=?OldVal([fvsp0.kev]) and op=?OldVal([fvsp0.op]) and nrvsm=?OldVal([fvsp0.nrvsm])")
otherwise
* Запись была модифицирована. Если необходимо, можно уточнить по GetFldState() что именно было изменено
=SQLExec(ch, "UPDATE fvsp SET kvtp=?fvsp0.kvtp,kc=?fvsp0.kc,kd=?fvsp0.kd,osd=?fvsp0.osd,km=?fvsp0.km,gs=?fvsp0.gs,kev=?fvsp0.kev,op=?fvsp0.op,nrvsm=?fvsp0.nrvsm)" + ;
" WHERE kvtp=?OldVal([fvsp0.kvtp]) and kc=?OldVal([fvsp0.kc]) "+ ;
"and kd=?OldVal([fvsp0.kd]) and osd=?OldVal([fvsp0.osd]) "+ ;
"and km=?OldVal([fvsp0.km]) and gs=?OldVal([fvsp0.gs]) "+ ;
"and kev=?OldVal([fvsp0.kev]) and op=?OldVal([fvsp0.op]) and nrvsm=?OldVal([fvsp0.nrvsm])")
endcase
* Берем следующую измененную запись
NextRecord = GETNEXTMODIFIED(NextRecord, "fvsp0")
enddo
SET DELETED ON
[\code]
Делаю таким образом, чтобы каждый раз не обновлять все записи курсора. Но в этом случае я до конца сессии не вижу изменений других пользователей.
Вопрос в следующем: может есть какая-нить возможность обновления только тех записей, которые изменены в текущее время мной и другими пользователями, но при этом не обновлять всю базу, т.к. есть очень большие таблицы. Наверняка я не один с такой проблемой столкнулся.
Реализовать нужно именно через sqlexec(). Курсорадаптеры не рассматриваю по программным причинам.
Прошу прощения, если этот вопрос уже поднимался, но я ни одного толкового предложения не увидел в топиках...
...
Рейтинг: 0 / 0
sqlexec(),VFP9,курсоры. Мультиобработка
    #36474649
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторКурсорадаптеры не рассматриваю по программным причинам..

изв. за флуд, но не могу удержаться.
убит наповал, валяюсь под столом, бьют конвульсии
...
Рейтинг: 0 / 0
sqlexec(),VFP9,курсоры. Мультиобработка
    #36474677
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
счаз, кулинар прибежит - научит готовить,

а так, предостерегу:
не дай Боже, в отборе напишите где-то tt=isnull(tt,'') ,
либо апдейт без параметра наименования [O'Genry],
либо пляски с преобразованием типов туда-обратно,
затем пляски с рефрешем курсора и отменой, и привязыванием,
отвязыванием источников

ну и километры безумного кода нам, конечно не страшны,
фокспро все стерпит, а разум - молчит.
...
Рейтинг: 0 / 0
sqlexec(),VFP9,курсоры. Мультиобработка
    #36474689
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирТК
Делаю таким образом, чтобы каждый раз не обновлять все записи курсора. Но в этом случае я до конца сессии не вижу изменений других пользователей.
Вопрос в следующем: может есть какая-нить возможность обновления только тех записей, которые изменены в текущее время мной и другими пользователями, но при этом не обновлять всю базу, т.к. есть очень большие таблицы. Наверняка я не один с такой проблемой столкнулся.
Реализовать нужно именно через sqlexec(). Курсорадаптеры не рассматриваю по программным причинам.
...

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

2. Что должно дать знание "изменены в текущее время мной и другими пользователями"?

3. Если надо через SQLEXEC с анализом "тонкостй", то надо вызывать ХП в которую передавать изменённые записи, а в самой ХП разбирать изменились ли они или нет (для записи можно использовать доп. поле timestamp)
...
Рейтинг: 0 / 0
sqlexec(),VFP9,курсоры. Мультиобработка
    #36474706
прошелмимо
ну и километры безумного кода нам, конечно не страшны,
фокспро все стерпит, а разум - молчит.

Так потому и спрашиваю, что километры кода писать не хочется. А КАД у меня не совсем совместимы с теми классами, которые я использую по наставлению начальства. И без них никак. А писать свои такие же, но с исправлением текущей проблемы нету особо времени
...
Рейтинг: 0 / 0
sqlexec(),VFP9,курсоры. Мультиобработка
    #36474736
ВладимирТК,
альтернатив немного. Или писать километры кода SQLEXEC, или переделывать под КАД. Что проще и быстрее - мне отсюда не видно.
...
Рейтинг: 0 / 0
sqlexec(),VFP9,курсоры. Мультиобработка
    #36474776
PaulWist
1. На клиента не надо тянуть всю табличку с сервера, на клиенте нужно выбирать только необходимые записи - таких как правило не много.

2. Что должно дать знание "изменены в текущее время мной и другими пользователями"?

3. Если надо через SQLEXEC с анализом "тонкостй", то надо вызывать ХП в которую передавать изменённые записи, а в самой ХП разбирать изменились ли они или нет (для записи можно использовать доп. поле timestamp)

По 1 пункту: я так и делаю, но одновременно со мной вполне может работать с этими же записями другой пользователь.
По 3-му: Если в ХП передавать изменнённые записи, то, к примеру, одна из записей, модифицируемых мной, уже может быть удалена на сервере... Что тогда? (но это единичный случай). А вообще основной вопрос в том, чтобы увидеть изменения других пользователей тех записей, с которыми я работаю в данный момент
...
Рейтинг: 0 / 0
sqlexec(),VFP9,курсоры. Мультиобработка
    #36474781
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторкоторые я использую по наставлению начальства.

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

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

может они и не так хороши Ваши классы? и доработать это будет намного
трудозатратнее и т.д.? может всеже посмотреть в сторону альтернативы?
...
Рейтинг: 0 / 0
sqlexec(),VFP9,курсоры. Мультиобработка
    #36474789
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПо 1 пункту: я так и делаю, но одновременно со мной вполне может работать с этими же записями другой пользователь.
По 3-му: Если в ХП передавать изменнённые записи, то, к примеру, одна из записей, модифицируемых мной, уже может быть удалена на сервере... Что тогда? (но это единичный случай). А вообще основной вопрос в том, чтобы увидеть изменения других пользователей тех записей, с которыми я работаю в данный момент

таймстамп + логич.блокировки Вам в помощь,
принципы реализации поиском на форуме мс скл.
...
Рейтинг: 0 / 0
sqlexec(),VFP9,курсоры. Мультиобработка
    #36474860
Что ж. Спасибо за внимание. Возможно я ещё не все альтернативы рассмотрел.
А используемые мной классы, не совершенны, но лучше пока ничего нет. А использовать только стандартное очень накладно в плане времени.
Причина неиспользования КАД - при выборке данных с сервера (с использованием вышеупомянутых классов), моя форма не отображается до тех пор, пока не сбросятся все запрашиваемые записи. А это по времени такой же интервал, как при использовании SQLEXEC(), т.е. пользователь не имеет возможности работать с данными, пока КАД не обновится полность, а так не должно быть.
...
Рейтинг: 0 / 0
sqlexec(),VFP9,курсоры. Мультиобработка
    #36474885
ВладимирТКЧто ж. Спасибо за внимание. Возможно я ещё не все альтернативы рассмотрел.
А используемые мной классы, не совершенны, но лучше пока ничего нет. А использовать только стандартное очень накладно в плане времени.
Причина неиспользования КАД - при выборке данных с сервера (с использованием вышеупомянутых классов), моя форма не отображается до тех пор, пока не сбросятся все запрашиваемые записи. А это по времени такой же интервал, как при использовании SQLEXEC(), т.е. пользователь не имеет возможности работать с данными, пока КАД не обновится полность, а так не должно быть.1. Не надо так много завпрашивать.
2. КАД необязательно сразу заполнять данными. Можно показать форму и только потом загрузить данные. При этом заодно можно и фильтр у юзера запросить, чтобы выполнить пункт 1.
...
Рейтинг: 0 / 0
sqlexec(),VFP9,курсоры. Мультиобработка
    #36474891
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирТК
Причина неиспользования КАД - при выборке данных с сервера (с использованием вышеупомянутых классов), моя форма не отображается до тех пор, пока не сбросятся все запрашиваемые записи. А это по времени такой же интервал, как при использовании SQLEXEC(), т.е. пользователь не имеет возможности работать с данными, пока КАД не обновится полность, а так не должно быть.

кажися причина в Вас.
почему нельзя получать на клиенте какие-то данные по условию?

даже если это так, и Вы тяните какой-то огромный объем,
то я Вас уверяю, скорость получения данных через КАД будет быстрее (незначительно).

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

пользователь должен работать с минимальным количеством записей,
минимальным, нужно всеми силами ограничить объем скачиваемых на клиента данных.
этого достигаем различными ухищрениями, в том числе и "мордой лица",
предлагая тащить данные по условию какому-то.
...
Рейтинг: 0 / 0
sqlexec(),VFP9,курсоры. Мультиобработка
    #36475262
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирТКPaulWist
1. На клиента не надо тянуть всю табличку с сервера, на клиенте нужно выбирать только необходимые записи - таких как правило не много.

2. Что должно дать знание "изменены в текущее время мной и другими пользователями"?

3. Если надо через SQLEXEC с анализом "тонкостй", то надо вызывать ХП в которую передавать изменённые записи, а в самой ХП разбирать изменились ли они или нет (для записи можно использовать доп. поле timestamp)

По 1 пункту: я так и делаю, но одновременно со мной вполне может работать с этими же записями другой пользователь.
По 3-му: Если в ХП передавать изменнённые записи, то, к примеру, одна из записей, модифицируемых мной, уже может быть удалена на сервере... Что тогда? (но это единичный случай). А вообще основной вопрос в том, чтобы увидеть изменения других пользователей тех записей, с которыми я работаю в данный момент

Вы так и не ответили - зачем видеть записи которые изменил другой юзер.

Если записи нет (её срубил другой юзер), есть три стратегии принятия решения:

1. Кто первый сохранил - тот и прав

2. Кто последний сохранил - тот и прав

3. Кто последний сохраняет - тот принимает решение какую из первых двух стратегий выбрать.

Собственно, Вы должны дать на этот вопрос ответ сами, что делать - добавлять ли запись или же соглашаться с её удалением.

Но практика показывает, что какую бы мы стратегию не придумали, последний юзер добьется любыми путями сохранения "своих" данных, поэтому как правило используют стратегию №2.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / sqlexec(),VFP9,курсоры. Мультиобработка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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