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



Пост 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 [только новые]


администратор




Пост N: 55
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 08.06.11 19:39. Заголовок: попробуйте так


Попробуйте открыть в эксклюзиве

use (pth) alias reciver excl new

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



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 08.06.11 19:45. Заголовок: сколько программ одновременно работают(могут работать) с одной таблицей SEND?


1.Если при набивке в SEND не делать COMMIT, другая программа, возможно, их не увидит - до завершения работы первой.
2.Если в одной программе не освободить SEND, другая программа не сможет сделать APPEND
3.Для контроля занятости БД(видимости записей) таблицу SEND можно открывать сторонней утилитой DbfNavigator.exe (freeware)
4.Для контроля - лучше посчитать записи командой COUNT TO n в каждой таблице до и после Append ( вывести в лог)
5.Не очень хорошо - используются не абсолютные пути (disk\path\file) к файлам таблиц,
при нечетком SET DEFAULT PATH можно случайно взять другой экземпляр SEND

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



Пост N: 37
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 09.06.11 18:48. Заголовок: Pasha пишет: Я был ..


Pasha пишет:

 цитата:
Я был невнимателен. Поскольку записи добавляются из send, и именно send открывается командой append from, проверьте, чтобы до выполнения append from send не была открыта монопольно


send была открыта именно этой программой, отображалась dbedit с функцией, и в зависимости от нажатой клавиши производились какие-то действия, и в частности экспорт записей в базу reciver. Закрыв базу send перед append from, экспорт заработал. После append from сразу же открыл send и хотя dbedit этого не заметил, все равно как то не хорошо получается.

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



Пост N: 38
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 09.06.11 18:59. Заголовок: В стартовый топик до..


В стартовый топик добавил вопрос № 6

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



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 09.06.11 19:13. Заголовок: Закрыть-открыть таблицу не внутри Dbedit


Можно по другому - используйте флаг для временного выхода из Dbedit затем автоматически повторный вход.
все действия по - копированию БД, выделению записей - вне тела польз. функции Dbedit Userf
...
private lrepeat:=.t.
private lcopy :=.f.
do while lrepeat
lrepeat :=.f.
if lcopy
lcopy:=.f.
copy file(dbf) to (dbf2)
endif

use (dbf) alias tmp new
dbedit(,,,'userf',,)
close tmp

if !lrepeat; exit; endif
enddo
...
return
Function userf()
...
case lastkey()=K_ESC
lrepeat := .f. // out
return 0
case lastkey()=K_F10 // need close-open
lrepeat:=.t.
lcopy :=.t.
return 0 //
..


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



Пост N: 39
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 09.06.11 19:24. Заголовок: petr707 пишет: copy..


petr707 пишет:

 цитата:
copy file(dbf) to (dbf2)


Эта строка натолкнула на другой алгоритм:
командой copy to из базы send создать временную базу и к ней применить append from

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



Пост N: 40
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 13.06.11 19:36. Заголовок: При входе в get read..


При входе в get read по умолчанию стоит режим замены. Какой командой установить режим вставки?

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


Пост N: 540
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 13.06.11 19:43. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет:

 цитата:
При входе в get read по умолчанию стоит режим замены. Какой командой установить режим вставки?


http://www.ousob.com/ng/53guide/ng91ce6.php

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



Пост N: 41
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 13.06.11 21:33. Заголовок: Программой создается..


Программой создается база и из программы в одно из полей заносятся "запрещенные" символы.
В валид функции будет проверяться, не встречается ли среди введенных символов запрещенные.
Вопрос: как присвоить полю строку из запрещенных символов, в которой есть и ограничители строк (кавычки, апостроф)?
Примеры запрещенных символов для некоторых get полей:
`=!@#$%^&*()_+\|]}[{"?>,<'
`=!@#$%^&*_+\|]}[{?><ЪЫЭ'
`=!@#$%^&*_+\|]}[{?><QWERTYUIOPASDFGHJKLZXCVBNM'

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


Пост N: 541
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 14.06.11 08:45. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет:

 цитата:
как присвоить полю строку из запрещенных символов, в которой есть и ограничители строк (кавычки, апостроф)?


BASE->FieldName := Chr( 34 ) // кавычки
BASE->FieldName := Chr( 39 ) // апостроф

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



Пост N: 42
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 14.06.11 13:52. Заголовок: PSP пишет: BASE-..


PSP пишет:

 цитата:
BASE->FieldName := Chr( 34 ) // кавычки
BASE->FieldName := Chr( 39 ) // апостроф


Чтобы занести в базу строку `=!@#$%^&*()_+\|]}[{"?>,<' надо написать команду:
replace base->fieldName with "`=!@#$%^&*()_+\|]}[{"+chr(34)+"?>,<"+chr(39)
в других языках есть специальный символ, обозначающий, что следующий за ним символ не часть синтаксиса языка, а просто символ. В клиппере такого нет?

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




