Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
new idob sql
|
|||
|---|---|---|---|
|
#18+
Такой вопрос, заранее извиняюсь что кого то отвлекаю, понимаю что и сам мог бы разобраться:) есть функция на фоксе ************************* FUNCTION NewIdobSQL() ************************* LOCAL r1 r1="" SQLExe(handle,"SELECT NEXTID FROM STATES","a1") GO TOP IN a1 r1=STR(VAL(a1->NEXTID) + 1,10) SQLExec(handle,"UPDATE STATES SET STATES.NEXTID=?r1") RETURN r1 Смысл я думаю понятен получаю уникальный id по всей БД. Но по моему здесь не все в порядке с блокировками. Нашел много чего чисто для фокса, но как то все громоздко:( Может можно отделаться малой кровью? Сам пока склоняюсь к "sp_getapplock" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2004, 11:07 |
|
||
|
new idob sql
|
|||
|---|---|---|---|
|
#18+
Это код к какой базе данных? Если речь идет о MS SQL, то можно все в одном "флаконе" SQLExec(handle,"UPDATE STATES SET STATES.NEXTID= 1 + "+; "(SELECT TOP 1 NextID FROM STATE ORDER BY NextID)") Вообще, в команде SQLExec можно в качестве строки передать сформированную хранимую процедуру. В качестве разделителя команд выступает пробел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2004, 11:27 |
|
||
|
new idob sql
|
|||
|---|---|---|---|
|
#18+
Да речь о MS SQL Все ок только немного не соображу как из такого составного sqlexec мне получить nextid(см. SQLExe(handle,"SELECT NEXTID FROM STATES","a1"))? А если делать 2 sqlexec то как гарантировать что ничто не влезет между ними? М.б. транзакция? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2004, 11:38 |
|
||
|
new idob sql
|
|||
|---|---|---|---|
|
#18+
Ну, я же написал. В синтаксисе MS SQL это будет что-то вроде такого Код: plaintext 1. 2. Это я просто переписал в синтаксисе MS SQL то, что написано у тебя. Хотя, конечно, совершенно бессмысленная операция. Но ты уж сам адаптируй к тому, что тебе реально надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2004, 11:53 |
|
||
|
new idob sql
|
|||
|---|---|---|---|
|
#18+
по моему мы говорим о разных вещах. в моем коде первый SQLExec возвращает текущий свободный id, с которым я потом работаю в фоксе(его возвращет функция), следующий exec обновляет значение на sql server, то что ты написал просто обновляет значение и как из такой составной команды получить значение в фокс ума не приложу. Если я что-то не понял поясни ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2004, 12:16 |
|
||
|
new idob sql
|
|||
|---|---|---|---|
|
#18+
Я переписал один-в-один твой исходный код одной командой. Смотри, что ты просишь выполнить MS SQL SELECT NEXTID FROM STATES NEXTID = NEXTID+1 UPDATE STATES SET STATES.NEXTID = NEXTID Я не вижу здесь никаких функций. Ты просто считываешь значение поля NEXTID из первой попавшейся записи таблицы STATE, увеличиваешь его на 1 и присваиваешь полученное значение ВСЕМ записям таблицы STATE. Ну, ладно, возможно, ты просто не все скопировал. Тогда делаешь примерно так: Код: plaintext 1. 2. 3. 4. В FoxPro это все загоняешь в символьную переменную и отправляешь на сервер через SQLExec(). Фактически создаешь динамическую хранимую процедуру ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2004, 12:26 |
|
||
|
new idob sql
|
|||
|---|---|---|---|
|
#18+
Так по порядку в states всегда только одна запись(так задумано) Делать все через ХП не хотел, т.к. функция NewIdobSql() находится НА ФОКСЕ и вызывается в нем же. И повторяюсь значение states->nextid мне НУЖНО получить в фокс!!! В принципе можно работать с sql view states и использовать фоксовские блокировки, как я понимаю с remote view они работают также как с dbf Ни один твой код не возвращает занчение states->nextid в фокс(в какую-нибудь переменную) Если конечно не считать перенос всего кода в ХП, но повторюсь такой вариант в дальнейшем предвещает кучу неудобств. Не знаю как можно еще пояснить:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2004, 12:46 |
|
||
|
new idob sql
|
|||
|---|---|---|---|
|
#18+
А какие тогда у тебя проблемы с блокировками? Тебе надо заблокировать таблицу State от момента чтения (SELECT), до момента обновления (UPDATE)? Тогда используй хинты в команде SELECT и все это дело окружи транзакцией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2004, 14:31 |
|
||
|
new idob sql
|
|||
|---|---|---|---|
|
#18+
Я и спрашивал как это поизящней сделать. >Тогда используй хинты в команде SELECT и все это дело окружи транзакцией. 1)транзакция д.б. в фоксе или на sql server(т.е. sqlexec)? 2)что за хинты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2004, 23:36 |
|
||
|
new idob sql
|
|||
|---|---|---|---|
|
#18+
Я и спрашивал как это поизящней сделать. >Тогда используй хинты в команде SELECT и все это дело окружи транзакцией. 1)транзакция д.б. в фоксе или на sql server(т.е. sqlexec)? 2)что за хинты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2004, 23:37 |
|
||
|
new idob sql
|
|||
|---|---|---|---|
|
#18+
автор В принципе можно работать с sql view states и использовать фоксовские блокировки, как я понимаю с remote view они работают также как с dbf Фоксовские блокировки для SQLServer-ных таблиц глубоко безразличны. автор Если конечно не считать перенос всего кода в ХП, но повторюсь такой вариант в дальнейшем предвещает кучу неудобств. Интересно, где ты здесь ХП увидел ? В твоём случае выйдет, что блокировка серверных объектов будет завязана на клиента, чего лучше избегать. Пользуйся SQLServer-ным автоинкрементом (identity) и @@identity, либо: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2004, 23:56 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=32549400&tid=1596437]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
166ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 269ms |
| total: | 534ms |

| 0 / 0 |
