Базы данных: FoxPro


FAQ - Visual Foxpro Club



  Источник:

Вопрос - Ответ


  1. Filer и Fisual FoxPro
  2. Screen=Off в config.fpw
  3. Своя справка в стандартных диалогах VFP
  4. Инсталлятор и VFP
  5. Преобразование даты из Character(Двоичный) в Date
  6. Перенос базы данных, созданной в конструкторе
  7. Инкрементальный поиск и ComboBox
  8. Нулевой байт (сигнатура) заголовка DBF
  9. Поиск данных по шаблону
  10. Ограничение в Excel на импорт более чем 16K записей
  11. Подсуммирование данных в отчете
  12. Отправка писем в VFP
  13. Быстродействие FPD в Win2k
  14. Курс лекций по VFP
  15. "Тормоза" в ListBox
  16. Невозможно обновить курсор на команде append blank
  17. Отчет FRX -> HTML
  18. Как скопировать открытый файл (.dbf и .idx)
  19. Автоподсказка в VFP7
  20. Печать отчетов с помощью Set Printer to Name
  21. Снова проблемы с печатью отчетов на HP
  22. Документы в Word
  23. Arj-архивы из под Windows
  24. Древовидное представление данных

Как запретить одновременный запуск нескольких копий одного приложения VFP?


Воспользуйтесь функцией Win32API FindWindow (cWClass,cWinName) , которая возвращает дескриптор окна с заданным заголовком cWinName: если приложение запускается впервые, возвращаемое значение равно нулю.


Как приложению присвоить иконку, отличную от стандартной?


С помощью ImagEdit создайте файл иконки (*.ico) в двух режимах (16x16 для просмотра в режиме Small Icon, панели задач; и 32x32 для просмотра в режиме Large Icon). Добавьте файл в проект на вкладку Other. Откройте диалог Project Info в меню Project/Project Info или с помощью контекстного меню в Project Manager и на первой вкладке "Project" установите галочку в CheckBox "Attach Icon", после чего станет доступной кнопка "Icon". Нажав ее, Вы в диалоге укажете файл иконки. Компилируйте EXE-файл и наслаждайтесь увиденным.


Как прервать выполнение программы до окончания работы внешней программы?


Воспользуйтесь все той же функцией FindWindow Win32API, упомянутой выше. Тогда, проверяя в цикле на наличие дескриптора, равного нулю, ждем, ждем, ждем...


Как передать результаты отчета по Internet?

(Андрей Гусев angus_2000@mail.ru)

Думаем, все знают о скудных возможностях VFP в этом вопросе : есть только возможность экспорта результатов в текстовые файлы с PostScript-кодами или без оных (с необязательным параметром "ASCII"). Остается писать ручками.

Могу предложить , написанный на VC++ (имя пользователя - "Admin" и пустой пароль). Эта программа позволяет передавать данные из Dbf-файлов в уже созданный шаблон MS Word.

В этот вопрос решен несколько шире : есть возможность экспорта отобранных данных в файлы Xls, Dbf, Txt; преобразование результатов отчета в Word и HTML. Отметим, что и в ПК "Квант" под DOS проблема решена должным образом.

Третий, стандартный способ - использовать класс _frx2html (_internet.vcx). Пример : ...\Samples\Vfp98\Solution\Ffc\dohtml.scx


В процессе работы с моим визуальным классом файл .vcx принял "угрожающие" размеры. Что с ним случилось и как с этим бороться ?

(Вячеслав Крикун krikun@tut.by)

Наряду с файлами .dbf, такой же формат имеют и файлы с расширениями .dbc, frx, .lbx, .mnx, .pjx, .scx, .vcx. Поэтому Вы можете открыть их (Use) и просмотреть (Browse) в результате чего увидите, что файл "разбух" от записей, помеченных на удаление. Отсюда вывод: откройте файл с параметром Exclusive и упакуйте его.Применительно к проекту можно выбрать пункты меню Project-Clean Up Project.

Другой, более простой способ : открыть файл .vcx в Class Browser и нажать кнопку "Clean Up Class Library".


Над проектом трудится множество людей, как из фирмы, так и привлеченные со стороны. Сложилось так, что обновленный .EXE файл надо относительно часто передавать заказчику по модему. А это удовольствие - не из "самых". Как уменьшить размеры .EXE файла в разрабатываемом проекте?


