Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Удалённые записи в Cursor-е / 23 сообщений из 23, страница 1 из 1
18.08.2006, 11:16
    #33927181
startFOX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалённые записи в Cursor-е
Подскажите.
В курсоре храню выборку (join) по нескольким таблицам-справочникам

Как узнать в Курсоре: удалена ли запись?

Для таблицы - deleted()=.T. -> удалена

А по курсору как?
...
Рейтинг: 0 / 0
18.08.2006, 11:21
    #33927208
Проходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалённые записи в Cursor-е
Запись чего? Курсора или приджойненной таблицы? Хотя Deleted() не нелает различий между таблицами и курсорами. Если нужно проверить запись в приджойненной таблице, то просто передай ее алиас в качестве параметра.
...
Рейтинг: 0 / 0
18.08.2006, 11:24
    #33927221
startFOX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалённые записи в Cursor-е
Запись курсора
...
Рейтинг: 0 / 0
18.08.2006, 11:28
    #33927250
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалённые записи в Cursor-е
По моему все работает:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SET DELETED ON 
CREATE CURSOR C_wr (id I, name C( 20 ))
FOR i= 1  TO  10 
  ñ 1  = "Ñòðîêà " + PADL(STR(i, 3 ), 3 ,"0")
  INSERT INTO C_wr (id, name) VALUES (i, ñ 1 )
ENDFOR
BROWSE
DELETE FROM C_wr WHERE id =  5 
SET DELETED OFF
BROWSE
...
Рейтинг: 0 / 0
18.08.2006, 11:29
    #33927254
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалённые записи в Cursor-е
http://]SET DELETED ON
CREATE CURSOR C_wr (id I, name C(20))
FOR i=1 TO 10
c1 = "Строка " + PADL(STR(i,3),3,"0")
INSERT INTO C_wr (id, name) VALUES (i, c1)
ENDFOR
BROWSE
DELETE FROM C_wr WHERE id = 5
SET DELETED OFF
BROWSE
...
Рейтинг: 0 / 0
18.08.2006, 11:38
    #33927296
startFOX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалённые записи в Cursor-е
Например:
Главная таблица KVIT.
в ней поля: id, id_1, id_2, id_3 и некоторые строки помечены на удаление

Есть таблицы-справ. с записями:
Т1:
id_1, nnn

Т2:
id_2, mmm

T3
id_3, ppp

В результате выполнения запроса
Код: plaintext
1.
SELECT id, ..... FROM KVIT, T1, T2, T3 .... INTO CURSOR abn

Получаю курсор abn, в котором НЕТ помеченных на удаление записей. Почему?
...
Рейтинг: 0 / 0
18.08.2006, 11:41
    #33927312
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалённые записи в Cursor-е
startFOX...Получаю курсор abn, в котором НЕТ помеченных на удаление записей. Почему?Поставь SET DELETED OFF вначале и будут.
...
Рейтинг: 0 / 0
18.08.2006, 11:43
    #33927320
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалённые записи в Cursor-е
Или м.б. ты какую-то специфическую цель преследуешь? Но не говоришь об этом.
...
Рейтинг: 0 / 0
18.08.2006, 11:45
    #33927337
startFOX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалённые записи в Cursor-е
Может быть чего-то не понимаю, но грид упорно не отражает помеченные на удаление...
...
Рейтинг: 0 / 0
18.08.2006, 11:50
    #33927373
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалённые записи в Cursor-е
В Load-e формы напиши set delete off
...
Рейтинг: 0 / 0
18.08.2006, 11:52
    #33927397
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалённые записи в Cursor-е
startFOXМожет быть чего-то не понимаю, но грид упорно не отражает помеченные на удаление...Перед выполнением запроса:
Код: plaintext
SELECT id, ..... FROM KVIT, T1, T2, T3 .... INTO CURSOR abn
поставь
Код: plaintext
SET DELETED OFF
А потом посмотри результат выполнения запроса. И как у тебя связываются таблицы? А то м.б. отсекаются удаленные записи по опции WHERE.
...
Рейтинг: 0 / 0
18.08.2006, 11:57
    #33927424
startFOX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалённые записи в Cursor-е
Вот этот запрос...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SET DELETED OFF 
SELECT ALLTRIM(family) + "   " + LEFT(ALLTRIM(name), 1 ) + "." + LEFT(ALLTRIM(patronym), 1 ) + "." as fio, family,  name, patronym, ;
  kvit.kg, kvit.rub, abonents.userlgot, ; 
   nasp, codlgots ,  namelgots, ;
  abonents.idabonent, abonents.idlgots, abonents.typeuse  ;
FROM kvit, abonents, codlgots ;
WHERE kvit.idabonent = abonents.idabonent AND abonents.idlgots = codlgots.idlgots ;
ORDER BY family INTO CURSOR abons

SELECT abons 
...
Рейтинг: 0 / 0
18.08.2006, 12:00
    #33927449
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалённые записи в Cursor-е
Ну и каков результат? Ты ведь не ответил.
...
Рейтинг: 0 / 0
18.08.2006, 12:02
    #33927461
startFOX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалённые записи в Cursor-е
записи из табл. KVIT, которые я отмечал на удаление, НЕ ПОМЕЧЕНЫ!
...
Рейтинг: 0 / 0
18.08.2006, 12:11
    #33927521
