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

Откуда: Новосибирск
Сообщений: 3
Суть проблемы в том, что:
при введении имени, по которму должна удаляться запись в таблице удаление не происходит, а происходит замена данных в первом столбце таблицы, на те что были введены.
пишу примерно так:

set safety off
q=form1.pageframe1.txtDelete.value
use table1 exclusive
index on field1 to tmp1
seek q
delete
pack
close database
прошу не смеяться, я ведь не волшебник, а только учусь >:-)
14 ноя 05, 20:41    [2067699]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с формой  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Ну, в общем, ты сделал все самые распространенные ошибки, какие только можно было сделать. Хотя, если подумать, то можно сделать еще несколько ошибок

Вкратце, суть ошибок:

  • Динамическое создание индексов (команда INDEX) - это то, чего следует, по возможности, избегать. Индексы создаются при создании структуры таблицы и в процессе работы обычно не пересоздаются
  • Упаковка таблицы (команда PACK) - это то, чего следует, по возможности, избегать. Упаковка происходит периодически из служебных процедур. Для того, чтобы скрыть записи, помеченные как удаленные используют настройку SET DELETED ON
  • Ссылка на форму по ее имени - это действие, которое можно выполнить только при сопутствующем выполнении ряда условий. Обычно используют относительные ссылки типа ThisForm.

    Есть еще некоторые стилистические ошибки, но это проще показать на примере.

    Итак, у тебя есть таблица Table1 у которой есть структурный индексный файл, созданный в дизайнере таблицы. И в этом структурном индексном файле есть индексный тег по полю Field1.

    В DataEnvironmetn форы ты включил эту таблицу (В дизайнере формы пункт системного меню View - Data Environment - правой кнопкой мыши на пустом месте - Add)

    В событии INIT (или LOAD) формы делаешь все необходимые настройки

    SET DELETED ON
    SET TALK OFF
    

    Если предположить, что поле Field1 символьного типа, в объекте txtDelete введено символьное значение и приведенный код - это метод той самой формы, где расположен объект txtDelete, то теперь твой код выглядит так:

    LOCAL lcValue
    lcValue = AllTrim(ThisForm.PageFrame1.txtDelete.Value)
    IF SEEK(m.lcValue,"Table1","Field1") = .T.
    	DELETE
    ELSE
    	MessageBox("Записи со значением поля Field1 равным ["+m.lcValue+"] не найдено"+;
    		CHR(13)+"Удалять нечего. Измените условия поиска.")
    ENDIF
    
  • 15 ноя 05, 09:27    [2068437]     Ответить | Цитировать Сообщить модератору
     Re: Проблема с формой  [new]
    Пётр Боярчиков
    Member

    Откуда: Новосибирск
    Сообщений: 3
    большое спасибо, попробую так сделать
    *-----------------------
    я ведь не волшебник, а только учусь
    15 ноя 05, 20:47    [2072097]     Ответить | Цитировать Сообщить модератору
    Все форумы / FoxPro, Visual FoxPro Ответить