Во-первых, хочется заметить, что собственно этапу кодирования (написания программных модулей) предшествует тщательное планирование будущего проекта, определение его архитектуры. Это тем более важно делать в случаях предполагаемого большого размера проекта или задействования в участии "вольных стрелков" со стороны. Это дает в дальнейшем сопровождении проекта б'ольшую гибкость.

Надо уметь выделять различные уровни работы с приложением: интерфейс, обработка данных и прочее. А о том, как это сделать, я отсылаю Вас к языку UML и продуктам Rational Rose и Visual Modeler (Visual Studio).

Со стороны Visual FoxPro могу порекомендовать в свойствах существующего проекта (Project Information, вкладка Project) убрать информацию об отладке (CheckBox "Debug Info"). Также, если такой вариант допустим, использовать вместо единого .EXE файла .FXP файлы с .EXE файлом, включающим в себя "стабильную" часть, ядро программы.

И, как вариант, в Internet есть утилита ASPack (Shareware) и подобные ей, которые значительно уменьшают размер .EXE .


Под Win2k FPD 2.6 захватывает ВСЮ память (и вываливает ее в swap). Как это лечится?

(Игорь bujhm@tut.by)

Начну с вопроса, а сколько у Вас физической памяти ? И, на сколько я в общем знаю работу системы, при нехватке физической памяти (если это так - зачем ставить Win2k, лучше поставить Win NT - "одного поля ягода") наоборот, происходит "выброс" в swap-файл программных ресурсов, занимаемых другими, не активными в данный момент, приложениями. Вы, наверное, это хотели сказать ?

В свойствах ярлыка, на вкладке "Память" (это относится к исполняемым файлам, н., Foxpro.exe. Для пакетных файлов можно попробовать это сделать в _default.pif, который находится в папке Winnt) советую отключить память XMS, установить конкретное, исходя из размера БД значение для EMS (4-16 М, только не "auto") и, чтобы увеличить скорость загрузки самой программы (это уже так, по ходу) поставить DPMI минимальным (1024). После подобных манипуляций размер "потребляемой" памяти существенно снизится.

Я (Тюрин Юрий, веду VFP-клуб в рамках сайта НТ ООО "ЛюксСофт") рад, что кто-то откликнулся "со стороны" и написал ответ. Я не совсем согласен с мнением отвечающего, т.к. на моей машине под 2000-м таких проблем не возникало, а рекомендации мои носили, скорее, "оптимизационный" характер. Но и высказываний против у меня особых нет - по теории как бы все верно.

Владимир Фабер: "На данный вопрос вы даёте неправильный ответ. FPD по умолчанию "забирает" под себя ВСЮ доступную физическую память. И никакими установками в .pif файлах это не лечится. Для выделения нужного кол-ва памяти следует смотреть на параметр MEMLIMIT файла config.fp. ...

Этот вопрос неоднократно обсуждался в конференциях по фоксу, кроме как через Memlimit проблема захвата фоксом памяти не решается. "


Начинаю изучать Vis ual FoxPro и к своему неудовольствию отмечаю, что не могу вызвать утилиту "Filer", которой было удобно пользоваться в FPD

Filer никуда не делся, просто он преобразился - теперь это COM-объект (в старых обозначениях - нечто вроде ActiveX) со своими свойствами и методами ("Filer.dll" - так ищите описание его в MSDN). А это значит, что теперь его можно использовать в любых приложениях (Office, VB, VC++), которые поддерживают корректную работу с COM-объектами.

Вы можете его вызывать програмно, создавая объектную переменную: oMyFiler = CREATEOBJECT('Filer.FileUtil').

Если по-прежнему осталось желание работать с ним в "интерактиве" - воспользуйтесь формой
HOME(1) + 'Tools\Filer\Filer.scx'
, которую вы можете изменить на свой вкус.


Просматривали примеры на VFP и в файле Config.fpw встретили строку "SCREEN=OFF". Что делает эта команда?

Эта команда скрывает главное окно VFP. Для использования каких-либо стандартных средств VFP это окно может понадобиться: например, для просмотра или печати отчета. В этом случае необходимо его показать (_SCREEN.SHOW), а после выполнения просмотра - опять скрыть (_SCREEN.HIDE).


