СообЧа > База Знаний > Базы данных > FoxPro

Вопрос

А чем занимается Visual FoxPro 5.0?

Ответ

FoxPro — это система управления базами данных (СУБД). Данные могут быть, в принципе, любыми — текст, графика, аудио. Я лично использую FoxPro для ведения библиографической базы (по работе требуется) и для хранения различных данных измерений (например, каталоги землетрясений). В Фоксе есть очень мощная система индексации (уникальная), что позволяет быстро извлекать данные с любой глубины таблицы, сортировать, делать различные выборки. Есть свой язык программирования.
А «Visual» — это уже наворот Microsoft — для удобства создания приложений в стиле Windows (окна, кнопки, менюшки).

Сергей

Что значит уникальная? Индексы есть везде. А VFH облегчает процесс программирования, позволяя не размениваться на мелочи типа написания кода для создания форм, а просто использовать для этого готовые объекты типа формы.

ushansky

Вопрос

Как сделать в FoxPro 2.5/ Dos правильную обработку русской большой буквы «Н»?

Ответ

Поставь FoxPro 2.6 Разница несущественная, а эта проблема там решена. Но, может быть дело в другом? Драйвер клавиатуры может подставлять 16-ричный код 48 вместо 8D. Такой грех есть в драйвере KeyRus.

Владимир Тюльпа

Вопрос

Как в Grid добавит колонку, в которой выбиралось значение из поля со списком и заносилось в таблицу БД.

Ответ

Предположим, у вас уже есть форма и есть Grid.
1. Выделяем Grid.
2. Выделяем колонку, в которую мы хотим добавить поле со списком (это можно сделать в окне Properties). Предположим, это будет Column1.
3. Теперь в панели инструментов Form Controls щелкаем по ComboBox (или другому, короче который вы хотите вставить), и сразу щелкаем по Grid-у по колонке, в которую нужно вставить этот элемент управления (но не по заголовку, конечно, а там где у нас текстовое поле). При этом Grid должен быть в фокусе.
4. Это еще не все! Если вы все сделали правильно, теперь у нашей колонки (Column1) два элемента управления — TextBox (который был по умолчанию) и ComboBox. TextBox нужно удалить. Для этого в окне Properties выберете Text1, который расположен сразу под Column1, затем щелкните по окну формы (Form1), в которой расположен наш Grid, и нажмите клавишу Delete. Text1 удалиться, и для нашей колонки останется только один элемент управления — ComboBox!
5. Теперь осталось настроить ComboBox. Выбираем в Окне Properties Combo1 (который расположен под Column1) и меняем:
ControlSource — поле базы данных, в который будет заноситься результат выбора
RowSourceType — тип источника для ComboBox-а (массив, таблица и т.д.)
RowSource — источник данных (в зависимости от RowSourceType, имя массива, таблицы и т.д.)

Из конференции Expert_FAQ

Вопрос

При создании проекта в VFP и его компиляции в exe-файл возможно ли избавиться от главного окна? Я уже всячески экспериментировал с переменной _screen, ничего не получается. То есть, создаю пустой проект, в нем вставляю форму, говорю ей set main, компилирую.

Запускаю полученный экзешник и форма открывается в главном окне VFP (это я успеваю увидеть) и тут же закрывается. Я понимаю: не прописал где-то read events, но как все же избавиться от главного окна, чтобы открывалась только форма set main?

Ответ

Это делается таким образом.
Вставляем в проект statr.prg и делаем его set main.

_SCREEN.Visible=.f.
*DO open
ON SHUTDOWN QUIT && это чтобы винда закрывала прог. при выходе
DO FORM myform &&noshow
READ EVENTS
if RIGHT(sys(16,0),4)='.exe'
ON SHUTDOWN
QUIT
endif
close all
clear all
*_SCREEN.Visible=.t.
cancel

В форме должно быть прописано св-во:

.ShowWindow=2 -As Top-Level Form
в .Destroy такой код
CLEAR EVENTS
if RIGHT(sys(16,0),4)#'.exe'
_SCREEN.Visible=.t. && иначе при разработке окно Фокса пропадет
endif

Кроме того в проект, а лучше в каталог с прог. обязательно положить файл config.fpw такого содержания:

SCREEN=OFF
CODEPAGE = 1251
*KEYCOMP = WINDOWS
COLLATE = RUSSIAN

Если будут еще вопросы, то наш лучший сайт по Фокс: http://www.foxclub.ru Форум которого лучше любой книги для программистов. Там можно быстро получить ответы на почти все вопросы, и его архив нужно иметь под рукой.

Из конференции Expert_FAQ

Вопрос

Как создать свою библиотеку классов в FoxPro 6.0 и использовать в своем проекте?

Ответ

Вы должны сделать следующее:

