|
|
|
Глюки в команде
|
|||
|---|---|---|---|
|
#18+
У меня одна проблема, не могу понять, почему даже если в форму введено определённое значение порядкового номера, выводится сообщение “Порядковый номер не может быть равен 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2006, 21:23 |
|
||
|
Глюки в команде
|
|||
|---|---|---|---|
|
#18+
У вас порядковый номер состоит из букв и чисел, вы пытаетесь преобразовать функцией Val() строку в число. Приэтом учитываются числа до первого нечислового символа. ? VAL('8') рез-тат 8 ? VAL('ПР-8') рез-тат 0.00 ? VAL('8-пр') рез-тат 8.00 Попробуйте ввести просто число, data type mistake - может быть у вас значность поля ordernom меньше чем число, которое пытаетесь загнать туда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 07:32 |
|
||
|
Глюки в команде
|
|||
|---|---|---|---|
|
#18+
Если вводишь число - выодит data type mistake Может функцию VAL заменить или убрать, я не знаю что тут сделать. Debugger ссылается вот на эту строку IF SEEK(VAL(thisform.pageframe1.page2.text1.text)) :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 11:43 |
|
||
|
Глюки в команде
|
|||
|---|---|---|---|
|
#18+
ShunЕсли вводишь число - выодит data type mistake Может функцию VAL заменить или убрать, я не знаю что тут сделать. Debugger ссылается вот на эту строку IF SEEK(VAL(thisform.pageframe1.page2.text1.text)) :-( Тип выражения для поиска должен совпадать с типом выражения для индекса. Если индекс строится по числовому полю, то и выражение для поиска должно иметь числовой тип данных; если индекс строится по символьному полю/комбинации полей, то и выражение для поиска должно быть строкой... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 11:51 |
|
||
|
Глюки в команде
|
|||
|---|---|---|---|
|
#18+
Я знаю...( Просто не знаю как это написать :) Чтобы работало.. :( Ещё... Не то тут написала. У меня вместо этого 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 тут тоже не подходит, но чем её заменить не знаю. У меня в данном сл. не дата, а число. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 11:58 |
|
||
|
Глюки в команде
|
|||
|---|---|---|---|
|
#18+
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 тут тоже не подходит, но чем её заменить не знаю. У меня в данном сл. не дата, а число. Приведи описание полей таблицы и выражения для индекса(ов). И только потом уже выложи свои проблемы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 12:26 |
|
||
|
Глюки в команде
|
|||
|---|---|---|---|
|
#18+
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 будет дополнено (в соответствии с правилами выравнивания символьных выражений, принятых в приложении) пробелами до длины поля, по которому строится индекс... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 14:01 |
|
||
|
Глюки в команде
|
|||
|---|---|---|---|
|
#18+
Попробовала. То же самое... Всё время выводится "Порядковый номер не может быть равен 0" Или data type mistage (в случае ввода числа в пор. номер) Debugger ссылается уже на эту строку replace ordernom with VAL(thisform.pageframe1.page2.text1.text),; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 19:00 |
|
||
|
Глюки в команде
|
|||
|---|---|---|---|
|
#18+
Хм... И можно спросить, как эту IF VAL(thisform.pageframe1.page2.text1.text)=0 функцию ещё оформить более грамотно, чтобы не было таких заморочек с вводом ненулевых значений в порядковый номер? Можно ли контроль оформить по-другому? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 19:15 |
|
||
|
Глюки в команде
|
|||
|---|---|---|---|
|
#18+
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. труден своей неопределенностью и здесь рекомендаций нет! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 21:09 |
|
||
|
Глюки в команде
|
|||
|---|---|---|---|
|
#18+
Меняются буквенная и цифровая части. Есть разделитель. Но количество букв при этом тоже может меняться то есть ЭПИ-21 Э-12 АМ-32 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 21:26 |
|
||
|
Глюки в команде
|
|||
|---|---|---|---|
|
#18+
То есть буквы и цифры отдельно. С разделителем... Количество может меняться. Но буквенная и цифровая части не перемешиваются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 21:28 |
|
||
|
Глюки в команде
|
|||
|---|---|---|---|
|
#18+
Ну, так и держи свой номер как символьное поле и проверяй не на равенство нулу а на непустоту ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 21:43 |
|
||
|
Глюки в команде
|
|||
|---|---|---|---|
|
#18+
ShunТо есть буквы и цифры отдельно. С разделителем... Количество может меняться. Но буквенная и цифровая части не перемешиваются. тогда вариантов два: 1. Хранить все данные в одном поле, а при проверке выделять цифровую часть, например так: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 21:49 |
|
||
|
Глюки в команде
|
|||
|---|---|---|---|
|
#18+
Станислав С ShunТо есть буквы и цифры отдельно. С разделителем... Количество может меняться. Но буквенная и цифровая части не перемешиваются. тогда вариантов два: 1. Хранить все данные в одном поле, а при проверке выделять цифровую часть, например так: Код: plaintext 1. Еще один вариант: Если значения жестко заданы и редко меняются (например номера студенческих групп составлены по принципу: факультет-курс-группа-специализация), то можно сделать дополнительный справочник и тянуть данные уже оттуда, не прибегая к ручному вводу, сопряженному с ошибками... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 21:58 |
|
||
|
Глюки в команде
|
|||
|---|---|---|---|
|
#18+
автортогда вариантов два: 1. Хранить все данные в одном поле, а при проверке выделять цифровую часть, например так: nomer=substr(stroka,at("-",stroka)+1) 2. Все-таки разделить буквенную и цифровую части номера на два поля (разделитель игнорировать), а при вводе данных организовать интерактивную проверку ввода (если очередной символ, вводимый в буквенную часть номера - цифра, то закончить ввод буквенной части и перейти к вводу числовой части номера; если в числовую часть номера ввели букву, то выдать сообщение об ошибке и прекратить ввод) Спасибо большое, я попробую) авторНу, так и держи свой номер как символьное поле и проверяй не на равенство нулу а на непустоту А как это сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 22:02 |
|
||
|
Глюки в команде
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 22:07 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33849429&tid=1591235]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
142ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 193ms |
| total: | 404ms |

| 0 / 0 |