Скажите, можно ли в стандартных диалогах VFP вызвать свою справку?

Можно и нужно, т.к. малоинформативный английский язык :) не много скажет нашему обычному пользователю, да и своя програмная специфика может просматриваться. В этом деле самая большая трудность - знать HelpContextID для конкретного диалога. В этом нам поможет функция sys(1023) (включить режим диагностирования помощи). Включите вызов этой функции перед открытием интересуемого Вами диалога, откройте диалог и нажмите на заветную кнопку "Help", после чего Вы можете спокойно переписать необходимый идентификатор. Естественно, что в Вашем проекте справки в Map-файле (.h) Вы должны использовать идентификатор с этим номером.


У меня проблемы с распространением своей программы. Хотел, было, с помощью Setup Wizard-a "состряпать" инсталляционную програмку, но наткнулся на стену непонимания :-( (со стороны мелкософта). Нашел в Inete ссылки на некоторые инсталляторы: с обрезанными функциями, требует PID зарегистрированного Visual Studio, а где я его возьму ;)) ; говорят, хорошая штука, да тоже Trial и "весит" много - дорого скачивать. Может, кто подскажет какую-нибудь ссылочку, а?


Могу предложить Вашему вниманию свободно распространяемый инсталятор для программ Windows . Особенности его работы следуюшие:

  • Inno Setup полностью бесплатная программа, даже для создания инсталяторов коммерческих программ (слышать это так же приятно, как и слышать школьнику новость о том, что его школа сгорела ;-)).
  • Поддержка всех 32-битных версий Windows:Windows 95, 98, 2000, XP, Me, NT 4.0. Поддержка NT 3.51 также может быть включена.
  • Поддержка создания одного инсталяционного файла для online-дистрибьюции. Разбивка на диски также поддерживается.
  • Стандартный интерфейс в духе мастера 2000/XP (в т.ч.на русском языке).
  • Создание различных типов установки: полный, минимальный, другой.
  • Копирование файлов: встроенное сжатие файлов (метод .zip и.bzip2). Инсталятор может сравнивать версии файлов
  • Регистрирование DLL/OCX.
  • Создание ярлыков в любых папках, включая меню Пуск, Quick Launch и Рабочий стол.
  • Работа с реестром и .INI файлами.
  • Инсталяция и деинсталяция в ускоренном режиме (без диалогов, окон, сообщений).
  • Настройка деинсталятора.

Имеется БД в которой в одном из полей типа Character(Двоичный) хранится дата в виде кодов (не символов), например такая : 02 20 19 04, т.е. 4 байта ( это 19 апреля 2002). Как преобразовать такой тип в тип Date?

(GOGOL)

Как заниматься шаманством с преобразованием типов не подскажу, поэтому предлагаю "ручной"способ борьбы:

     ? ConvertToDate(Char_bin)
Function ConvertToDate
 lpara cStr
 local y1,y2,m,d
 y1=Dec2Hex(asc(subs(cStr,2,1)))  && старшая цифра года
 y2=Dec2Hex(asc(subs(cStr,1,1)))  && младшая цифра года
 m =Dec2Hex(asc(subs(cStr,4,1)))  && месяц 
 d =Dec2Hex(asc(subs(cStr,3,1)))  && день
 retu ctod(m+"."+d+"."+y1+y2)   && значение типа Date
* если бы в поле числа были не в псевдодесятичном виде (20 в 16 с/с = 32 в 10 с/с), эта функция была бы не нужна
 Function Dec2Hex
 LPARAMETER nDec
 LOCAL nnDec, nOst, cOst, cHex, nnn
 cHex = ""
 nnDec = nDec
 DO WHILE nnDec > 0
       nOst = MOD(nnDec, 16)
       nnDec = INT(nnDec / 16)
       IF BETW(nOst,10,15)
           cOst = CHR(nOst + 55)
       ELSE 
           cOst = STR(nOst,1)
       ENDIF
       cHex = cOst + cHex
 ENDDO
 RETURN IIF(MOD(LEN(cHex),2)==1, "0","") + cHex

Будем надеяться, что кто-нибудь предложит более умное решение.


