«Тайна вопросительного знака…»

«Тайна вопросительного знака…»

Заранее прошу прощения у ассов клиент-сервер. Им совсем незачем читать эти заметки и ругать меня за изложение тривиальных вещей.
Безусловно этот материал для начинающих делать клиент-сервер. Ну не сразу же в конце концов человек становиться ассом. Когда то нужно с чего то начинать.
Возможно я не совсем знаком с нашим уровнем знаний, но лично для меня тайна вопросительного знака стала своего рода откровением около двух с половиной лет назад. А когда я ее осознал, то стал ее применять и налево и направо и сэкономил кучу времени и кода.
Написание клиент -сервер из Фокса требует двух вещей — знание Фокса и знание сервера. Но наш Российский заказчик , впрочем как и зарубежный, бывает очень не стабилен. Вот говорит он тебе- я твердо решил взять сервером Интербейс. И если что имеешь против — гуляй дальше-программистов навалом.

«Босс всегда прав… или применение объекта =Таймер=»

«Босс всегда прав… или применение объекта =Таймер=»

Как-то я попробовал сосчитать значимость полученной информации по Фоксу из разных источников.

Крути не крути, а большинство рецептов я подсмотрел на интернете у других разработчиков, или они ответили на вопросы, которые я повесил или просто узнал что то от друзей которых знаю лично или которых и в глаза не видел.
Научиться радоваться чужим удачным решениям более своих собственных -дается не каждому. Каждую неделю кто то из коллег в фирме или из других мест с блеском в глазах и гордостью ( чувствуя себя как минимум Эйнштейном) приносит выстраданное.
А я ему говорю, 1995 год Fox Adviser, 1996 Pinter Letters и такие то такие то сайты, такие то места-все уже было и даже лучше.

Использование пользовательских функций в предложениях SQL

Использование пользовательских функций в предложениях SQL

Уже надоело говорить о том, что ровным счетом ничего нового в этой жизни не происходит, а большинство нового — это хорошо забытое старое. Вот еще пример. Один автор этой статьи пожилой , но относительно молодой фоксист , начавший работать только с FXP2.6 под виндами, а второй -один из старейших клиперистов. Поэтому и приемы разные. У первого в основном новые методы ФОКСА, у второго вечные истины dbase. Оказывается, что старые рецепты часто дают много лучшие решения, чем новомодные навороты, зная которые , очень трудно использовать старые приемы, хотя и читал теорию и потенциально их знаешь. Потом, черт возьми, вечно попадаешь на агрессивную рекламу Микрософт с описанием новых, все более мощных методов. И часто веришь всему, что они говорят. Но вот берем тривиальные задачи, суем их на новую кухню и ждем вкусного пирога. А вместо него иногда — одна вонь.
Речь пойдет в основном о SQL select с предложениями outer left/right join, union и использовании групповых функций.
В одной из предыдущих статей мы уже упоминали о том, что генератор запросов и представлений view дает неправильный код с этими предложениями, если имеем несколько join.

Обслуживание файла базы данных

Обслуживание файла базы данных

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

На этапе разработки для этой цели используется специальный пункт меню в режиме модификации базы данных: пункт главного меню Database->Clean Up DataBase. Фактически, этот пункт меню выполняет команду PACK для файла базы данных, поэтому требует эксклюзивного открытия базы данных (в режиме EXCLUSIVE). Если база данных открыта в режиме SHARED, то этот пункт меню будет недоступен.

Кроме собственно чистки файла базы данных от ранее удаленных записей, выполнение этой операции существенно уменьшает размер файла DCT в котором хранятся в том числе все «хранимые процедуры». Поэтому после внесения изменений в хранимые процедуры также желательно сделать чистку базы данных.

Файл конфигурации CONFIG.FPW

Файл конфигурации CONFIG.FPW

Теперь важнейший вопрос о файле конфигурации CONFIG.FPW. Это обычный текстовый файл и о нем почему-то крайне редко упоминается в книгах о FoxPro. Этот файл необходимо создать самостоятельно. Автоматически он не создается.