Пост N: 1974
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 14.06.11 14:21. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет:

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



В клиппере такого нет. Зато в клиппере символьная строка-константа может ограничиваться символами "" '' []
Если внутри строки есть какой-либо символ-ограничитель, то в качестве ограничителя для строки можно использовать альтернативный.
Скажем, я привык использовать паскалевский ограничитель: ''
Но в украинском языке апостроф присутствует в алфавите, и в тех случаях, когда надо использовать такой литерал, я использую ограничитель ""

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



Пост N: 43
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 14.06.11 16:37. Заголовок: Pasha пишет: Если в..


Pasha пишет:

 цитата:
Если внутри строки есть какой-либо символ-ограничитель, то в качестве ограничителя для строки можно использовать альтернативный.


У меня все три типа ограничителей присутствуют в строке, поэтому придется делать через chr()
Строки с запрещенными символами хранятся у меня в текстовом файле. Через буфер обмена я вставил их в prg файл и командой replace занес в базу. Некоторые символы в базе отображены неверно, например вместо какого-то символа вижу желтый квадрат. Хотя в prg файле все символы соответствуют тем, что вставил из буфера.

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




Пост N: 56
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 14.06.11 22:06. Заголовок: можно держать не в базе


можно держать не в базе, а в том же текстовике, или INI файле. Проблем 0, рисуйте в INI все что удасться вбить с клавы.
библиотек и примеров работы с INI на том же http://www.the-oasis.net/ уверен до дури.

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



Пост N: 44
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 15.06.11 13:44. Заголовок: можно ли в get ... r..


можно ли в get ... read перемещать фокус в указанное в валид функции get поле, зависящее от значения, введенного в текущее поле. Запрещать у when функции нельзя, так как пользователь имеет право например стрелкой вверх переместиться в пропущенное поле и изменить его. Использую для этого keyboard replicate(chr(K_DOWN),n). Может для этого есть какая то специальная команда

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




Пост N: 57
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 15.06.11 21:54. Заголовок: разумеется


Разумеется есть ::aGetList[ ::nPos ]:setFocus()
класс oGet

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



Пост N: 45
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 20.06.11 23:47. Заголовок: use reciver alias re..


use reciver alias reciver new
append from ("dbf\send.dbf")

Требуется со своей базы send добавить записи в чужую базу reciver. Последняя база занята только в некоторых пунктах меню чужой программы. Чужая программа не сетевая, на фокспро. Как перед добавлением записей проверить занята чужая база(reciver) или нет, чтобы не заставлять пользователя полностью выходить из программы, а если он все же не вышел, не получать ошибки времени выполнения BASE/1002 АЛИАС ОТСУТСТВУЕТ

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



Пост N: 123
Зарегистрирован: 05.06.07
ссылка на сообщение  Отправлено: 21.06.11 02:57. Заголовок: FLOCK() returns true..


FLOCK() returns true (.T.) if an attempt to lock a database file in USE in the current work area succeeds; otherwise, it returns false (.F.).

И не забыть UNLOCK




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



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 21.06.11 07:04. Заголовок: test exclusive


....
f_name := "reciver.dbf"
do while .t.
if !file_exc(f_name)
exit
endif
use (f_name) alias reciver new
if select("reciver")=0
exit
endif
append from (...)
....
close reciver

exit
enddo
...

#include "fileio.ch
Function file_exc(f_name,nerr_ex)
Local handle:=0,ret:=.f.
handle=fopen(f_name,FO_EXCLUSIVE)
if ( nerr_ex:=FERROR())#0.or.handle=-1
ret:=.f.
else
fclose(handle)
ret:=.t.
endif
return ret


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


Пост N: 388
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.06.11 18:20. Заголовок: petr707 пишет: #inc..


petr707 пишет:

 цитата:
#include "fileio.ch
Function file_exc(f_name,nerr_ex)
Local handle:=0,ret:=.f.
handle=fopen(f_name,FO_EXCLUSIVE)
if ( nerr_ex:=FERROR())#0.or.handle=-1
ret:=.f.
else
fclose(handle)
ret:=.t.
endif
return ret



У меня такой вопрос к автору этого кода: "Может ли так быть, что FERROR() равна 0, но тем не менее значение, возвращаемое FOPEN равно -1?!

И второй вопрос: "Вы не предполагаете, что сам файл базы данных может открыться, но тем не менее его индексные файлы не будут иметь доступа?!"

Эти вопросы у меня возникли в связи с тем, что на мой взгляд проще сразу же использовать команду USE, которая и возвратит все ошибки об открытии! Зачем несколько раз делать одно и тоже: сначала в вашей функции file_exc, а затем в команде USE?

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

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