База данных, созданная в "Конструкторе баз данных", при открытии на другом компьютере автоматически сортируется (все таблицы располагаются рядами и становятся одинаковыми по размеру). Как это отключить, если это возможно? Где хранятся координаты месторасположения таблиц в Конструкторе БД?

(Игнатенко Алёша)

Не знаю, обрадую Вас или нет, но данные о размере и расположении таблиц в схеме данных (извиняюсь, название перешло со мной из Access) хранятся в FoxUser. В этом причина ваших "локальных" бед. ;-)). Структура FoxUser.dbf примерно такова:

Имя поля Описание
TYPE тип данных, хранящихся в записи: PREVW и DATAW - для VFP. Причем PREVW отвечает за размеры и позиции окон
ID категория для каждого типа: для PREVW - BROWWIND, WINDMODIFY и проч.
NAME уникальное имя объекта
READONLY ясно из названия
CKVAL контрольная сумма для проверки целостности данных
DATA Memo-поле с собственно данными (за объяснениями по формату обращайтесь к мелкософту)
UPDATED дата последнего изменения

Из таблицы Вам будет теперь понятно, что собака порылась в поле типа PREVW, а простые сравнения измененного и предварительно сохраненного FoxUser.dbf (напимер, с помощью Windows Commander) удовлетворят Вашу жажду знаний.


Есть ComboBox, прикрепленный к dbf. Как сделать, чтобы при наборе первого значения автоматически искалось значение в таблице и отображалось в Combobox?

(Бризбанк г.Иркутск)

Как я понял, основная проблема связана с "автоматическим" поиском значения. Самый простой способ его реализовать - установить свойство Style ComboBox-а в "2" (Dropdown List).


В документации по VFP6 встретил строку в которой говорится ,что принадлежность таблиц к той или иной версии Foxpro определяется информацией в нулевом байте заголовка таблицы, изменяя информацию этого байта можно скрыть информацию от других приложений. Прошу рассказать каким способом изменить этот байт заголовка с тем чтобы данное приложение понимало этот файл. И возможно ли сделать так чтобы включая таблицу в базу данных автоматически изменялась информация этого байта на установленную ?

Как изменить нулевой байт заголовка таблиц с тем чтобы другие приложения не могли прочитать информацию из этой таблицы а база данных в которую входит таблица могла работать ?


Я было, сначала разделил 2 вопроса выше, а после решил отвечать на оба одним махом, т.к. ноги у них растут с одного и того же места (не буду уточнять c какого ;))

Во-первых, я хотел бы увидеть те строки сам воочию.
Тут, похоже, встает старый философский вопрос о том, что первично : яйцо или курица. Дело в том, что 0-вой байт не управляет, а "сигнализирует" VFP о том, как системе воспринимать расположенную в DBF информацию. Смею заверить, что между значением этого байта и содержимым файла однозначное соответствие. Этот байт должен автоматически принимать отличное от имеющегося значение в случае изменения структуры соответствующим образом.
В MSDN сказано (цитирую как Библию ;)) : VFP не изменяет заголовок файла DBF в формате 2.x до тех пор, пока не была добавлена ни одна из следующих характеристик:

  • поддержка значения Null
  • типы данных DateTime, Currency и Double
  • 2-чные Char- или Memo-поля
  • таблица добавлена в файл БД (.dbc)

Что касается скрытия информации, так ведь формат VFP не будет читаться в FPD; или, если таблица принадлежит одной БД (VFP), то она недоступна, пока мы явно не откроем эту БД или система (VFP) сама не сделает это автоматически по обратной связи (см. структуру заголовка), где хранится ссылка на эту БД, что, впрочем, никак не мешает доступу к информации.

От старожил слышал, что в Clipper-е (кое-кто еще пользуется им) была возможность расположения в файле дополнительной информации, недоступной вне программы. А так, если необходимо "укрыться", надо придумывать либо что-то искусственное, либо использовать SQL-сервера и/или другие системные "штучки".

Единственный случай, когда я прибегаю к модификации этого байта (кстати, с помощью обычных низкоуровневых функций FOpen, FWrite, ...) - есть восстановление заголовков файла с помощью написанной мною утилиты .

Цитируемый топик MSDN - "Table File Structure (.DBF, .VCX, .DBC, .SCX, .LBX, .MNX, .PJX, .FRX)"


Кто-нибудь подскажет, каким символом обозначить условное знакоместо при поиске в FoxPro2.5? Во многих программах это звездочка(*). В Fox-е этот номер не проходит.

Cykloid

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

В FoxPro в командах поиска (Locate и Seek) такие возможности не реализованы. Есть команды Like() и LikeC() (для Unicode-кодировки), которые позволяют определить по шаблону наличие данных в строке. Применимо к поиску по записям эти функции можно использовать в цикле.

Поэтому для исполнения Ваших желаний советую воспользоваться набором SQL-команд, широко используемых в языке. Здесь (в команде SELECT) в шаблоне используются следующие символы:

    1. "%" - аналог "звездочки" (*)
    2. "_" - аналог знака "?"

Для полноты знаний смотрите топик MSDN "SELECT - SQL" и примеры к нему.


Здравствуйте! При импорте файла dbf в Excel выгружается не более 16383 записи, а надо больше. Как быть?

Бронникова Елена

Что тут сказать, есть такое ограничение, вернее сказать было, по заявлениям Microsoft. Но на практике (VFP7.0 SP1) я вижу, что ситуация не изменилась: при экспорте (команда EXPORT) число строк в Excel действительно ограничивается 16K. Все, что я могу пока посоветовать - открыть файл .DBF в Excel с помощью COM/ActiveX, а далее - программно сохранить файл как .XLS. Я так писать - не писал, но вижу, что при открытии .DBF Excel показывает 64K записей - всё лучше.

P.S. Хотелось бы все-таки узнать, что Вы будете делать с этим числом записей в Excel ? :)))


Хотелось бы спросить об отчетах. Я делаю отчет, в базе несколько строк. Надо просуммировать их по какому-ибудь полю. Ставлю переменную, по которой суммирую, ставлю в Calculations-Sum и запускаю отчет. Сумму выдает в конце страницы, а надо, чтобы после последней строчки отчета. Можно ли получить желаемое?

vlad

Вопрос, конечно, для начинающих. Можно было бы просто ответить, а не "высвечивать" его здесь, но вдруг он возникнет у кого-нибудь еще... ;))

Если данные никак логически не подразделяются, выберите Report / Title Summary и checkbox "Summary band". В макете появится новая линейка "Summary". Перетяните и поставьте ваше вычисляемое поле над ней.

Если данные необходимо группировать и получать частные суммы, добавьте группировку (Report / Data Grouping), перетяните подсуммируемое поле над Group Footer в разметке отчета, а в окне "Calculated Field" в Combobox-е выберите появившийся новый пункт .


Как отправить приаттаченный файл по Email из VFP 6.0

Vlad

Если найти описание какого-нибудь почтового клиента, то с ним очень можно поговорить, не прислоняя его к стенке (по совету А.Райкина ;)). Вот пример с Microsoft Outlook:

* открытие экземпляра приложения oOutlook=CREATEOBJECT("Outlook.Application") * ссылка на объект "сообщение" oEMes = oOutlook.CreateItem(0) oEMes.To = "vlad@svb.mv.ru" oEMes.Subject = "Тема письма" oEMes.Body = "Тело письма" * Заветное подключение файла oEMes.Attachments.Add("c:\text.txt") oEMes.Send

Обрабатывать почтовые сообщения можно так же через классы MAPI (The messaging application program interface) прямо в форме. В настройке VFP на вкладке Controls установите селектор на ActiveX controls, в списке Selected отметьте классы на "Microsoft MAPI ..." ; в форме в панели Controls нажмите на кнопку ViewClasses, выберите ActiveX Controls; выберите нужные элементы управления и настройте их для работы.

См. Using the MAPI Controls в MSDN.


Имеется база (сетевая) на фокспро, написана 10 лет назад для работы под ДОС. Если установить её на win2000prof (и клиентская часть и серверная) то запросы, обрабатывавющиеся на той же тачке, но под win98 за 2 сек, будут обрабатаваться 20-30 минут. Вопрос: как настроить win2000 , чтобы база работала нормально? (модифицировать базу нельзя) заранее благодарен за любые советы.

Павел

