Автор | Сообщение |
|
| |
Пост 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
[только новые]
|
|
|
| |
Пост N: 55
Зарегистрирован: 20.02.11
|
|
Отправлено: 08.06.11 19:39. Заголовок: попробуйте так
Попробуйте открыть в эксклюзиве use (pth) alias reciver excl new
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 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
|
|
|
|
| |
Пост 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 этого не заметил, все равно как то не хорошо получается.
|
|
|
|
| |
Пост N: 38
Зарегистрирован: 30.05.11
|
|
Отправлено: 09.06.11 18:59. Заголовок: В стартовый топик до..
В стартовый топик добавил вопрос № 6
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 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 // ..
|
|
|
|
| |
Пост N: 39
Зарегистрирован: 30.05.11
|
|
Отправлено: 09.06.11 19:24. Заголовок: petr707 пишет: copy..
petr707 пишет: Эта строка натолкнула на другой алгоритм: командой copy to из базы send создать временную базу и к ней применить append from
|
|
|
|
| |
Пост N: 40
Зарегистрирован: 30.05.11
|
|
Отправлено: 13.06.11 19:36. Заголовок: При входе в get read..
При входе в get read по умолчанию стоит режим замены. Какой командой установить режим вставки?
|
|
|
|
| постоянный участник
|
Пост N: 540
Зарегистрирован: 27.01.07
|
|
Отправлено: 13.06.11 19:43. Заголовок: SergeyKorotun пишет:..
|
|
|
|
| |
Пост N: 41
Зарегистрирован: 30.05.11
|
|
Отправлено: 13.06.11 21:33. Заголовок: Программой создается..
Программой создается база и из программы в одно из полей заносятся "запрещенные" символы. В валид функции будет проверяться, не встречается ли среди введенных символов запрещенные. Вопрос: как присвоить полю строку из запрещенных символов, в которой есть и ограничители строк (кавычки, апостроф)? Примеры запрещенных символов для некоторых get полей: `=!@#$%^&*()_+\|]}[{"?>,<' `=!@#$%^&*_+\|]}[{?><ЪЫЭ' `=!@#$%^&*_+\|]}[{?><QWERTYUIOPASDFGHJKLZXCVBNM'
|
|
|
|
| постоянный участник
|
Пост N: 541
Зарегистрирован: 27.01.07
|
|
Отправлено: 14.06.11 08:45. Заголовок: SergeyKorotun пишет:..
SergeyKorotun пишет: цитата: | как присвоить полю строку из запрещенных символов, в которой есть и ограничители строк (кавычки, апостроф)? |
| BASE->FieldName := Chr( 34 ) // кавычки BASE->FieldName := Chr( 39 ) // апостроф
|
|
|
|
| |
Пост 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) в других языках есть специальный символ, обозначающий, что следующий за ним символ не часть синтаксиса языка, а просто символ. В клиппере такого нет?
|
|
|
|
|
| Администратор
|
Пост N: 1974
Зарегистрирован: 23.05.05
|
|
Отправлено: 14.06.11 14:21. Заголовок: SergeyKorotun пишет:..
SergeyKorotun пишет: цитата: | в других языках есть специальный символ, обозначающий, что следующий за ним символ не часть синтаксиса языка, а просто символ. В клиппере такого нет? |
| В клиппере такого нет. Зато в клиппере символьная строка-константа может ограничиваться символами "" '' [] Если внутри строки есть какой-либо символ-ограничитель, то в качестве ограничителя для строки можно использовать альтернативный. Скажем, я привык использовать паскалевский ограничитель: '' Но в украинском языке апостроф присутствует в алфавите, и в тех случаях, когда надо использовать такой литерал, я использую ограничитель ""
|
|
|
|
| |
Пост N: 43
Зарегистрирован: 30.05.11
|
|
Отправлено: 14.06.11 16:37. Заголовок: Pasha пишет: Если в..
Pasha пишет: цитата: | Если внутри строки есть какой-либо символ-ограничитель, то в качестве ограничителя для строки можно использовать альтернативный. |
| У меня все три типа ограничителей присутствуют в строке, поэтому придется делать через chr() Строки с запрещенными символами хранятся у меня в текстовом файле. Через буфер обмена я вставил их в prg файл и командой replace занес в базу. Некоторые символы в базе отображены неверно, например вместо какого-то символа вижу желтый квадрат. Хотя в prg файле все символы соответствуют тем, что вставил из буфера.
|
|
|
|
| |
Пост N: 56
Зарегистрирован: 20.02.11
|
|
Отправлено: 14.06.11 22:06. Заголовок: можно держать не в базе
можно держать не в базе, а в том же текстовике, или INI файле. Проблем 0, рисуйте в INI все что удасться вбить с клавы. библиотек и примеров работы с INI на том же http://www.the-oasis.net/ уверен до дури.
|
|
|
|
| |
Пост N: 44
Зарегистрирован: 30.05.11
|
|
Отправлено: 15.06.11 13:44. Заголовок: можно ли в get ... r..
можно ли в get ... read перемещать фокус в указанное в валид функции get поле, зависящее от значения, введенного в текущее поле. Запрещать у when функции нельзя, так как пользователь имеет право например стрелкой вверх переместиться в пропущенное поле и изменить его. Использую для этого keyboard replicate(chr(K_DOWN),n). Может для этого есть какая то специальная команда
|
|
|
|
| |
Пост N: 57
Зарегистрирован: 20.02.11
|
|
Отправлено: 15.06.11 21:54. Заголовок: разумеется
Разумеется есть ::aGetList[ ::nPos ]:setFocus() класс oGet
|
|
|
|
| |
Пост 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 АЛИАС ОТСУТСТВУЕТ
|
|
|
|
| |
Пост 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
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 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
|
|
|
|
| постоянный участник
|
Пост 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?
|
|
|
Ответов - 105
, стр:
1
2
3
4
5
6
All
[только новые]
|
|