Насколько легко преобразовать приложение из Visual Foxpro 6 в Visual Foxpro 9?

StackOverflow https://stackoverflow.com/questions/2417817

  •  19-09-2019
  •  | 
  •  

Вопрос

Есть ли проблемы с преобразованием приложения Visual Foxpro 6 в Visual Foxpro 9;или это прямолинейно?

Есть ли какие-нибудь ошибки, на которые мне следует обратить внимание во время процесса?

Это было полезно?

Решение

да...в зависимости от различных элементов вашего проекта.В настоящее время у меня есть приложения как в VFP9 SP1, так и в VFP9 SP2 (с HotFix3 для создания отчетов).

Некоторые проблемы с HELP, выполняемыми под VFP9 с SQL-запросами старого формата.

Установите поведение двигателя 70 Вы, вероятно, хотите остаться с 70.некоторые улучшения в 8 и 9 приводят к появлению замечательного трюка, который использовался при ранних запросах в предложениях ленивой группы...группируйте только по тем немногим столбцам, которые вас интересуют, особенно при присоединении к справочной таблице, которая, как вы знали, в любом случае всегда будет иметь одно и то же значение.В 8 и 9 вам необходимо уточнить группу по всем неагрегированным функциям...В таком случае вам, возможно, придется просто изменить эти «постоянные» столбцы на MAX (SomeField) как SomeField.Максимум никогда бы не изменился, если бы ваша группа в любом случае основывалась на идентификационном ключе.

Другие проблемы, известные из запроса, связаны с SELECT SUM().Если вы выполнили запрос и не было записей, соответствующих запросу, столбец SUM() вернется как NULL, и вы получите неожиданный тип данных, хотя надеялись получить число.Одна из быстрых уловок заключалась в том, чтобы всегда добавлять COUNT(*) в качестве ActualRecords, который ВСЕГДА возвращал бы число.Затем вы можете проверить, делает ли «Result.ActualRecords = 0» что-то для уведомления пользователя, прерывания отчета и т. д., в противном случае продолжайте.

Отчетность, очевидно, улучшена по сравнению с версией 6 и имеет несколько действительно хороших функций, особенно несколько связанных областей отчетов в таблицах, без необходимости выполнять «Печатать, когда» и перекрывать элементы управления при определенных условиях.Это отлично подходит для много связанных таблиц, которые вы хотите включить в итоговый отчет.

ОДНО ОБНОВЛЕНИЕ в группе SQL SUM() по проблеме.Я обнаружил, что если вы сделаете

ВЫБЕРИТЕ NVL( SUM(whatever), 0) в качестве FinalColumn, если вы ДЕЙСТВИТЕЛЬНО столкнетесь с суммой без каких-либо подходящих записей, NVL() примет это нулевое значение и обнулит его и, таким образом, предотвратит последующие проблемы с NULL...Аналогично применимы к таким вещам, как MIN(), MAX(), AVG() и т. д.

Это лишь некоторые из тех, кто пристально смотрит на меня...

Другие советы

Я бы сказал, что в целом это довольно безболезненно.Как упоминалось DRapp, вам нужно будет просмотреть все операторы SQL-SELECT, чтобы взвесить плюсы и минусы изменения предложений GROUP BY, или будет ли проще использовать SET ENGINEBEHAVIOUR.Отчеты можно заставить работать как VFP6, используя SET REPORTBEHAVIOUR.

Кроме того, VFP9 выполняет некоторую проверку структуры таблицы, когда вы открываете DBF, чего не делает VFP6.В результате вы можете обнаружить, что при открытии файлов DBF в VFP9 выдается ошибка 2065, поскольку количество записей заголовка не соответствует фактическому количеству записей, тогда как в более ранней версии они работали нормально.Этим поведением можно управлять с помощью команды SET TABLEVALIDATE.

На этой неделе я столкнулся с парой проблем с приложениями VFP 6, и они меня чертовски разочаровали, потому что эти проблемы можно легко решить с помощью VFP 9 SP2.

Еще одна вещь, на которую следует обратить внимание, — это доступ к вашим данным через драйвер ODBC VFP 6.Если вы используете какие-либо новые функции базы данных, реализованные в версиях VFP 7–VFP 9, например события базы данных, или новые типы данных, такие как varchar, ваши данные будут преобразованы в формат, который драйвер ODBC не может обработать.Вместо этого используется новый драйвер OLE DB VFP, и некоторые инструменты не могут поддерживать функциональность OLE DB.

Вы найдете новый дизайнер отчетов более мощным, но GDI+, используемый для рендеринга, потребует некоторой настройки размера полей в отчетах, чтобы избавиться от звездочек переполнения.Как отмечает Алан, этого можно избежать, используя SET REPORTBEHAVIOR, но вам действительно захочется воспользоваться возможностью предварительного просмотра отчета.

Еще одна вещь, на которой вы можете обжечься, — это то, что команда AFIELDS() создает больше элементов в массиве.Поэтому вам, возможно, придется изменить код для обработки дополнительных строк в созданном массиве.

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

Рик Шуммер

Здесь уже много хороших ответов.Недавно конвертировав приложение vfp6, я бы сказал, что этот процесс был относительно безболезненным, особенно с учетом преимуществ, которые дает использование редактора vfp9 и т. д.

Один пункт не указан...Проверьте все свои отчеты и убедитесь, что опция отчета «Сохранить среду принтера» отключена, если только указанный там принтер не является тем, который вы хотите жестко запрограммировать в файлах отчетов.

Я столкнулся с несколькими проблемами при обновлении нашего источника до VFP9.Хотя большинство из них довольно незначительны.

Первое, что вам нужно сделать, это просмотреть документацию «Что нового» для VFP7, VFP8 и VFP9.Я знаю, что это кажется неприятностью, но это должно быть вашей первой остановкой при обновлении проекта.Документацию для VFP6 и выше можно найти на сайте MSDN.

В классы добавлено множество новых свойств и методов.Если один из этих конфликтует с пользовательскими свойствами/методами, вы столкнетесь с ошибками.

Также вам необходимо будет осознать Требования Vista UAC и как с ними бороться.Программы, скомпилированные с помощью VFP8 или ниже, выполняются в режиме «совместимости».Программы VFP9 компилируются с манифестом приложения Vista, что означает, что для требуемого уровня ExecutionLevel в манифесте приложения установлено значение asInvoker.VFP8 и ниже не включают это в манифест (или вообще не включают манифест), отсюда и режим совместимости.

Это означает, что при запуске программы в Vista некоторые вещи будут работать со сбоями или вызывать ошибки.

  1. Попытка записи в HKEY_LOCAL_MACHINE в реестре завершится неудачей.
  2. Попытка записать файл в %programfiles% или любую защищенную папку приведет к ошибке.Программы должны писать только в общие папки.

У вас есть возможность обновление манифеста приложения, но я бы не рекомендовал это делать, если только ваша программа не требует административных привилегий.

Наконец, существует ряд несовместимостей с Vista: некоторые имеют дело конкретно с Aero - это было исправлено в VFP9 SP2.Итак, если вы собираетесь использовать VFP9, обязательно используйте Service Pack 2.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top