Как правило, используют 2 файла конфигурации — один на этапе создания и отладки проекта и другой — на этапе исполнения собственно готового EXE у клиента. Тот файл конфигурации, который поставляется клиенту можно включить внутрь EXE, но лучше этого не делать. В этом случае он позволяет производить некоторую внешнюю настройку среды FoxPro даже в готовом EXE.

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

Расположение файлов проекта

Расположение файлов проекта

Несколько слов о том, о чем собственно пойдет здесь речь и для чего это все было написано. Очень трудно сформулировать это все кратко, но тем не менее я попытаюсь.

Как правило, большинство книг по программированию являются либо пересказом статей Help к языку, либо набором комиксов по типу «нажмите эту кнопочку увидите такую картинку, теперь нажмите эту кнопочку …». Нельзя сказать, что это плохо или не нужно. Просто между двумя этими крайностями образовался провал, в котором и пропадает множество новичков. Поэтому любая книга, которая хоть как-то его закрывает обычно пользуется повышенным спросом.

О каком «провале» собственно идет речь?

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

Название ключевого поля

Название ключевого поля

Поскольку ключевое поле — это обычное поле таблицы, то на него распространяются все рекомендации приведенные в разделе «Поля таблицы». Однако поскольку это все-таки очень специфическое поле, то для него я бы добавил следующие рекомендации
Образуйте название ключевого поля таблицы добавив к имени таблицы 2 буквы «ID» (от слова identifier — идентификатор), отбросив букву «s» если имя таблицы — это слово во множественном числе — Например, если вы назвали таблицу контрагентов «Partners», то ключевое поле будет назваться «PartnerID». При таком способе наименования однозначно можно сказать к какой таблице относится ключевое. Но не стоит назвать ключевое поле также как и собственно таблицу, поскольку в некоторых случаях станет весьма проблематично сходу определить о чем идет речь — о поле или собственно о таблице

Какой тип данных использовать: Character или Integer

Какой тип данных использовать: Character или Integer

Раньше, когда для хранения числовых данных в FoxPro существовали только поля типа Numeric перевес в аргументации склонялся в пользу использования полей типа Character, но с появлением полей типа Integer все стало не так однозначно

При сравнении способа хранения ключевого поля в символьном или числовом формате выдвигаются 3 аргумента

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

Слухи и мифы о FoxPro

Слухи и мифы о FoxPro

Многим из нас приходилось слышать различные утверждения о Фоксе, мягко говоря, не соответствующие действительности. Здесь собрана коллекция наиболее часто встречающихся мифов, и приведены простые соображения по поводу каждого из них.

1. Microsoft собирается закрыть проект Visual FoxPro, т.к. он является конкурентом других продуктов компании.
Странно, но этот слух бродит с тех пор, как Microsoft купила права на FoxPro. А было это почти уже 10 лет назад. Что-то медлит Microsoft

2. Со времен FoxPro for Windows 2.5 в языке не было никаких принципиальных изменений, просто переставлялись номера версий.
Появились контейнеры баз данных, ООП, возможность создания COM и DCOM, работа с ADO, множество визуальных улучшений… Одно можно сказать определенно – поработав в любой более свежей версии, на старую возвращаться уже не хочется.

Удаление записей в таблице

Удаление записей в таблице

Таблицы FoxPro — это прямые наследники формата DBASE. В этом формате процесс удаления записей разбит на 2 этапа. Сначала записи помечаются как удаленные, но физически все еще сохраняются в таблице. А для их физического удаления необходимо дать специальную команду. Причем физическое удаление требует эксклюзивного (единоличного) доступа к таблице.

Под термином «удаление» в FoxPro понимается именно установка метки на удаление, а не физическое удаление записи в таблице. Т.е. команды DELETE, DELETE-SQL физически не удаляют записи; триггер DELETE срабатывает при установке метки на удаление; триггер INSERT срабатывает при снятии метки на удаление (ну, и при физическом создании новой записи)