On-line: Andrey, гостей 1. Всего: 2 [подробнее..]
АвторСообщение



Пост 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? Или только посимвольно проверять?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 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()


Спасибо: 0 
Цитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 04.06.11 08:00. Заголовок: вопрос 4


Поиск по форуму "Обновить GET"

http://clipper.b.qip.ru/?1-4-0-00000383-000-0-0-1226573702

Спасибо: 0 
Цитата Ответить



Пост N: 19
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 04.06.11 12:51. Заголовок: petr707 пишет: Поис..


petr707 пишет:

 цитата:
Поиск по форуму "Обновить GET"

http://clipper.b.qip.ru/?1-4-0-00000383-000-0-0-1226573702

Как то так
@ 0,0 GET a VALID eval({|| c:=a+b,AEVAL( GetList, {|g| g:display()}),.t.})



вставил в прогу на клиппер 5.01, обновляет поля, хотя функции display() в NG for clipper 5.01 не нашел.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2080
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.06.11 12:54. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет:

 цитата:
хотя функции display() в NG for clipper 5.01 не нашел.


Смотри класс GET

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 20
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 04.06.11 13:30. Заголовок: в стартовое сообщени..


в стартовое сообщения добавил вопрос № 5

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 200
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 04.06.11 13:48. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет:

 цитата:
Вопрос № 2.
В dbedit отобразить базу так, чтобы видеть максимальное число последних записей и чтобы курсор находился на последней записи



index ... descend

dbedit()

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 201
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 04.06.11 13:52. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет:

 цитата:
Вопрос № 3.
В dbedit даты отображаются в формате "дд.мм.гг", причем гг первые две цифры из гггг.
Как отобразить в формате "дд.мм.гггг", не используя массив из picture для dbedit, чтобы не переделывать программу при изменении структуры базы.



set century on

Спасибо: 0 
ПрофильЦитата Ответить



Пост 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 пишет:

 цитата:
set century on


а вот это то что надо

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост 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 указать для числового поля.

Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 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



Спасибо: 0 
Цитата Ответить
постоянный участник


Пост N: 534
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 04.06.11 14:25. Заголовок: petr707, а если знач..


petr707, а если значение x и так NIL? NIL и останется. В GET редактирования не будет.

Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 04.06.11 14:44. Заголовок: x not NIL


В контексте задачи: x -значение поля записи БД , разве нет?
varGet = blank(fieldget)


Спасибо: 0 
Цитата Ответить



Пост N: 23
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 04.06.11 14:46. Заголовок: PSP пишет: А не над..


PSP пишет:

 цитата:
А не надо переменной, значение которой в будущем будет записываться в числовое поле, присваивать строковое значение. Почему бы вместо Var := Space( n ) не использовать Var := 0.
Get-система разберется сама, что ей подсовывают. Можно и PICTURE в GET указать для числового поля.


Не очень хорошо смотрится например номер телефона или почтовый индекс =0

Спасибо: 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 ). Но... Смотри ответ на предыдущее сообщение

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 535
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 04.06.11 15:14. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет:

 цитата:
номер телефона или почтовый индекс =0


В базе эти поля числовые? Оригинально... :)

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 25
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 04.06.11 15:14. Заголовок: petr707 пишет: В ко..


petr707 пишет:

 цитата:
В контексте задачи: x -значение поля записи БД , разве нет?
varGet = blank(fieldget)


а вот это запомню. Пригодится. Сейчас у поля телефон тип numeric, понятно что со временем сменят на character и в этом случае программу править не придется. А blank - это функция пользователя? В NG такой не нашел


Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 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




Спасибо: 0 
Цитата Ответить



Пост N: 26
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 04.06.11 15:24. Заголовок: PSP пишет: В базе э..


PSP пишет:

 цитата:
В базе эти поля числовые? Оригинально... :)


А чем вам не нравится числовой тип поля для почтового индекса? У нас нет индексов начинающихся с нуля. А программе лет 20. Поле телефон только недавно расширили до 10 знаков, а тип еще не сменили, наверно много правок надо будет внести.
Ну и я же пример привел не для того чтобы обсудить именно его, а объяснить почему get переменные желательно инициализировать именно space(n)

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 27
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 04.06.11 15:26. Заголовок: PSP пишет: В базе э..


PSP пишет:

 цитата:
В базе эти поля числовые? Оригинально... :)


А чем вам не нравится числовой тип поля для почтового индекса? У нас нет индексов начинающихся с нуля. А программе лет 20. Поле телефон только недавно расширили до 10 знаков, а тип еще не сменили, наверно много правок надо будет внести.
Ну и я же пример привел не для того чтобы обсудить именно его, а объяснить почему get переменные желательно инициализировать именно space(n)

Спасибо: 0 
ПрофильЦитата Ответить



Пост 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 ответа пока нет. Может наличие хоть какого-то кода ускорит ответ. Правда код писал по памяти, флешку с кодом забыл на работе. Что не так?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 105 , стр: 1 2 3 4 5 6 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 261
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет