![]() |
|
|
![]()
|
|
| wedmed |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 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 ) Можно ли на прямую обратится к вводимому элементу или каким-либо другим способом????????? Можно ли как-нибудь это обойти?????? |
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 7 Всего: 130 |
Не понял, а что не так? Длина значения вроде 6 не превышает. Или надо отловить какую-то конкретную ошибку? Это сообщение отредактировал(а) Данкинг - 10.1.2009, 01:16 -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| wedmed |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 26.12.2008 Репутация: нет Всего: нет |
Проблема в том что я не хочу выводить сообщение об ошибк, ведь ее запросто исправить. Я хочу изменить
занчение в ф-ции myfun, так чтобы в таблицу оно попало без лишней точки. А при передачи значения по ссылке @ вылетает ошибка. А не SET UDFPARMS TO REFERENCE вообще не реагирует , либо передает ноль. |
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 7 Всего: 130 |
Ну, оставляй одну точку при вводе:
-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| wedmed |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 7 Всего: 130 |
Ты намудрил чего-то вообще. Что в принципе сделать надо, т.е. задача какая? Техзадание. -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| wedmed |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 26.12.2008 Репутация: нет Всего: нет |
Необходимо (в примере из трех файлов). в файле f.prg,там где ф-ции изменить значение вводимого поля.
Т.е. пользователь ввел несовсем корректные данные, но есть строгие правила. Выполняя INSERT, вызывается, для каждого поля своя функция проверки данных, если несовсем коректные данные хочу их исправить, ну а если же совсем не то ввели - то откат, путе возврата из этой функции false. |
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 7 Всего: 130 |
Ну, а на этапе ввода почему нельзя проверять? Он вводит же в Edit'ы или как там у тебя реализовано. Это сообщение отредактировал(а) Данкинг - 10.1.2009, 23:31 -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| wedmed |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 26.12.2008 Репутация: нет Всего: нет |
Не я понимаю что перед вводом можно вызвать эту ф-ция (и проблемы нет).
Ну к примеру вводит в GRID, основаный на VIEW которы к тому же рассылает данные по таблицам. То есть изменеие должно непостредственно происходит в функция указанных в CHECK. Можно ли как на прямую обратится к элементу поля таблицы.(Или они protected) |
|||
|
||||
| wedmed |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 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) |
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 7 Всего: 130 |
А вообще у тебя фокс какой? Версия т.е.
-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| wedmed |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 26.12.2008 Репутация: нет Всего: нет |
VFP8!!!
|
|||
|
||||
![]()
|
| Правила форума "Foxpro/Clipper/Dbase" | |
|
|
Запрещается! 1. Публиковать ссылки для чисто рекламных целей. 2. Оффтопить, флеймить, говорить не культурно. Пожалуйста, адекватно задавайте свой вопрос. Тема должна создаваться с названием характеризующем Вашу проблему. Задавайте вопросы правильно - как спросите, так вам и ответят. Разрешено! Давать ссылки на статьи, обзоры, если это не нарушает первый пункт правил. Задавая вопрос, давайте нужную информацию касающуюся Вашей проблемы. Этим вы ускорите полезные ответы. P.S. Размещение рекламы будет строго наказываться! Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MoLeX |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Foxpro/Clipper/Dbase | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |