Автор | Сообщение |
|
| |
Пост N: 17
Зарегистрирован: 30.05.11
|
|
Отправлено: 03.06.11 23:27. Заголовок: All In One
В связи с написанием программы по разным частям кода возникают трудности. Чтобы не задавать вопросы в разных темах и не забыть в какой именно, буду спрашивать в этой. Я возможно этим нарушу правила форума, вопросы будут затрагивать разнообразные функции, но пусть оправданием мне будет то, что все они относятся к одной программе. Вопрос №1 В get поле вводится какое то значение и если оно существует в справочнике, переходим в следующее get поле, если же не существует, то выдается предупреждение об этом. Сам оператор не имеет право добавлять это значение в справочник, но, убедившись в том, что он ввел без ошибок, имеет право оставить это значение в get поле и перейти в следующее. Чтобы случайно не проскочило ошибочно введенное значение, выход из get поля должен осуществляться по нестандартной клавише( т.е. K_ENTER, K_DOWN не подходят). Например подошло бы Ctrl+Enter Реализовать самому не удалось Вопрос № 2. В dbedit отобразить базу так, чтобы видеть максимальное число последних записей и чтобы курсор находился на последней записи use base new go bottom base->dbedit() вижу только одну последнюю запись use base new go bottom skip -17 base->dbedit() вижу все последние записи, но курсор находится на первой видимой use base new go bottom skip -17 skip 17 base->dbedit() вижу только одну последнюю запись Вопрос № 3. В dbedit даты отображаются в формате "дд.мм.гг", причем гг первые две цифры из гггг. Как отобразить в формате "дд.мм.гггг", не используя массив из picture для dbedit, чтобы не переделывать программу при изменении структуры базы. Вопрос № 4. в функции из valid изменяются значения других get переменных. Изменения становятся видимыми только тогда, когда курсор попадает в измененное соответствующее get поле, а хочется чтобы обновились сразу после выхода из поля, в котором они изменились. Обновляю так keyboard (replicate(chr(K_DOWN),17)+replicate(chr(K_UP),16)) Можно как то попроще? Вопрос № 5 При входе в get ... read в чужой программе на фоксе все поля пустые. В своей программе get переменные инициализирую командой space(n). Но после выхода из read и сохранения значений в полях базы с типом numeric выдает ошибку несоответствия типа данных. Обхожу так if !Empty() replace namebase->namefield with val(alltrim(namegetfield)) endif Как то попроще можно? Вопрос № 6 Есть строка из символов, которых не должно быть в веденном значении в get поле. Существует ли какая то функция, возвращающая true или false в случае наличия символов из строки 1 в строке 2? Или только посимвольно проверять?
|
|
|
Ответов - 105
, стр:
1
2
3
4
5
6
All
[только новые]
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 04.06.11 07:36. Заголовок: вопрос 2
use base new go bottom skip -17 keyboard CHR(K_CTRL_PGDN) // base->dbedit()
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 04.06.11 08:00. Заголовок: вопрос 4
|
|
|
|
| |
Пост N: 19
Зарегистрирован: 30.05.11
|
|
Отправлено: 04.06.11 12:51. Заголовок: petr707 пишет: Поис..
petr707 пишет: вставил в прогу на клиппер 5.01, обновляет поля, хотя функции display() в NG for clipper 5.01 не нашел.
|
|
|
|
| |
Пост N: 2080
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.06.11 12:54. Заголовок: SergeyKorotun пишет:..
SergeyKorotun пишет: цитата: | хотя функции display() в NG for clipper 5.01 не нашел. |
| Смотри класс GET
|
|
|
|
| |
Пост N: 20
Зарегистрирован: 30.05.11
|
|
Отправлено: 04.06.11 13:30. Заголовок: в стартовое сообщени..
в стартовое сообщения добавил вопрос № 5
|
|
|
|
| |
Пост N: 200
Зарегистрирован: 11.06.10
|
|
Отправлено: 04.06.11 13:48. Заголовок: SergeyKorotun пишет:..
SergeyKorotun пишет: цитата: | Вопрос № 2. В dbedit отобразить базу так, чтобы видеть максимальное число последних записей и чтобы курсор находился на последней записи |
| index ... descend dbedit()
|
|
|
|
| |
Пост N: 201
Зарегистрирован: 11.06.10
|
|
Отправлено: 04.06.11 13:52. Заголовок: SergeyKorotun пишет:..
SergeyKorotun пишет: цитата: | Вопрос № 3. В dbedit даты отображаются в формате "дд.мм.гг", причем гг первые две цифры из гггг. Как отобразить в формате "дд.мм.гггг", не используя массив из picture для dbedit, чтобы не переделывать программу при изменении структуры базы. |
| set century on
|
|
|
|
| |
Пост N: 22
Зарегистрирован: 30.05.11
|
|
Отправлено: 04.06.11 14:18. Заголовок: AlexMyr пишет: inde..
AlexMyr пишет: цитата: | index ... descend dbedit() |
| Возможно я неправильно употребил слово "последних". Я просто хотел чтобы окно dbedit было заполнено полностью записями, а какими (отсотированными в каком то порядке или действительно введенные в базу последними) именно не имеет значения. Подошел ответ petr707: use base new go bottom skip -17 keyboard CHR(K_CTRL_PGDN) // base->dbedit() AlexMyr пишет: а вот это то что надо
|
|
|
|
| постоянный участник
|
Пост N: 533
Зарегистрирован: 27.01.07
|
|
Отправлено: 04.06.11 14:20. Заголовок: SergeyKorotun пишет:..
SergeyKorotun пишет: цитата: | В своей программе get переменные инициализирую командой space(n). Но после выхода из read и сохранения значений в полях базы с типом numeric выдает ошибку несоответствия типа данных. Обхожу так if !Empty() replace namebase->namefield with val(alltrim(namegetfield)) endif Как то попроще можно? |
| А не надо переменной, значение которой в будущем будет записываться в числовое поле, присваивать строковое значение. Почему бы вместо Var := Space( n ) не использовать Var := 0. Get-система разберется сама, что ей подсовывают. Можно и PICTURE в GET указать для числового поля.
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 04.06.11 14:22. Заголовок: вопрос 5
вместо Space(n) лучше x=BLANK(x,.t.) или x=MyBlank(x) Function MyBlank(x) Local ret,tx:=valtype(x) do case case tx="N" ret:=0 case tx="C" ret:=space(len(x)) case tx="D" ret:=ctod('') case tx="L" ret:=.f. otherwise ret:=NIL endcase return ret
|
|
|
|
| постоянный участник
|
Пост N: 534
Зарегистрирован: 27.01.07
|
|
Отправлено: 04.06.11 14:25. Заголовок: petr707, а если знач..
petr707, а если значение x и так NIL? NIL и останется. В GET редактирования не будет.
|
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 04.06.11 14:44. Заголовок: x not NIL
В контексте задачи: x -значение поля записи БД , разве нет? varGet = blank(fieldget)
|
|
|
|
| |
Пост N: 23
Зарегистрирован: 30.05.11
|
|
Отправлено: 04.06.11 14:46. Заголовок: PSP пишет: А не над..
PSP пишет: цитата: | А не надо переменной, значение которой в будущем будет записываться в числовое поле, присваивать строковое значение. Почему бы вместо Var := Space( n ) не использовать Var := 0. Get-система разберется сама, что ей подсовывают. Можно и PICTURE в GET указать для числового поля. |
| Не очень хорошо смотрится например номер телефона или почтовый индекс =0
|
|
|
|
| |
Пост N: 24
Зарегистрирован: 30.05.11
|
|
Отправлено: 04.06.11 14:55. Заголовок: petr707 пишет: вмес..
petr707 пишет: цитата: | вместо Space(n) лучше x=BLANK(x,.t.) или x=MyBlank(x) Function MyBlank(x) Local ret,tx:=valtype(x) do case case tx="N" ret:=0 case tx="C" ret:=space(len(x)) case tx="D" ret:=ctod('') case tx="L" ret:=.f. otherwise ret:=NIL endcase return ret |
| тип значений мне известен и ничто не мешает мне инициализировать get переменную значением нужного типа напрямую(a:=space(10); n:=0 ). Но... Смотри ответ на предыдущее сообщение
|
|
|
|
| постоянный участник
|
Пост N: 535
Зарегистрирован: 27.01.07
|
|
Отправлено: 04.06.11 15:14. Заголовок: SergeyKorotun пишет:..
SergeyKorotun пишет: цитата: | номер телефона или почтовый индекс =0 |
| В базе эти поля числовые? Оригинально... :)
|
|
|
|
| |
Пост N: 25
Зарегистрирован: 30.05.11
|
|
Отправлено: 04.06.11 15:14. Заголовок: petr707 пишет: В ко..
petr707 пишет: цитата: | В контексте задачи: x -значение поля записи БД , разве нет? varGet = blank(fieldget) |
| а вот это запомню. Пригодится. Сейчас у поля телефон тип numeric, понятно что со временем сменят на character и в этом случае программу править не придется. А blank - это функция пользователя? В NG такой не нашел
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 04.06.11 15:22. Заголовок: blank
blank() - из Clipper Tools не хотите цеплять Tools? берите MyBlank() до кучи - ниже - шаблон Picture для get Function get_picture(cfield) Local nf:=fieldnum(UPPER(cfield)),tip,ret:="",nsize,ndec if nf>0 tip :=fieldtype(nf) nsize:=fieldsize(nf) do case case tip="C" ret:=replicate("X",nsize) case tip="N" ndec:=fielddeci(nf) if ndec>0 ret:= replicate("9",nsize-ndec-1)+'.'+replicate("9",ndec) else ret:=replicate("9",nsize) endif endcase endif return ret
|
|
|
|
| |
Пост N: 26
Зарегистрирован: 30.05.11
|
|
Отправлено: 04.06.11 15:24. Заголовок: PSP пишет: В базе э..
PSP пишет: цитата: | В базе эти поля числовые? Оригинально... :) |
| А чем вам не нравится числовой тип поля для почтового индекса? У нас нет индексов начинающихся с нуля. А программе лет 20. Поле телефон только недавно расширили до 10 знаков, а тип еще не сменили, наверно много правок надо будет внести. Ну и я же пример привел не для того чтобы обсудить именно его, а объяснить почему get переменные желательно инициализировать именно space(n)
|
|
|
|
| |
Пост N: 27
Зарегистрирован: 30.05.11
|
|
Отправлено: 04.06.11 15:26. Заголовок: PSP пишет: В базе э..
PSP пишет: цитата: | В базе эти поля числовые? Оригинально... :) |
| А чем вам не нравится числовой тип поля для почтового индекса? У нас нет индексов начинающихся с нуля. А программе лет 20. Поле телефон только недавно расширили до 10 знаков, а тип еще не сменили, наверно много правок надо будет внести. Ну и я же пример привел не для того чтобы обсудить именно его, а объяснить почему get переменные желательно инициализировать именно space(n)
|
|
|
|
| |
Пост N: 28
Зарегистрирован: 30.05.11
|
|
Отправлено: 04.06.11 16:53. Заголовок: flag=.f. setkey(K_F1..
flag=.f. setkey(K_F10, {|p, l, v| ExitOn(p, l, v, flag)}) // по F10 выход из get даже если значения нет в справочнике @1,1 say "Фамилия" get F valid vF(,,,flag) ... read function vF(p,l,v,flg) if v="F" if flg flag:=.f. return .t. endif if F есть в справочнике return .t. else return .f. endif function ExitOn(p,l,v,flg) if v="F" flag:=.t. keyboard chr(K_DOWN) //заставить выполнить функцию из valid endif На самый важный для меня вопрос №1 ответа пока нет. Может наличие хоть какого-то кода ускорит ответ. Правда код писал по памяти, флешку с кодом забыл на работе. Что не так?
|
|
|
Ответов - 105
, стр:
1
2
3
4
5
6
All
[только новые]
|
|