powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Глюки в команде
19 сообщений из 19, страница 1 из 1
Глюки в команде
    #33846310
Shun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня одна проблема, не могу понять, почему даже если в форму введено определённое значение порядкового номера, выводится сообщение “Порядковый номер не может быть равен 0”. Странно, из-за этого запись добавить невозможно. Не могу понять, почему программа не принимает введенное значение и выводит сообщение будто введено нулевое значение. Иногда выводит data type mistage, когда вводишь просто последовательность чисел. Но запись не добавляется в любом случае))
Подскажите, если знаете, в чём здесь дело. Команда приведена ниже. На рисунке – данная форма.




SELECT tablestud
SET ORDER TO ord
IF VAL(thisform.pageframe1.page2.text1.text)=0
messagebox("Порядковый номер не может быть равен 0",0+11+0,"Предупреждение")
ELSE
IF SEEK(VAL(thisform.pageframe1.page2.text1.text))
messagebox("Такая запись уже существует",0+11+0,"Предупреждение")
else
append blank
replace ordernom with VAL(thisform.pageframe1.page2.text1.text),;
fam with alltrim(thisform.pageframe1.page2.text2.text),;
name with alltrim(thisform.pageframe1.page2.text3.text),;
otch with alltrim(thisform.pageframe1.page2.text4.text),;
nomer_file with alltrim(thisform.pageframe1.page2.text5.text),;
date_do with thisform.pageframe1.page2.text6.text,;
date_go with thisform.pageframe1.page2.text7.text
messagebox("Запись добавлена",0+11+0,"Предупреждение")
thisform.refresh()
thisform.pageframe1.page2.text1.value=0
thisform.pageframe1.page2.text2.value=''
thisform.pageframe1.page2.text3.value=''
thisform.pageframe1.page2.text4.value=''
thisform.pageframe1.page2.text5.value=''
thisform.pageframe1.page2.text6.value=0
thisform.pageframe1.page2.text7.value=0
thisform.pageframe1.page3.grid1.refresh
MESSAGEBOX(" Введите данные")
ENDIF
endif
...
Рейтинг: 0 / 0
Глюки в команде
    #33846546
denis_viktorovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У вас порядковый номер состоит из букв и чисел, вы пытаетесь преобразовать функцией Val() строку в число. Приэтом учитываются числа до первого нечислового символа.
? VAL('8')
рез-тат 8

? VAL('ПР-8')
рез-тат 0.00

? VAL('8-пр')
рез-тат 8.00

Попробуйте ввести просто число,
data type mistake - может быть у вас значность поля ordernom меньше чем число, которое пытаетесь загнать туда.
...
Рейтинг: 0 / 0
Глюки в команде
    #33847308
Shun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если вводишь число - выодит data type mistake
Может функцию VAL заменить или убрать, я не знаю что тут сделать.
Debugger ссылается вот на эту строку

IF SEEK(VAL(thisform.pageframe1.page2.text1.text))