Наши клиенты работают под разными ОС, в том числе и в Win2000, но такого "безобразия" мы не наблюдали. Чтобы давать какие-то конкретные советы входной информации недостаточно. Поэтому пробегусь "в общем, по верхам" в направлении увеличения важности:

  • Логический раздел с данными и ОС должен быть ближе к началу физического диска.
  • Файл подкачки желательно располагать в начале диска с оптимальным размером (устанавливается опытным путем, но лучше его сделать в несколько раз больше количества ОП)
  • Включить DMA дисков;
  • В файловой системе NTFS при открытии файла система обновляет метку последнего доступа к файлу, что замедляет работу (не говоря уже о том, что NTFS - вещь хоть и хорошая, но медленная). Для снятия обновления в реестре по адресу HKEY_LOCAL_MACHINE -> SYSTEM -> CurrentControlSet -> Control -> FileSystem cоздаём ключ типа DWORD под названием NtfsDisableLastAccessUpdate, после чего ставим его в 1.;
  • Активный антивирус снижает быстродействие;
  • Если помимо FoxPro работают еще какие-нибудь резидентные программы с маленьким интервалом обновления, их "прожорливость" к процессорному времени можно поубавить с помощью утилиты , которая позволяет определять после какого по счету прерывания от клавиатуры отдать ресурс процессора системе;
  • Очень важно!!! Если ярлык создан на файл .bat, в котором есть строка с вызовом FoxPro, последняя ("лиса") будет работать в нерасширенном режиме, что крайне отрицательно скажется на производительности. Лучше создавать ярлык на .exe или отредактировать файл _default.pif (см. вопрос №7 выше);

Где можно прослушать курс лекций по Visual Foxpro и по переходу на него c Foxpro под DOS?

Калицкий Юрий

К сожалению, в Беларуси таких мест немного. Одно из них - фирма "ЛюксСофт" ;)). Ранее свою готовность выказывали наши коллеги из Гродненского университета, но как нынче обстоят у них дела - нам не известно. А вообще, мы были бы очень рады, если бы кто-то сообщил о других учебных центрах Беларуси.


Использую элемент управления ListBox для выбора значений из поля таблицы.При движении курсора с помощью стрелок клавиатуры "вверх,вниз" при выборе из списка происходит замедление движения или проскакивание на несколько позиций. Выбор при помощи мыши происходит нормально.Замечено, что такое происходит не на всех ПК и это не зависит от типа ПК. Подозреваю, что дело в Windows. Заранее благодарен.


Что-то конкретное сказать здесь затрудняюсь. Может, срабатывает психологический момент, когда мы от клавиатуры ждем более быстрой работы (все знают, что с клавиатурой в принципе работать быстрее). При этом забываем о том, что когда строка в списке выделена и мы с помощью стрелок перемещаемся, автоматически происходит выделение новой строки. При действиях мышью мы только скроллируем список. А вообще, багов в VFP предостаточно.


При создании exe-шника ошибок нет, при запуске его срабатывает ошибка "невозможно обновить курсор" на команде append blank.

foxer

Причина видится в тривиальном - снимите флаг Read Only с обрабатываемого файла.


Как преобразовать отчет, подготовленный в VFP в формат HTML с сохранением всех прибамбасов: фонты, рамки и.т.д.

D.E.I.

Никак. После преобразования в HTML все навороты, в том числе графика, теряются. Так что пишите конвертер ручками или обратите свой взор на наш Quant for Windows. В ближайшие дни (сегодня 01.10.2002) он будет выложен на сайт фирмы "ЛюксСофт" в новом, обновленном состоянии.


Как скопировать открытый файл (.dbf и .idx)

Иванеко Алексей

Я так понял, Вы хотите решить вопрос "горячего" архивного копирования. По моему разумению, так делать нельзя, потому что, если Вы в программе не используете периодически сброс буферов на диск с помощью flush(), в памяти могут оставаться не сохраненные данные.

А в принципе, если файл открыт в режиме Shared, то вопрос можно решить с помощью:

  1. Выполнения команды DOS - Run copy <имя исходного файла dbf> <имя конечного файла или просто путь>
  2. Создать конечный файл аналогичной структуры и выполнить находясь на нем Append From <исходный файл dbf>
  3. Более изощренный способ через низкоуровневые операции: fopen(), fcreate(), fread(), fwrite().

Если файл открыт монопольно, то никак.