* Открыть проект и на вкладке «Classes» нажать «New».
* В диалоговом окне New Class в поле Class Name указать имя Вашего класса.
* Класс сам по себе не может быть создан (т. е. создан с нуля). Вы должны из списка ниже выбрать имя базового класса на котором будет основан класс. Например, пускай это будет Container. Имейте в виду, что в данном списке перечислены базовые классы Visual FoxPro. Однако вы можете выбрать другие классы щелкнув по кнопке (…) слева от списка.
* В самом нижнем поле вы должны указать имя библиотеки классов в которой будет сохраняться ваш только, что созданный класс. Если этой библиотеки нет, то вы просто указываете имя (произвольно) и Фокс ее создает.
* Нажмите кнопку Ок! и распахнется Class Desinger с пустым (в нашем случае) контейнером.
* Вот здесь можете создавать свой класс.
* Например, поместите 4 кнопки на контейнер. На каждой из них напишите:
1. «Первая»
2. «Предыдущая»
3. «Следующая»
4. «Последняя»
* К каждой кнопке прикрепите свой код, при помощи которого можно будет перемещаться по записям той таблицы, которая открыта в активной в данный момент времени рабочей области.
* Напишите метод который бы проверял бы начало и конец таблицы (BOF) and (EOF) и соответственно принималось решение о том какие кнопки активировать а какие деактивировать (короче Enabled или Disabled).
* Сохраните.
* Вот, собственно, и все. Теперь на основе вашего класса вы сможете создавать объект который будет перемещать указатель записи. Вы его можете добавлять на каждую форму, вами разработанную.

Класс, только что описанный мною, есть в галерее. FFC — знаете такое? Вот там в категории Data Navigation Вы найдете этот класс. Он называется VCR Buttoms, а есть еще и с графикой VCR Picture Navigation Button.

DZ_Zero-Q

Вопрос

Версия языка: 6.0 (SP5)

Можно ли сделать в таблице VFP5(6) поле-счетчик, как в Access (AutoNumber). Если можно, то каким образом.

Ответ

Нумеровать физические записи обычно мало смысла.
Но на всякий случай:

REPLACE num WITH RECNO() , это в .DBF.

Если речь идет об уникальном ключевом поле, то для генерации уникальных ID записи есть много функций.
Вот выдержка из конференции
http://www.foxclub.ru
*** Уникальный N записи на все времена для каждой записи ***
Ильдус 13.12.2002 16:28:09


Какие есть идеи? Уникальный N записи на все времена для каждой записи БД, например увеличиваем счетчик на 1, держим этот счетчик в промежуточной базе, блокируем ее запись на время использования . При работе в многопользовательском режиме, в режиме файл-сервер.


*** RE: Уникальный N записи на все времена для каждой ***
remi 13.12.2002 16:39:19


Делаем таблицу Global_ID из одного поля. Даем этому полю IDENTITY. Все остальные идентификаторы новых записей для всех остальных таблиц получаем через функцию. Эта функция вставляет в Global_ID запись и читает, что получилось. Раз в день/неделю/месяц удалем из Global_ID все записи, кроме одной/нескольких последних. Чтобы побыстрее вставка шла.


*** RE: Уникальный N записи на все времена для каждой ***
AlexK 13.12.2002 18:24:56


Формируем GUI на каждой станции плюс ID станции. Т.е. наш уникальный ключ — GUI+ID

. . .

Это стандартная функция:

Function NewID(tcAlias) Local lcAlias,
lnID,
lcOldReprocess,
lnOldArea lnOldArea = Select()
lcAlias = Upper(IIF(Parameters()<1,Alias(),tcAlias))
lcOldReprocess = Set('REPROCESS')
* Lock until user presses Esc SET REPROCESS TO AUTOMATIC
if !Used("IDS") USE newid!ids IN 0 endif Select ids
if Seek(lcAlias, "Ids", "table")
if Rlock() lnID = ids.nextid REPLACE
ids.nextid WITH ids.nextid + 1
Unlock endif
endif Select (lnOldArea)
SET REPROCESS TO lcOldReprocess
Return lnID


Вообще Fox это среда разработчика, а не пользователя, как Access. Поэтому лучше многое делать вручную, это дает полную власть над программой. Причем писать на Fox нужно примерно в 10 раз меньше, чем на C и Delhpi. Если будут еще вопросы, то наш лучший сайт по Фокс:
http://www.foxclub.ru Форум которого лучше любой книги для программистов, и его архив лучше иметь под рукой.

Еще советую внимательно изучить примеры самого Фокса — Solution.app
Тоже очень помогает :)

Из конференции Expert_FAQ

Вопрос

Старинный FoxPro25 при открытии файла отчета (modify report rpos) выдает ошибку «Can not find transport program». Что это такое и как от этого избавиться?

Ответ

Этот вопрос относится к теме BD и FoxPro.

Скорей всего это несовпадение формата отчета более новой версии. Fox пытается его конвертировать, т.к. иначе понять другую версию не может. Но не находит свою программу конвертации — transprt.prg, которая должна быть в его каталоге.
Как известно, поддерживается совместимость снизу вверх, а не наоборот. Т.е. новые форматы данных не читаются старыми программами.

Есть правда утилиты, которые преобразуют .frx в .prg
Их можно поискать например на
foxpopuli.narod.ru

Из конференции Expert_FAQ



Copyright © 2000-2004 Сообщество Чайников
Контактная информация