Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Измение значения при вводе, Изменеие значения при вводе в таблицы 
V
    Опции темы
wedmed
Дата 10.1.2009, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 26.12.2008

Репутация: нет
Всего: нет



Подскажите пожалуйста
Как можно изменить значение вводимого поля в CHECK(правило для поля)

Пусть существует таблица Пользлвателей

Create TABLE tblUser;
    (FLD_ID I NOT NULL PRIMARY KEY,;
     FLD_NAME C(30) NOT NULL,;
     FLD_Inic  C(6) NOT NULL)

И вводится запись, в поле Инициалы, которой случайно стоит две точки

INSERT INTO tblUser (fld_id,fld_name,fld_inic) value(1,'Иванов','П..П.')

Перепробовал варианты передачи параметра по ссылке:
    (   @   ,    SET UDFPARMS TO REFERENCE    )

Можно ли на прямую обратится к вводимому элементу или каким-либо другим способом?????????
Можно ли как-нибудь это обойти??????
PM MAIL   Вверх
Данкинг
Дата 10.1.2009, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 7
Всего: 130



Цитата(wedmed @  10.1.2009,  00:48 Найти цитируемый пост)
И вводится запись, в поле Инициалы, которой случайно стоит две точки

Не понял, а что не так? Длина значения вроде 6 не превышает. Или надо отловить какую-то конкретную ошибку?

Это сообщение отредактировал(а) Данкинг - 10.1.2009, 01:16


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
wedmed
Дата 10.1.2009, 01:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 26.12.2008

Репутация: нет
Всего: нет



Проблема в том что я не хочу выводить сообщение об ошибк, ведь ее запросто исправить. Я хочу изменить
занчение в ф-ции myfun, так чтобы в таблицу оно попало без лишней точки. А при передачи значения по ссылке @ вылетает ошибка. А не SET UDFPARMS TO REFERENCE вообще не реагирует , либо передает ноль.
PM MAIL   Вверх
Данкинг
Дата 10.1.2009, 02:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 7
Всего: 130



Ну, оставляй одну точку при вводе:

Код

Replace FLD_Inic  with strtr('П..П.','..','.')



--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
wedmed
Дата 10.1.2009, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 26.12.2008

Репутация: нет
Всего: нет



Привет.

Не поучается.
Я хочу в функции, которая  пишется при создании. таблицы  "myfun" изменить значение,
а    Replace  вызывает эту же функцию, вобщем бесконечный цикл.
Необходимо изменить значение именно в функции "myfun".

Вот пример(смысла в нем нет, а вот действия выполняймые в нем необходимо сделать):

Файл проверки:           файл    bld.prg
          SET PROCEDURE TO crtbd.prg
          crtbd()
          SET PROCEDURE TO f.prg
          SET UDFPARMS TO REFERENCE
          INSERT INTO table1 (i,l,c) VALUES (0,.f.,'нет')
          USE table1
          BROWSE

Создание базы и таблицы:       файл  crtbd,prg
          FUNCTION crtbd
          CLOSE DATABASES ALL
          SET SAFETY OFF
          CREATE DATABASE data1
          CREATE TABLE table1;
                   (i I CHECK fi(@i),;
                    l L CHECK fl(@l),;
                    c C(10) CHECK fc(@c))

функции для CHECK                     файл  f.prg
          PROCEDURE fi
             LPARAMETERS i
             EXTERNAL ARRAY i
             i=1
             RETURN .t.
          ENDPROC

         PROCEDURE fl
            LPARAMETERS l
            EXTERNAL ARRAY l
            l=.t.
            RETURN .t.
         ENDPROC

         PROCEDURE fc
            LPARAMETERS c
            EXTERNAL ARRAY c
            c='Да'
            RETURN .t.
         ENDPROC
PM MAIL   Вверх
Данкинг
Дата 10.1.2009, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 7
Всего: 130



Цитата(wedmed @  10.1.2009,  14:49 Найти цитируемый пост)
Я хочу в функции, которая  пишется при создании. таблицы  "myfun" изменить значение,
а    Replace  вызывает эту же функцию, вобщем бесконечный цикл.
Необходимо изменить значение именно в функции "myfun".

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


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
wedmed
Дата 10.1.2009, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 26.12.2008

Репутация: нет
Всего: нет



Необходимо (в примере из трех файлов). в файле f.prg,там где ф-ции изменить значение вводимого поля.

Т.е. пользователь ввел несовсем корректные данные, но есть строгие правила.

Выполняя INSERT, вызывается, для каждого поля своя функция проверки данных, если несовсем

коректные данные хочу их исправить, ну а если же совсем не то ввели - то откат, путе возврата из этой

функции false.
PM MAIL   Вверх
Данкинг
Дата 10.1.2009, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 7
Всего: 130



Цитата(wedmed @  10.1.2009,  22:45 Найти цитируемый пост)
Т.е. пользователь ввел несовсем корректные данные, но есть строгие правила.

Ну, а на этапе ввода почему нельзя проверять? Он вводит же в Edit'ы или как там у тебя реализовано.

Это сообщение отредактировал(а) Данкинг - 10.1.2009, 23:31


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
wedmed
Дата 11.1.2009, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 26.12.2008

Репутация: нет
Всего: нет



Не я понимаю что перед вводом можно вызвать эту ф-ция (и проблемы нет).

Ну к примеру вводит в GRID, основаный на VIEW которы к тому же рассылает данные по таблицам.

То есть изменеие должно непостредственно происходит в функция указанных в CHECK.

Можно ли как на прямую обратится к элементу поля таблицы.(Или они protected)
PM MAIL   Вверх
wedmed
Дата 12.1.2009, 02:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 26.12.2008

Репутация: нет
Всего: нет



*!*    Привет.

*!*    Вобщем я нашел решение!!!(Если интересно, смотри ниже).

*!*    Еще раз постановка задачи:

*!*    Необходимо в функции, определенной в CHECK при создании таблицы,
*!*    изменить не совсем корректно введенные данные. (Пример без особого смысла)

PUBLIC cas
cas=.T.
CLOSE DATABASE ALL
CREATE DATABASE bd1
CREATE TABLE tbl1 ( fld1 C(10) CHECK fstr( fld1,'fld1' ) )
INSERT INTO tbl1 (fld1) VALUES ("Нет")
USE tbl1
BROWSE

FUNCTION fstr
PARAMETERS flds,cmdfld
IF cas
  cas=.F.
  REPLACE &cmdfld WITH ALLTRIM(flds)+", Да!!!"
ELSE
  cas=.T.
ENDIF
RETURN cas

P.S.: Спасибо за REPLACE, без него не обошолся бы наверное.(Не знаешь как собрать *.fll)
PM MAIL   Вверх
Данкинг
Дата 12.1.2009, 02:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 7
Всего: 130



А вообще у тебя фокс какой? Версия т.е.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
wedmed
Дата 12.1.2009, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 26.12.2008

Репутация: нет
Всего: нет



VFP8!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Foxpro/Clipper/Dbase"
MoLeX

Запрещается!

1. Публиковать ссылки для чисто рекламных целей.

2. Оффтопить, флеймить, говорить не культурно.

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

Задавайте вопросы правильно - как спросите, так вам и ответят.

Разрешено!

Давать ссылки на статьи, обзоры, если это не нарушает первый пункт правил.

Задавая вопрос, давайте нужную информацию касающуюся Вашей проблемы. Этим вы ускорите полезные ответы.

P.S. Размещение рекламы будет строго наказываться!



Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MoLeX

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Foxpro/Clipper/Dbase | Следующая тема »


 




[ Время генерации скрипта: 0.0769 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.