Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Удаление записи  [new]
tim07
Member

Откуда:
Сообщений: 21
Существует представление выведенное в грид. Поля взяты из одной таблицы, с добавлением 2 вычисляемых полей. Мне нужно было, чтобы при удалении записи из представления, удалялась запись и в самой таблице. Это я сделал. Но если закрыть бд, то при новом открытии все удаленные записи оказываются на месте. Таблица и представление имеют buffermode=5.

код кнопки удаления:

set deleted on
delete
select view1
tableupdate()

select klient
set deleted on
delete
tableupdate()

помогите, пожалуйста, разобраться в этой проблеме!
10 май 10, 19:17    [8750189]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записи  [new]
igorbik
Member

Откуда: Мск
Сообщений: 578
tim07
при новом открытии все удаленные записи оказываются на месте.
set dele on перед открытием (например, в load формы)
10 май 10, 20:29    [8750404]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записи  [new]
tim07
Member

Откуда:
Сообщений: 21
И еще хотел узнать: какое свойство грида отвечает за то, что "выбрана какая-либо запись" в данный момент или нет! а то будет удалять первую попавшуюся запись без выбора!
10 май 10, 20:31    [8750410]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записи  [new]
igorbik
Member

Откуда: Мск
Сообщений: 578
tim07
И еще хотел узнать: какое свойство грида отвечает за то, что "выбрана какая-либо запись" в данный момент или нет! а то будет удалять первую попавшуюся запись без выбора!
Грид тут ни при чем. Это в таблице под гридом все можно найти. Например, номер записи или определенное значение определенного поля.

select table1
delete next 1 && удалит запись в таблице table1, которая лежит под гридом и на которой стоит маркер.
10 май 10, 20:36    [8750420]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записи  [new]
tim07
Member

Откуда:
Сообщений: 21
поставил set delete on в лод формы не помогло, потом засунул его в инит pageframe, то же самое. записи восстанавливаются после перезапуска.

а если в гриде не выбрана запись, то что будет удаляться?
10 май 10, 20:42    [8750437]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записи  [new]
igorbik
Member

Откуда: Мск
Сообщений: 578
tim07
а если в гриде не выбрана запись, то что будет удаляться?
10 май 10, 21:36    [8750613]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записи  [new]
igorbik
Member

Откуда: Мск
Сообщений: 578
igorbik
tim07
а если в гриде не выбрана запись, то что будет удаляться?
Случайно на кнопку нажал.
А самому слабО сообразить? Проверить?
10 май 10, 21:38    [8750621]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записи  [new]
tim07
Member

Откуда:
Сообщений: 21
проверил, если в гриде не выбрана запись, все равно удаляется. а мне нужно чтоб не удалялось.
может быть есть свойство у грида такое, которое принимает определенное значение, если запись выбрана, и другое, если не выбрана?


так что же делать с set delete on?
10 май 10, 22:13    [8750745]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записи  [new]
Fffffffffffffffffffff
Guest
tim07, в гриде нет никаких записей, он их только отображает. Записи есть в таблице. Если вы выбираете какую-нибудь таблицу в первый раз, то активной становится ее первая запись. Соответственно она и удалится.
10 май 10, 22:22    [8750775]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записи  [new]
tim07
Member

Откуда:
Сообщений: 21
это я понимаю. вопрос вот в чем: как мне сделать так, чтоб, если юзер не выбрал ничего в гриде, выдавалось определенное сообщение, а если выбрал, то запись удалялась.
10 май 10, 22:32    [8750805]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записи  [new]
Fffffffffffffff
Guest
Идея выглядит странно. Зачем это нужно?
10 май 10, 22:33    [8750815]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записи  [new]
tim07
Member

Откуда:
Сообщений: 21
ладно, уже сделал что хотел - просто в кнопке удаления сет фокус на грид и все. теперь хочешь не хочешь придется выбирать что удалять.

только теперь другая проблема. удаляю записи и из представления и из таблицы, а они удаляются только в таблице. но если перезапустить то, все нормально и там удаляются и тут. код кнопки удаление:
SELECT view1
Set Deleted On
DELETE
IF !EOF()
Skip 1
EndIF
IF EOF() .AND. !BOF()
Skip -1
ENDIF
TABLEUPDATE()

SELECT klient
Set Deleted On
DELETE
IF !EOF()
Skip 1
EndIF
IF EOF() .AND. !BOF()
Skip -1
ENDIF
TABLEUPDATE()

thisform.pageframe1.page1.grid1.SetFocus
10 май 10, 23:04    [8750907]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записи  [new]
tim07
Member

Откуда:
Сообщений: 21
В общем если запускаешь в первый раз, ничего не удаляется ни в представлении ни в таблице. Второй и последующие - нормально.
10 май 10, 23:09    [8750928]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записи  [new]
tim07
Member

Откуда:
Сообщений: 21
Никак не могу понять! Как можно НОРМАЛЬНО удалить данные (пометить, т.е. не физически) из представления(view1), которое создано на основе таблицы(klient), которая буферизована!!! Ничего не получается. То ничего не удаляется, то удаляется но не то! Подскажите пожалуйста как это правильно сделать!
11 май 10, 00:24    [8751138]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записи  [new]
tim07
Member

Откуда:
Сообщений: 21
Вроде сделал, правда коряво, но это не так важно! Целый день отняло! Остался только один глюк -- если вы запустили форму в первый раз, то записи не удаляться, как ни крути, а во второй раз -- все нормально! Что такое? Кажется нигде ничего не писал лишнего...
вот код кнопки удаление:

*удаляем из таблицы
LOCAL rem
select view1
rem=view1.id_pass
SELECT klient
LOCATE FOR rem==klient.id_pass
IF FOUND()
Set Deleted On
DELETE
IF !EOF()
Skip 1
EndIF
IF EOF() .AND. !BOF()
Skip -1
ENDIF
TABLEUPDATE()
ENDIF

*удаляем из вьюхи
SELECT view1
Set Deleted On
DELETE
IF !EOF()
Skip 1
EndIF
IF EOF() .AND. !BOF()
Skip -1
EndIF
TABLEUPDATE()

thisform.pageframe1.page1.grid1.SetFocus
11 май 10, 01:48    [8751335]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записи  [new]
проходящий.
Guest
tim07,
set delete on - настроечная команда. Ее надо давать 1 (один) раз, а не во всех местах. Обычно это где-то в начале программы. Если таки эта настройка сбрасывается, то надо искать это место, а не вопить про физическое удаление записей. И еще не указана версия фокса. В некоторых старых версиях запросы select sql не учитывали указанную настройку и в них приходилось добавлять в условие where проверку на "помеченность" записи с функцией Deleted().
11 май 10, 14:25    [8754307]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записи  [new]
Dima T
Member

Откуда:
Сообщений: 15294
tim07, SET DELETE влияет на поиск, а не удаление, т.е. ты хоть и навтыкал SET DELETE но не туда. Надо было перед LOCATE ставить.

А по-хорошему надо в начало программы и DataEnvironment.BeforeOpenTables() если форма с PrivateDataSession.
Т.к. часть SETов сбрасывается для формы (или отчета) с PrivateDataSession. В т.ч. SET DELETE
Лично я собираю все SETы в один PRG и вызываю его из DataEnvironment.BeforeOpenTables() формы
11 май 10, 14:42    [8754515]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записи  [new]
tim07
Member

Откуда:
Сообщений: 21
Спасибо за помощь! Учту при выполнении! Версия fox - 9.0
11 май 10, 19:04    [8756632]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить