|
|
|
код кнопок "добавить" "удалить" "изменить"
|
|||
|---|---|---|---|
|
#18+
у меня главная программа main, которая запускает меню. В ней и поставила SET DEFAULT TO &Dir_Dbf CLOSE data * заставка SET DEFAULT TO &Dir_Form *DO FORM LichnDann SET DELET ON SET DEFAULT TO &Dir_prg *SET PROCEDURE TO proc DO menu2.mpr READ Events CLOSE DATABASES RETURN это её кусок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2007, 22:21 |
|
||
|
код кнопок "добавить" "удалить" "изменить"
|
|||
|---|---|---|---|
|
#18+
Зачем столько set default? Одного не хватает? Ищем set delete off во всем, что запускается из меню. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2007, 22:23 |
|
||
|
код кнопок "добавить" "удалить" "изменить"
|
|||
|---|---|---|---|
|
#18+
нет, там ничего такого нет Это меню SET SYSMENU TO SET SYSMENU AUTOMATIC DEFINE PAD _21r1731x3 OF _MSYSMENU PROMPT "\<1.Ввод документов" COLOR SCHEME 3 ; KEY ALT+1, "" DEFINE PAD kmenu2 OF _MSYSMENU PROMPT "\<2.Запросы" COLOR SCHEME 3 ; KEY ALT+2, "" DEFINE PAD kmenu3 OF _MSYSMENU PROMPT "\<3.Вывод документов" COLOR SCHEME 3 ; KEY ALT+3, "" DEFINE PAD kmenu4 OF _MSYSMENU PROMPT "\<4.Справка" COLOR SCHEME 3 ; KEY ALT+4, "" DEFINE PAD kmenu5 OF _MSYSMENU PROMPT "\<5.Выход" COLOR SCHEME 3 ; KEY ALT+5, "" ON PAD _21r1731x3 OF _MSYSMENU ACTIVATE POPUP _2160sk08s ON PAD kmenu2 OF _MSYSMENU ACTIVATE POPUP _2160sk08t ON PAD kmenu3 OF _MSYSMENU ACTIVATE POPUP _2160sk08u ON SELECTION PAD kmenu5 OF _MSYSMENU Quit DEFINE POPUP _2160sk08s MARGIN RELATIVE SHADOW COLOR SCHEME 4 DEFINE BAR 1 OF _2160sk08s PROMPT "\<1.Файл" DEFINE BAR 2 OF _2160sk08s PROMPT "\<2.Природные условия" DEFINE BAR 3 OF _2160sk08s PROMPT "\<3.Описание препятствия" ON SELECTION BAR 1 OF _2160sk08s ; DO _21r1731x5 ; IN LOCFILE("\БД\PRG\MENU2" ,"MPX;MPR|FXP;PRG" ,"WHERE is MENU2?") ON SELECTION BAR 2 OF _2160sk08s ; DO _21r1731x8 ; IN LOCFILE("\БД\PRG\MENU2" ,"MPX;MPR|FXP;PRG" ,"WHERE is MENU2?") ON SELECTION BAR 3 OF _2160sk08s ; DO _21r1731xb ; IN LOCFILE("\БД\PRG\MENU2" ,"MPX;MPR|FXP;PRG" ,"WHERE is MENU2?") DEFINE POPUP _2160sk08t MARGIN RELATIVE SHADOW COLOR SCHEME 4 DEFINE BAR 1 OF _2160sk08t PROMPT "Добавить" ON SELECTION BAR 1 OF _2160sk08t DO FORM Погода.SCX DEFINE POPUP _2160sk08u MARGIN RELATIVE SHADOW COLOR SCHEME 4 DEFINE BAR 1 OF _2160sk08u PROMPT "Добавить" ON SELECTION BAR 1 OF _2160sk08u DO FORM Препятствия.SCX * ********************************************************* * * * * _21R1731X5 ON SELECTION BAR 1 OF POPUP _2160sk08s * * * * Procedure Origin: * * * * From Menu: MENU2.MPR, Record: 5 * * Called By: ON SELECTION BAR 1 OF POPUP _2160sk08s * * Prompt: 1.Файл * * Snippet: 1 * * * ********************************************************* * PROCEDURE _21r1731x5 SET DEFAULT TO &Dir_Form DO FORM form1 * ********************************************************* * * * * _21R1731X8 ON SELECTION BAR 2 OF POPUP _2160sk08s * * * * Procedure Origin: * * * * From Menu: MENU2.MPR, Record: 6 * * Called By: ON SELECTION BAR 2 OF POPUP _2160sk08s * * Prompt: 2.Природные условия * * Snippet: 2 * * * ********************************************************* * PROCEDURE _21r1731x8 SET DEFAULT TO &Dir_Form DO FORM form2 * ********************************************************* * * * * _21R1731XB ON SELECTION BAR 3 OF POPUP _2160sk08s * * * * Procedure Origin: * * * * From Menu: MENU2.MPR, Record: 7 * * Called By: ON SELECTION BAR 3 OF POPUP _2160sk08s * * Prompt: 3.Описание препятствия * * Snippet: 3 * * * ********************************************************* * PROCEDURE _21r1731xb SET DEFAULT TO &Dir_Form DO FORM form3 А эта вся main CLEAR CLOSE DATABASES CLOSE ALL * Также в main'е делаем все необходимые установки SET DATE GERMAN SET CENTURY on * Описываем все переменные типа PUBLIC ****PUBLIC InAr [ 1, 11 ] PUBLIC Dir, Dir_Dbf, Dir_Form, Dir_out, Dir_Prg, Dir_Help PUBLIC ars [ 1 ], arc [ 1 ] * Определяем директорию, из которой запускалась программа DIR = SYS( 16 ) nc = RAT( '\', Dir ) DIR = SUBSTR( Dir, 1, nc - 1 ) nc = RAT( '\', Dir ) DIR = SUBSTR( Dir, 1, nc - 1 ) Dir_Dbf = Dir + '\Dbf' Dir_Form = Dir + '\Form' Dir_Help = Dir + '\help' Dir_Out = Dir + '\out' Dir_Prg = Dir + '\prg' * Отладочная печать, которую потом нужно убрать ( или закомментарить ('*' в 1-й позиции) *? dir, Dir_Prg * Переключаемся на поддиректорию '..\Dbf', где расположены таблицы *** !!! оератор "&" - очень мощный, он подставляет в текст программы значение переменной, *** которая следует непосредственно за знаком &, с его помощью можно организовать массив *** подпрограмм SET DEFAULT TO &Dir_Dbf CLOSE data * заставка SET DEFAULT TO &Dir_Form *DO FORM LichnDann SET DELET ON * Переключаемся на поддиректорию '..\Prg', где расположены программы SET DEFAULT TO &Dir_prg * Указываем программе, что в файле proc.prg будут размещены подпрограммы *SET PROCEDURE TO proc DO menu2.mpr READ Events CLOSE DATABASES RETURN ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2007, 22:34 |
|
||
|
код кнопок "добавить" "удалить" "изменить"
|
|||
|---|---|---|---|
|
#18+
Какое значение в свойстве DataSession у форм? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2007, 23:35 |
|
||
|
код кнопок "добавить" "удалить" "изменить"
|
|||
|---|---|---|---|
|
#18+
1. Default Data Session А почему нельзя воспользваться Pack? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2007, 10:02 |
|
||
|
код кнопок "добавить" "удалить" "изменить"
|
|||
|---|---|---|---|
|
#18+
2 Neta Кто Вас учит программировать на фокспро?? номер версии с которой Вы работаете??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2007, 10:07 |
|
||
|
код кнопок "добавить" "удалить" "изменить"
|
|||
|---|---|---|---|
|
#18+
2 Neta если Вы взялись программировать на фокспро, то вначале нужно азам и правилам, которые писаны в фокспро потом и кровью так вот, одно из первых правил, которое заставляет Вас думать - это правило с пом. которого программисты дают имена функциям, процедурам, переменным .... это так называемая Венгерская нотация. человека, который Вам дал в руки фокспро и не объяснил этих азов, необходимо прибить. если Вы и дальше будете таким образом писать свою курсовую, то к окончанию работы, Вы сойдете с ума, и возненавидите фокспро, в котором на самом деле все делается намного проще ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2007, 10:26 |
|
||
|
код кнопок "добавить" "удалить" "изменить"
|
|||
|---|---|---|---|
|
#18+
Проверьте, нет ли где-нибудь в самой форме команды SET DELETED OFF. В крайнем случае, сделайте настройку SET DELETED ON напрямую в Init-формы NetaА почему нельзя воспользваться Pack? Использовать PACK в процессе работы не то, чтобы "нельзя", а "не рекомендуется". Во-первых, эта команда предполагает открытие таблицы в режиме Exclusive. А это, в свою очередь, предполагает монопольный доступ к таблице. Т.е. ни о какой совместной работе и многопользовательском приложении не может быть и речи. Во-вторых, использование команды PACK при открытой форме приводит к разрушению структуры Grid. Необходимо предпринять ряд специальных мер, чтобы предотвратить это разрушение. В-третьих, сакраментальный вопрос: а зачем? Что собственно Вы выигрываете от немедленного физического удаления записей помеченных как удаленные? Факт "видимости" таких записей регулируется настройкой SET DELETED. Если количество таких записей относительно не велико, то и замедление выборок не происходит. Т.е. нет никакой необходимости физически удалять такие записи немедленно. Только дополнительные проблемы. Поэтому, все подобные команды выносятся в отдельные служебные процелуры по обслуживанию базы данных, которые выполняются администратором периодически. Раз в неделю, месяц, год. В зависимости от интенсивности удаления записей и ответственности администратора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2007, 11:12 |
|
||
|
код кнопок "добавить" "удалить" "изменить"
|
|||
|---|---|---|---|
|
#18+
Оператор макроподстановки & без крайней необходимости тоже лучше не использовать. Проблема здесь в том, что программа с большим количеством макроподстановок становится "не читабельной". Трудно понять "кто на ком стоял". Это сейчас ты помнишь о чем идет речь. А отложи программку на пару недель. Придется потратить кучу времени и сил на понимание того, что же здесь понаписано. Переход между директориями можно осуществлять командой Код: plaintext Данная команда осуществит переход в директорию PRG, находящуюся внутри текущей директории. Кроме того, в таких переходах, вообще-то, нет особой необходимости. Достаточно настроить пути доступа к нужным директориям через настройку SET PATH. Например, в текущей директории есть директория PRG внутри которой находится файл, который необходимо запустить. Код: plaintext 1. 2. FoxPro встретив команду DO осуществляет поиск нужного файла по следующему алгоритму: -) По пути, указанному в самой команде DO (если он там указан) -) Если путь не указан или файл не найден, то поиск осуществляется в текущей директории -) Если файл не найден, то поиск осуществляется по путям указанным в настройке SET PATH Настройка SET PATH, это одна из настроек, которые делаеются один раз в главной стартовой программе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2007, 11:37 |
|
||
|
код кнопок "добавить" "удалить" "изменить"
|
|||
|---|---|---|---|
|
#18+
to alex11100 1) Собственно, программировать на FoxPro меня никто не обучал. Образно говоря, мне показали как делаются формы при помощи wizarda и сказали делай. В последний раз мой препод сказал, что я разбираюсь в FoxPro лучше чем он. 2) работаю на FoxPro 8.0 и все проблемы с удалением решила. Просто прописывала в главной программе, а запускала на выполнение просто форму, поэтому естественно записи всплывали. 3) А чем не понравились имена переменных? По-моему все довольно логично=)))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2007, 21:39 |
|
||
|
код кнопок "добавить" "удалить" "изменить"
|
|||
|---|---|---|---|
|
#18+
Netato alex11100 3) А чем не понравились имена переменных? По-моему все довольно логично=)))) Я за него попытаюсь ответить По одной из классификаций, FoxPro относится к, так называемым, не типизированным языкам. Это значит, что у него нет жесткой привязки типов данных к переменным. Любая переменная памяти в любой момент может изменить свой тип. Поэтому и "не типизированный". Кроме того, для написания программы существенным является "область видимости" переменных памяти. Но в FoxPro явного объявление переменных может вообще не быть или быть сделано в другом программном модуле. Как следствие, при разборе кода программы бывает довольно трудно понять, что же это за переменная такая. Какого она типа и какова ее область видимости. Чтобы уменьшить эту неопределенность, и была предложена, так называемая "венгерская нотация". Это не значит, что эта самая "венгерская нотация" строго обязательна для использования. Просто ее использование облегчает чтение и понимание кода, как некий "стандарт по умолчанию". «Венгерскую нотацию» изобрел программист Microsoft Чарльз Симони, венгр по национальности. Но названа она так не только по национальности изобретателя, но и по количеству согласных в наименовании, которое характерно для венгерского языка. Цель этой нотации – лаконичное и эффективное представление информации об объекте в его имени. Имя объекта в соответствии с данной нотацией имеет следующий формат: [Префикc][ОсновноеИмя] Префикс представляет собой сочетание из строчных согласных букв, характеризующих объект, например – lbl – Этикетка или frm – форма. В отношении переменных памяти, префикс состоит из 2 букв: Первая буква - это область видимости переменной g - Public (Global) p - Private l - Local t - параметр Вторая буква - это тип данных, содержащихся в данной переменной n - Numeric c - Character d - Date t - Time a - Array v - Variable (тип не известен или может изменяться) и т.п. В соответсвии с этой нотацией твое определение переменных Код: plaintext Следовало бы записать так: Код: plaintext Т.е. по имени переменной сразу видно, что это глобальная переменная (первая буква g) символьного типа (вторая буква - c) Венгерская нотация стала неявным стандартом для именования переменных памяти. Хотя при наименование объектов в форме или классе ее уже не так придерживаются. А в наименовании полей таблиц вообще используют крайне редко. Просто там это не слишком удобно, да и нет того эффекта. Но, повторюсь, следовать или не следовать венгерской нотации при именовании переменных памяти - это личное дело программиста. Никаких обязательных условий на этот счет нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2007, 23:12 |
|
||
|
код кнопок "добавить" "удалить" "изменить"
|
|||
|---|---|---|---|
|
#18+
проблема с изменением данных в таблице. Некоторые изменения некоторых полей не сохраняются, а именно. На форме есть TextBox, Spinner,Optiongroup. Если изменяю данные в первых двух, то в данный момент все изменяется, перезапускаю проект, смотрю все тож самое, если меняю в OptionGroup, то все изменения сохраняются и после перезапуска. Код кнопки: flag=.T. IF ThisForm.Command10.Caption=="Изменить" flag=.F. ThisForm.Text1.Enabled=.T. ThisForm.Optiongroup1.Enabled=.T. ThisForm.Spinner1.Enabled=.T. thisform.Command10.Caption="Сохранить" thisform.Command1.Enabled=.F. thisform.Command2.Enabled=.F. ENDIF IF flag IF MESSAGEBOX("Сохранить изменения?", 4+32+256,"Изменение")=6 TABLEUPDATE() ELSE TABLEREVERT() ENDIF ThisForm.Text1.Enabled=.F. ThisForm.Optiongroup1.Enabled=.F. ThisForm.Spinner1.Enabled=.F. thisform.Command10.Caption="Изменить" thisform.Command1.Enabled=.T. thisform.Command2.Enabled=.T. Endif ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 18:23 |
|
||
|
код кнопок "добавить" "удалить" "изменить"
|
|||
|---|---|---|---|
|
#18+
Какое значение свойства ControlSource для всех перечисленных объектов? Что возвращает TableUpdate() и в случае "не сохранения"? Если TableUpdate()=.F., то какая причина ошибки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 20:27 |
|
||
|
код кнопок "добавить" "удалить" "изменить"
|
|||
|---|---|---|---|
|
#18+
С объектом Spinner1, связано поле файл.id типа integer (раньше было numeric, изменила на integer, суть не поменялась). С объектом TextBox файл.name типа character[10]. Все через ControlSource. Дело в том, что он у меня то сохраняет изменения, то нет. Никак последовательость выявить не могу. Я тут правда нескоько , скажем так, "химичала", пыталась восстановить удаленые записи, т.е. я думаю, что я делала это. Последовательность действий была такова: Я открыла таблицу в режиме просмотра, увидела крайний левый столбец, в котором клеточка записи, которую я удаляла была помечена черным, щелчком цвет поменялся на белый, ну и запись восстановилась. Соответственно, после этого мне захотелось что-то поменять с формы, ну вот и наткнулась на эту проблему. Может лучше просто выложить здесь свой проект? Просто не иогу объяснить точно, что именно не сохраняется. Повторюсь, последовательность выявить не могу. Причем, сразу скажу, это касается как тех записей, которые были восстановлены, так и тех, которые никогда не удалялись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 21:28 |
|
||
|
код кнопок "добавить" "удалить" "изменить"
|
|||
|---|---|---|---|
|
#18+
Выкладывайте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 17:39 |
|
||
|
код кнопок "добавить" "удалить" "изменить"
|
|||
|---|---|---|---|
|
#18+
Вот моя база данных, проблемы с изменением решила радикально, удалила таблицу создала новую, пока ранние проблемы обнаружены не были. Правда, все равно, все вместе как то странно функционирует, последний раз вообще все зависло. Поиск то работает, то не работает... Эххх.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2007, 21:54 |
|
||
|
код кнопок "добавить" "удалить" "изменить"
|
|||
|---|---|---|---|
|
#18+
В FoxPro принципиально важно знать, какая рабочая область является текущей . Т.е. с какой рабочей областью (таблицей) будет работать все команды и функции в данный момент . Так вот, и команда TableUpdate() и TableRevert() по умолчанию работают только и исключительно с текущей рабочей областью. Поэтому, принципиально важно убедится в том, что попытка сохранения или отмены выполняется именно в той рабочей области, которая и нужна. Этого можно добиться двумя способами. Либо непосредственно перед использованием подобных команд обязательно делать переход в нужную рабочую область, либо, если синтаксис функции позволяет, указать нужную рабочую область в самой функции. Применительно к Вашему коду это будет один из двух вариантов: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. или Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Какой вариант покажется Вам наиболее удобным, решайте сами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2007, 20:49 |
|
||
|
код кнопок "добавить" "удалить" "изменить"
|
|||
|---|---|---|---|
|
#18+
Еще проблема: На форме есть OptionGroup со значениями "Есть", "Нет", по соответствующему выбору в полю записи таблицы (переменная логического типа) должно быть присвоено соответственно T или F. Так вот как сделать обратную связь, т.е. если значение поле Т, то точечка появляется напротив "Есть" и наоборот. (через ControlSourse нельзя, как я понимаю) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2007, 18:54 |
|
||
|
код кнопок "добавить" "удалить" "изменить"
|
|||
|---|---|---|---|
|
#18+
А что, CheckBox использовать нельзя? Для OptionGroup, в данном случае, придется программировать, поскольку тип данных поля таблицы не соответсвует типу данных, которые возвращает OptionGroup. Т.е. при позиционировании указателя записи в таблице придется программно выставлять значение OptionGroup.Value, а в событии OptionGroup.Valid() также программно записывать выбранное значение в поле таблицы. Логическое значение .T. конвертируется в целочисленное значение 1, поэтому оказывается выбранным первый пункт. А логическое значение .F. конвертируется в 0, поэтому не выбирается ни один пункт. При этом, обратная конвертация из числа в логичское значение ВСЕГДА вернет .T., поскольку выбрать 0 в OptionGroup невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2007, 19:05 |
|
||
|
код кнопок "добавить" "удалить" "изменить"
|
|||
|---|---|---|---|
|
#18+
А в CheckBox ведь могут быть выбраны оба поля одновременно (или я ошибаюсь)?????, а этого не хотелось бы. В поле таблицы я вношу запись так: DO CASE CASE ThisForm.OptionGroup2.Value = 1 REPLACE radar WITH .T. CASE ThisForm.OptionGroup2.Value = 2 REPLACE radar WITH .F. ENDCASE и здесь все вроде работает хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2007, 19:21 |
|
||
|
код кнопок "добавить" "удалить" "изменить"
|
|||
|---|---|---|---|
|
#18+
NetaА в CheckBox ведь могут быть выбраны оба поля одновременно (или я ошибаюсь)???? Это как? CheckBox выглядит как один квадратик в котором либо может быть птичка, либо не может. Это как раз в OptionGroup можно выбрать одновременно оба пункта (правда, только программно). Для проверки просто "брось" на форму объект CheckBox и попробуй выбрать "оба поля (значения?) одновременно". Если получится, обязательно сообщи как ты этого добилась, мне тоже интересно Если я правильно понимаю назначение поля, то для него идельным было бы как раз использование CheckBox, поскольку стоит вопрос не выбора значения из списка возможных вариантов (для чего и предназначен OptionGroup), а ответ на вопрос вроде "Есть ли?". Именно для решения подобных задач CheckBox и предназначен. Он предназначен для ответа "Да" или "Нет" на вопрос, сформулированный в тексте объекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2007, 00:08 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=34420500&tid=1589536]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
45ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 336ms |

| 0 / 0 |