Как убрать Авто-подсказку в редакторе VFP7 ? расшифрую: При наборе ключевых фраз VFP дописывает оператор не дожидаясь вашего набора, при этом под руками мельтешит полная врсия всего оператора. Например вы хотите написать "sele 0" vfp вам выдаст полное описание select SQL закрыв пол экрана. Это что, шутки Гейтса?

Дмитрий Передистый

В системном меню выберите Tools/IntelliSense Manager. Все остальное - по вкусу...


Команда SET PRINT TO NAME ... не однозначно отрабатывает на машинах различных пользователей, хотя на машине где производится "сборка" проекта все нормально. Использование GETPRINTER() - нежелательно, поэтому использую APRINTERS(m), а затем SET PRINT TO NAME m(i,1). Например: ... APRINTERS(m), SET PRINT TO NAME m(1,1) REPORT FORM F1 SET PRINT TO NAME m(2,1) REPORT FORM F2 ... Программа откомпилирована с формами отчетов. Формы отчетов специально созданы при отсутствии установленных принтеров на машине "сборки" проекта. Версия VFP 5.0. Если можете, подскажите. Заранее Вам благодарен.

Евгений Дорошенко

Мне не доводилось много печатать под VFP, но когда-то я писал на Access-e и наблюдал подобные картины, когда один и тот же отчет на разных принтерах вел себя по-разному ("неправильно" ;-)). Это и естественно, т.к. контекст устройства (DC, Device Context - термин из C++ MFC) у каждого из устройств свой: будь то экран или разновидности принтера. Составленный отчет без учета этих особенностей может быть непредсказуем.

Возможно, сказывается старая (5-я) версия VFP и в последующих версиях этот "баг" исправлен.

Может, я и заблуждаюсь. В этом случае остается надеяться, что Вам напишут по указанному мною выше адресу.


Программа работает на VFP6.0 под Win98. Из-за специфики работы поставили лазерный принтер HP Laser Jet 1000. После печати 1 документа из программы на принтер комп намертво зависает , приходится перезагружать кнопкой Reset. Драйвера к принтеру стоят родные. Получается что фокс конфликтует с драйверами HP?

Veronika

Подобная проблема была у Прохоренко Светланы Семеновны, писавшей нам ранее. К сожалению, никто не ответил на ее вопрос и человек был вынужден разрешать его самостоятельно. А сделала она это заменой "родного" для принтера драйвера на более общий HP LaserJet.


Требуется создать документы в Word, в которых используются данные из таблиц Visual FoxPro. Эти документы будут использовать приложение, написанное на VFP. Конструктор отчетов (Report в VFP) для создания таких документов не подходит. Какими средствами лучше воспользоваться?

Svetlana Matuk

Вы сами почти ответили на вопрос: нужно лишь создать документ-шаблон в Word с полями, куда будут подставляться значения из VFP-программы. Примеры для Word и Excel хорошо описаны в книге "Использование VFP 6" М.Базияна (глава 21)


Меня достало досовое окно при разархивации arj-файла. Хочется встроить разархивацию (именно arj!) в свою прогу. Есть-ли какой выход. В качестве подсказки - имеется СИшный код unarj.


А меня "достало" также и архивация arj в DOS-сессии ;-)). И эту проблему решить еще труднее, потому что найти в Inet-е распаковщик гораздо проще, чем архиватор. Если вернуться к "нашим баранам", могу посоветовать в данной ситуации или программно вызывать WinArj (есть такой "зверь", но мне он не симпатичен), или, при наличии исходных текстов на СИ, скомпоновать библиотеку для Foxpro и счастливо ею пользоваться.


На предприятии существует множество отделов (заранее не известно сколько) необходимо их отображать поредством раскрывающихся вкладок (папок). Может кто уже делал, подскажите идею.

Sergik

Фирмой "ЛюксСофт", на сайте которого располагается VFP-клуб, данный вопрос уже давно решен, как в DOS, так и в Windows вариантах. Для произвольной таблицы (набора связанных таблиц) можно построить дерево по заданным выражениям (полям) группировки (классификации). Причем, подобных деревьев для набора данных можно построить множество (разные "разрезы"). Если заинтересовало, скачайте и/или .







При перепечатке любого материала с сайта, видимая ссылка на источник www.warayg.narod.ru и все имена, ссылки авторов обязательны.

© 2005
 

Hosted by uCoz