-=AlexiS=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалённые записи в Cursor-е
а почему они должны быть помечены ?
из курсора-то их никто не удалял.
если тебе нужно видеть что запись удалена из справочника - добавь в выборку deleted('KVIT') ну и работай с ним
...
Рейтинг: 0 / 0
18.08.2006, 12:12
    #33927534
startFOX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалённые записи в Cursor-е
Прошу прощения за невежество, а куда вставить?
...
Рейтинг: 0 / 0
18.08.2006, 12:17
    #33927564
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалённые записи в Cursor-е
startFOXзаписи из табл. KVIT, которые я отмечал на удаление, НЕ ПОМЕЧЕНЫ!Разберем пример, в нем созаны два курсора, а затем осуществляется выборка:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SET DELETED ON 
CREATE CURSOR C_wr (id I, id1 I, name C( 20 ))
FOR i= 1  TO  10 
  c1 = "Строка " + PADL(ALLTRIM(STR(i, 3 )), 3 ,"0")
  INSERT INTO C_wr (id, id1, name) VALUES (i, i, c1)
ENDFOR
DELETE FROM C_wr WHERE id =  5 
SET DELETED OFF
CREATE CURSOR C_w (id1 I, name C( 20 ))
FOR i= 1  TO  10 
  c1 = "Строка " + PADL(ALLTRIM(STR(i, 3 )), 3 ,"0")
  INSERT INTO C_w (id1, name) VALUES (i, c1)
ENDFOR
SELECT C_wr.Id, C_wr.Id1, C_wr.Name as Name_wr, C_w.Name as Name_w ;
  FROM C_wr, C_w ;
  WHERE C_wr.Id1 = C_w.Id1 ;
  INTO CURSOR C_wr111
И так. Создали курсор C_wr. И в нем удалили строку с id=5. Но потом приказали VFP:
Код: plaintext
SET DELETED OFF
Т.е. будет ли VFP обрабатывать записи, помеченные на удаление, и будут ли они доступны для использования в других командах.
И обработали записи в SELECT-е. Заметим, запись с id=5 попала в запрос и теперь она не помечена на удаление. Потому что мы обрабатываем и помеченные записи, и рассматриваем их как обычные записи.
Если убрать команду
Код: plaintext
SET DELETED OFF
Закоментировав ее, то запись с id=5 уже не попадает в результаты запроса.
Теперь задается вопрос: Какие ты записи хочешь увидеть в результатах запроса?
...
Рейтинг: 0 / 0
18.08.2006, 12:17
    #33927567
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалённые записи в Cursor-е
startFOXНапример:
Главная таблица KVIT.
в ней поля: id, id_1, id_2, id_3 и некоторые строки помечены на удаление

Есть таблицы-справ. с записями:
Т1:
id_1, nnn

Т2:
id_2, mmm

T3
id_3, ppp

В результате выполнения запроса
Код: plaintext
1.
SELECT id, ..... FROM KVIT, T1, T2, T3 .... INTO CURSOR abn

Получаю курсор abn, в котором НЕТ помеченных на удаление записей. Почему?
И не получишь.

Select-SQL отбирает не записи, а данные . Содержимое полей. На основании этих данных строится другая таблица .

Select-SQL - это не фильтр, наложенный на исходные данные. Это именно другая таблица.

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

Кроме того, как правило, записи помеченные как удаленные вообще прячут. Для этих целей используют специальную настройку

SET DELETED ON

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

PS: использовать функцию Deleted() - бессмысленно. Получишь полную ерунду.
...
Рейтинг: 0 / 0
18.08.2006, 12:22
    #33927595
startFOX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалённые записи в Cursor-е
Понятно. А как же быть в такой ситуации?
...
Рейтинг: 0 / 0
18.08.2006, 12:29
    #33927640
-=AlexiS=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалённые записи в Cursor-е
можно конечно вставить прямо в твой результирующий запрос но луче разбить запрос на 2
1. select * ,deleted() as pr_deleted from KVIT into cursor kvit_curs
2 твой запрос который уже делается не из KVIT , а из kvit_curs
...
Рейтинг: 0 / 0
18.08.2006, 12:30
    #33927644
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалённые записи в Cursor-е
startFOXПонятно. А как же быть в такой ситуации?
Вообще-то, обычно на записях помеченных как удаленные никакой логики не строят. "Умерла, так умерла". Такие записи вообще никуда не должны попадать.

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

Но если очень хочется, то обычно сначала делают запрос, добавляя в этот запрос коды записей исходных таблиц. Затем сканируешь итоговую выборку и по кодам записей ищешь соответсвующие записи исходных таблиц. Далее уже анализируй значение Deleted() для исходных таблиц и устанавливай нужное значение.
...
Рейтинг: 0 / 0
18.08.2006, 12:32
    #33927659
startFOX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалённые записи в Cursor-е
Мне бы желательно визуально в гриде отразить: какие записи удалены, а какие нет. (если это конечно возможно без ввода дополнительного поля в таблицу)
...
Рейтинг: 0 / 0
18.08.2006, 12:37
    #33927695
startFOX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалённые записи в Cursor-е
Спасибо всем за обсуждение. Всё понял. Вопрос исчерпан.
Ещё раз спасибо.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Удалённые записи в Cursor-е / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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