:-(
...
Рейтинг: 0 / 0
Глюки в команде
    #33847354
ShunЕсли вводишь число - выодит data type mistake
Может функцию VAL заменить или убрать, я не знаю что тут сделать.
Debugger ссылается вот на эту строку

IF SEEK(VAL(thisform.pageframe1.page2.text1.text))

:-(
Тип выражения для поиска должен совпадать с типом выражения для индекса.
Если индекс строится по числовому полю, то и выражение для поиска должно иметь числовой тип данных; если индекс строится по символьному полю/комбинации полей, то и выражение для поиска должно быть строкой...
...
Рейтинг: 0 / 0
Глюки в команде
    #33847396
Shun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я знаю...( Просто не знаю как это написать :) Чтобы работало.. :(

Ещё... Не то тут написала. У меня вместо этого

date_do with thisform.pageframe1.page2.text6.text,;
date_go with thisform.pageframe1.page2.text7.text

стоит вот это
date_do with CTOD(thisform.pageframe1.page2.text6.text),;
date_go with CTOD(thisform.pageframe1.page2.text7.text)


Функция CTOD тут тоже не подходит, но чем её заменить не знаю.
У меня в данном сл. не дата, а число.
...
Рейтинг: 0 / 0
Глюки в команде
    #33847554
ShunЯ знаю...( Просто не знаю как это написать :) Чтобы работало.. :(

Ещё... Не то тут написала. У меня вместо этого

date_do with thisform.pageframe1.page2.text6.text,;
date_go with thisform.pageframe1.page2.text7.text

стоит вот это
date_do with CTOD(thisform.pageframe1.page2.text6.text),;
date_go with CTOD(thisform.pageframe1.page2.text7.text)


Функция CTOD тут тоже не подходит, но чем её заменить не знаю.
У меня в данном сл. не дата, а число.
Приведи описание полей таблицы и выражения для индекса(ов).
И только потом уже выложи свои проблемы...
...
Рейтинг: 0 / 0
Глюки в команде
    #33847885
Shun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот
...
Рейтинг: 0 / 0
Глюки в команде
    #33848008
ShunЯ знаю...( Просто не знаю как это написать :) Чтобы работало.. :(

Ещё... Не то тут написала. У меня вместо этого

date_do with thisform.pageframe1.page2.text6.text,;
date_go with thisform.pageframe1.page2.text7.text

стоит вот это
date_do with CTOD(thisform.pageframe1.page2.text6.text),;
date_go with CTOD(thisform.pageframe1.page2.text7.text)


Функция CTOD тут тоже не подходит, но чем её заменить не знаю.
У меня в данном сл. не дата, а число.
Посмотрев на описание таблицы можно сказать, что у тебя должно быть:
date_do with val(alltrim(thisform.pageframe1.page2.text6.text)),;
date_go with val(alltrim(thisform.pageframe1.page2.text7.text))


Shun
Если вводишь число - выодит data type mistake
Может функцию VAL заменить или убрать, я не знаю что тут сделать.
Debugger ссылается вот на эту строку

IF SEEK(VAL(thisform.pageframe1.page2.text1.text))

:-(
Судя по описанию базы данных, индексом является содержимое символьного поля.
Поэтому, в данном случае, должно быть написано так:

IF SEEK(thisform.pageframe1.page2.text1.text)

А еще лучше, если thisform.pageframe1.page2.text1.text будет дополнено (в соответствии с правилами выравнивания символьных выражений, принятых в приложении) пробелами до длины поля, по которому строится индекс...
...
Рейтинг: 0 / 0
Глюки в команде
    #33849244
Shun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовала. То же самое... Всё время выводится "Порядковый номер не может быть равен 0"
Или data type mistage (в случае ввода числа в пор. номер)
Debugger ссылается уже на эту строку

replace ordernom with VAL(thisform.pageframe1.page2.text1.text),;
...
Рейтинг: 0 / 0
Глюки в команде
    #33849273
Shun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хм... И можно спросить, как эту

IF VAL(thisform.pageframe1.page2.text1.text)=0

функцию ещё оформить более грамотно, чтобы не было таких заморочек с вводом ненулевых значений в порядковый номер? Можно ли контроль оформить по-другому?
...
Рейтинг: 0 / 0
Глюки в команде
    #33849398
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShunХм... И можно спросить, как эту

IF VAL(thisform.pageframe1.page2.text1.text)=0

функцию ещё оформить более грамотно, чтобы не было таких заморочек с вводом ненулевых значений в порядковый номер? Можно ли контроль оформить по-другому?
Сначала надо определиться с форматом вводимого номера:
1. там будут только цифры
2. там будут буквы и цифры и есть ли разделитель между цифрами и буквами
- если разделитель отсутствует, то варианты:
2.1. буквенная часть номера будет постоянной, а цифровая меняться (ПрN, где N=1,2,3...)
2.2. будут меняться буквенная и цифровая части (Пр1, СлЗ8, Р15)
2.3. цифры в перемешку с буквами (типа А687ОУ35...)
- при наличии разделителя можно выделить только цифровую часть и проверять ее...

Для варианта 1 как раз подходит твое решение - преобразовать вводимые символы в число...

А дальше пошла адаптация твоего решения с учетом наличия букв:
Для варианта 2.1. есть тоже просто решение - хранить только цифры, а буквы подставлять при помощи шаблонов форматирования поля ввода, либо где-нибудь хранить в настройках программы.
Для варианта 2.2. самым простым решением быдет выделение еще одного поля, где будут храниться буквы номера (т.е. цифры отдельно от букв). Это решение применимо и для варианта 2.1.
Необходимо будет дополнительно проверять, чтобы в буквенную часть номера не ввели цифры и, наоборот, чтобы в числовую часть не ввели буквы...

Вариант 2.3. труден своей неопределенностью и здесь рекомендаций нет!
...
Рейтинг: 0 / 0
Глюки в команде
    #33849417
Shun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Меняются буквенная и цифровая части.
Есть разделитель.
Но количество букв при этом тоже может меняться то есть

ЭПИ-21

Э-12

АМ-32
...
Рейтинг: 0 / 0
Глюки в команде
    #33849418
Shun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То есть буквы и цифры отдельно. С разделителем...
Количество может меняться. Но буквенная и цифровая части не перемешиваются.
...
Рейтинг: 0 / 0
Глюки в команде
    #33849428
Burn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, так и держи свой номер как символьное поле и проверяй не на равенство нулу а на непустоту
...
Рейтинг: 0 / 0
Глюки в команде
    #33849429
ShunТо есть буквы и цифры отдельно. С разделителем...
Количество может меняться. Но буквенная и цифровая части не перемешиваются.
тогда вариантов два:
1. Хранить все данные в одном поле, а при проверке выделять цифровую часть, например так:
Код: plaintext
1.
 nomer=substr(stroka,at("-",stroka)+ 1 )
2. Все-таки разделить буквенную и цифровую части номера на два поля (разделитель игнорировать), а при вводе данных организовать интерактивную проверку ввода (если очередной символ, вводимый в буквенную часть номера - цифра, то закончить ввод буквенной части и перейти к вводу числовой части номера; если в числовую часть номера ввели букву, то выдать сообщение об ошибке и прекратить ввод)
...
Рейтинг: 0 / 0
Глюки в команде
    #33849437
Станислав С ShunТо есть буквы и цифры отдельно. С разделителем...
Количество может меняться. Но буквенная и цифровая части не перемешиваются.
тогда вариантов два:
1. Хранить все данные в одном поле, а при проверке выделять цифровую часть, например так:
Код: plaintext
1.
 nomer=substr(stroka,at("-",stroka)+ 1 )
2. Все-таки разделить буквенную и цифровую части номера на два поля (разделитель игнорировать), а при вводе данных организовать интерактивную проверку ввода (если очередной символ, вводимый в буквенную часть номера - цифра, то закончить ввод буквенной части и перейти к вводу числовой части номера; если в числовую часть номера ввели букву, то выдать сообщение об ошибке и прекратить ввод)
Еще один вариант:
Если значения жестко заданы и редко меняются (например номера студенческих групп составлены по принципу: факультет-курс-группа-специализация), то можно сделать дополнительный справочник и тянуть данные уже оттуда, не прибегая к ручному вводу, сопряженному с ошибками...
...
Рейтинг: 0 / 0
Глюки в команде
    #33849441
Shun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автортогда вариантов два:
1. Хранить все данные в одном поле, а при проверке выделять цифровую часть, например так:

nomer=substr(stroka,at("-",stroka)+1)

2. Все-таки разделить буквенную и цифровую части номера на два поля (разделитель игнорировать), а при вводе данных организовать интерактивную проверку ввода (если очередной символ, вводимый в буквенную часть номера - цифра, то закончить ввод буквенной части и перейти к вводу числовой части номера; если в числовую часть номера ввели букву, то выдать сообщение об ошибке и прекратить ввод)

Спасибо большое, я попробую)

авторНу, так и держи свой номер как символьное поле и проверяй не на равенство нулу а на непустоту

А как это сделать?
...
Рейтинг: 0 / 0
Глюки в команде
    #33849446
Burn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
IF Empty(thisform.pageframe1.page2.text1.text)
   messagebox("Порядковый номер не может быть пустым", 0 + 11 + 0 ,"Предупреждение") 
ELSE
     IF SEEK(thisform.pageframe1.page2.text1.text)
         messagebox("Такая запись уже существует", 0 + 11 + 0 ,"Предупреждение")
     ELSE
.................................
...
Рейтинг: 0 / 0
Глюки в команде
    #33849456
Shun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое)))) ^_______^
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Глюки в команде
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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