foxpro - Mitrev Softmitrev.com/amor/foxpro.pdf · 1994г. – Това е последната...

14
Пловдивски университет „Паисий Хилендарски“ ФАКУЛТЕТ ПО МАТЕМАТИКА И ИНФОРМАТИКА FoxPro Борислав Митрев Фак. №: 0701261009 e-mail: bobimc1@gmail.com 23 Април 2009 г.

Transcript of foxpro - Mitrev Softmitrev.com/amor/foxpro.pdf · 1994г. – Това е последната...

Пловдивски университет „Паисий Хилендарски“

ФАКУЛТЕТ ПО МАТЕМАТИКА И ИНФОРМАТИКА

FoxPro

Борислав Митрев

Фак. №: 0701261009 e-mail: [email protected]

23 Април 2009 г.

1. История на езика Foxpro е разработен от компанията Fox Software в началото на 1984г. През 1992г. Microsoft закупува Fox Software и езика е получава името Visual FoxPro, както и визуалните възможности характерни за продукти на Microsoft. Макар и в къс период от време езика претърпява много промени: 1984г. – Пуснат е FoxBase. Принципа на работа при него е като този при Dbase II 1985г. – Пуснат е FoxBase Multi-User. Принципа на работа при него е като този при Dbase II, но с примитивна поддръжка на Multi-User. 1986г. – Пуснат е FoxBase+ MSDOS. Принципа на работа при него е като този при Dbase III + 1987г. – Пуснат е FoxBase+ / Mac. Това е първия продукт на компанията за операционна система на Ейпъл.Тук за пръв път се вижда каква е идеята за развитие на езика FoxPro в среда на MSDOS. 1897г. - FoxBASE+ за SCO Xenix 1988г. – 1990г. - Ashton-Tate завежда дело срещу Fox Software за неспазване на авторското право относно DBASE. 1989г. – Foxpro 1989 1.0 първата версия на езика в сегашния му вид.Стъпва и поддържа DBASE IV, но с нов интерфейс като този на FoxBase+ / Mac.Интересното в него е, че може да се работи класически текст ориентирано характерно за MSDOS и чрез форми – Windows и Machintosh. 1990г. – Работи се предимно по отстраняване на бъгове като излизат версии 1.01,1.02,1,03. 1991г.- Foxpro 2.0 Rushmore™ query technology – осигурява на езика бързо изпълнение на заявките, добавени са графичен асистент за създаване на екрани и отчети, както е и интегрирана SQL поддръжка и всичко това под MSDOS. 1992г. – Microsoft закупува Fox Software за $173 M. 1994г. – Това е последната версия на FoxPro за MSDOS – FoxPro 2.6. В нея както и в 2.5 е добавен Distribution Kit който позволява да се разпространява самостоятелен exe файл. 2. Предназначение, тип, особености FoxPro е член на езиците от класа “xBASE”, които имат синтаксиса и структурата на базата на DBASE.Той е много мощна система за управление на база данни.Благодарение на близостта си до DBASE той комбинира в себе си възможност за работа както с класически DBASE бази данни така и с SQL.Чрез Rushmore™ query technology дава възможността на много бързо изпълнение на заявките, което прави FoxPro подходяща среда за разработване на софтуер предназначен за обработване на голямо количество данни за кратък интервал от време. Най-често ползван е за разработване на програми за стокооборот,счетоводна и складова дейност, както и водене на личен състав и ТРЗ. Особеното при него е че лесно може да бъде реализиран клиент/сървър система, тъй като има поддръжка на Multi-User на базата данни.Така без явно изразен сървър може да се работи в мрежа достатъчно бързо и без загуба на информация.От казаното досега се подразбира, защо още с появата си FoxPro събужда интересна на разработчиците към себе си. 3. Типове данни

Тип Описание Размер Пример

Character Текс До 255 знака Това е FoxPro Currency Парични суми 8 bytes 624,30

Date Дата 8 bytes 29.04.1988 DateTime Дата и час 8 bytes 29.04.1988 21:00:00 Numeric Цяло число 8 bytes 3 Logical Булева

стойност 1 byte .T. or .F.

4. Структури от данни - динамични, статични Global - това са глобалните променливи, те са достъпни от всички форми,програми,подпрограми и функции, които се изпълняват по време на работа на създадено приложение. Public – променливи достъпни само за формата и конкретните функции,програми и подпрограми към нея. Local – променливи достъпни само за конкретната функция или процедура. 5. Управляващи конструкции Логически оператори IF <условие> <команда> [ELSE <команда>] ENDIF DO CASE CASE <условие1> <команда> CASE <условие2> <команда> ENDCASE

DO WHILE <условие> <команда> LOOP ENDDO

Основно оператори за работа с бази Browse for <условие> - прелистване на базата Locate for <условие> - търсене в базата Replace <поле1> WITH <поле2> WHERE <условие> - заместване на информация в базата условието не е задължително Delete for <условие> - отбелязва записите за изтриване от базата Pack <all> - изтрива записите от базата Основни функции и команди AFIELDS(<name>) Създава масив <name> съдържащ подробна

информация за полетата

ALIAS() Връща псевдонима на базата, която се използва в съответната работна област.

AUSED(<name>) Създава масив <name> от псевдонимите на базите които се използват и извежда техният брой.

CDX(1) Връща целия път и името на индексният файл коите се използва в момента

DBF() Връща целия път и името на базата която се изпозва.

FCOUNT() Броя на полетата в таблицата.

FIELD(<number>) Името на съответното поле с този <number>.

FSIZE(<name>) Дължината на полето с това име <name>.

KEY(<number>) Връща условието на индексираното поле <number>.

ORDER() Името на индекса който се използва.

RECCOUNT() Показва броя на записите в базата без значение дали за отбелязани за изтриване.

RECNO() Номера на избрания ред в базата.

TAGCOUNT() Броя на индексираните полета в базата.

TAG(<number>) Връща името на индекс от <number> в базата.

USED(<name>) Връща .T. ако <name> се използва.

CDOW(<date>) Връща името на деня от седмицата от <date>.

CMONTH(<date>) Връща името на месеца от <date>.

<>CTOD(<text>) Връща <text> като променлива от тип Date.

<>CTOT(<text>) Връща <text> като променлива от тип DateTime.

DATE() Връща текущата дата.

DATE(<yyyy>,<mm>,<dd>) Връща датата във формат dd/mm/yyyy.

DMY(<date>) Връща <date> във вида "25 December 2004".

DOW(<date>) Връща текущия ден от <date> като число, неделя е 1.

DTOC(<date>) Връща <date> като 'dd/mm/yy' или 'dd/mm/yyyy' в зависимост от състоянието на SET CENTURY и SET DATE.

DTOS(<date>) Връща <date> като 'yyyymmdd' . Броя на цифрите в годината зависи от статуса на SET CENTURY .

DTOT(<date>) Връща <date> като 12:00:00 am.

GOMONTH(<date>, <n>) Връща <n> месеца преди <date>.

MONTH(<date>) Връща месеца от <date> като число между 1 и 12.

SECONDS() Връща секундите до полунощ.

SET CENTURY ON|OFF Скрива или показва цифрите показващи века.

SET CENTURY TO <cc> ROLLOVER <yy>

Задава прозорец от 100 години. Годините след <yy> ограничението се вземат за този век указани в <cc>.

SET DATE Задава вида за показване на датата. Например SET DATE BRITISH.

SYS(2) Връща броя на секундите до полунощ като текст.

TIME() Връща във вида "hh:mm:ss".

<num1> % <num2> връща остатъка след разделяне <num1> by <num2>

<num1> ** <num2> Връща <num1> за степента <num2>

<num1> ^^ <num2> Връща <num1> за степента <num2>

ABS(<num>) връща абсолютната стойност на <num>.

ACOS(<num>) връща дъгата косинус от <num> като радиани.

CALCULATE TO (<var>) прави изчисления върху поле от таблицата и съхранява резултата в променливата (<var>).

CEILING(<num>) връща цяло число равно или по-голямо от <num>.

COS(<num>) връща косинус от <num> радиани.

COUNT TO (<var>) съхранява броят на записите в таблицата и съхранява резултата в променливата (<var>).

DTOR(<num>) връща еквивалентни на <num> радиани в градуси.

EXP(<num>) връща e number.

FLOOR(<num>) връща цялото равно или по-малко, отколкото <num>.

INT(<num>) връща цялота част от <num>.

LOG(<num>) връща логаритъм на <num> към базата е.

LOG10(<num>) връща логаритъм на <num> към базата 10.

MAX(<a>, <b>, <c>, ...) връща максималната стойност от списъка.

MIN(<a>, <b>, <c>, ...) връща минималната стойност от списъка.

MOD(<num1>, <num2>) връща остатъка след разделяне <num1> на <num2>.

RAND(<num>) Връща случайно число между 0 и 1, като използва <num> за генератор на произволни номера.

ROUND(<num2>,<num2>) връща <num1> закръгля до <num2> знак след десетичната запетая.

RTOD(<num>) връща стойността на <num> градуси в радиани.

SIGN(<num>) връща -1, 0 или 1, ако <num> е отрицателна, нулева или положителна.

SET DECIMAL TO(<num>) показване на номера с <num> десетичната запетая.

SET FIXED ON|OFF Определя се дали да се показват всички числови

резултати с фиксиран брой на знака след десетичната запетая.

STR(<num>,<m>,<n>) връща <num> като низ променлива на <m> закръглява към <n> знака след десетичната запетая.

SUM TO (<var>) Изчислява се сумата на поле от таблицата и съхранява резултата в променливата на име (<var>).

VAL(<text>) връща числената стойност на <text>.

<text1> + <text2> връща <text1text2>

<text1> - <text2> връща <text1text2> с празни пространства от <text1> отстранява и се прибавя към края на резултата.

<text1> $ <text2> връща .Т. ако <text1> съществува в <text2>

ALLTRIM(<text>) връща <text> с премахнати водещи и следващи пространства.

AT(<char>,<text>) връща позицията на символ <char> в низ <text> или 0, ако <char> не е намерен.

ATC(<char>,<text>) идентичен на АТ, но не е се влияе от регистъра на знаците.

CTOD(<text>) връща <text> като променлива от тип дата.

DTOC(<date>) връща <date> като променливи от тип низ в "дд / мм / гг" или "дд / мм / гггг" формат

DTOS(<date>) връща <date> като променлива от тип низ в "yyyymmdd" формат.

<>FILETOSTR(<filename>) връща низ съдържащ се в <filename>.

ISALPHA(<text>) връща . Т. ако първият символ на <text> е цифра.

ISLOWER(<text>) връща . Т. ако първият символ на <text> е малка буква .

ISUPPER(<text>) връща . Т. ако първият символ на <text> е голяма буква .

LEFT(<text>, <n>) връща най-левите <n> символи на <text>.

LEN(<text>) връща дължината на <text> - включително пространства.

LIKE(<text1>, <text2>) сравнява <text1> и <text2> знак по знак връща .Т. ако те съвпадат. <text1> и <text2> могат да включват и '*' и '? ".

LOWER(<text>) връща <text> като малки букви.

LTRIM(<text>) връща <text> с отстранени водещи пространства.

OCCURS(<text1>, <text2>) връща колко пъти <text1> се появява в <text2>.

PADC(<text>, <n>, <char>) допълва <text> до <n> знака чрез добавяне на <char> и в двата края.

PADL(<text>, <n>, <char>) допълва <text> до <n> знака чрез добавяне на <char> в началото.

PADR(<text>, <n>, <char>) допълва <text> до <n> знака чрез добавяне на <char> в края.

PROPER(<text>) връща <text> с малки букви първа главна.

RIGHT(<text>, <n>) връща the rightmost <n> characters of <text> including spaces.

RTRIM(<text>) връща <text> с премахнати следващи празни полета .

STR(<number>,<m>,<n>) връща като низ променлива на <m> закръглена към <n> знака след десетичната запетая.

STREXTRACT(<text>, <begin>, <end>)

Връща символите между разделителите <begin> и <end> в <text>. Допълнителните параметри позволят да се разграничат няколко случая на разделители и да изберете дали разделителите са включени в съответния текст.

STRTOFILE(<filename>) записва низ към файл и връща броя на записаните байтове. Полезно в комбинация с FILETOSTR, защото може да чете файл от диска, обработва го в паметта и го връща обратно в диска.

STRTRAN(<text>, <a>, <b>) заменя всеки намерен символ <a> в <text> и го заменя с друг символ или символи <b>.

STUFF(<text>, <m>, <n>, <a>) заменя <n> символа от позиция <m> в <text> с <a>.

TRIM(<text>) Като RTRIM.

SUBSTR(<text>,<m>,<n>) връща <n> символа от <text> започващи от <m>.

UPPER(<text>) връща <text> с главни букви. 6. Вход и изход Тъй като FoxPro e разработен за управление на работа с база данни, притежава само основните възможности за работа с файлове.

Ясно се вижда по-долу, че функциите са като тези в „С”.

Създаване на файл: FCREATE()

Отваряне на: FOPEN()

Намиране на позицията на курсора във файла: FSEEK()

Откриване на края на файла: FEOF()

Записване на информация във файла: FPUTS()

Добавяне на запис във файла: FWRITE()

Четене на информация от файла: FGETS()

Четене на запис от файла: FREAD()

Промяна на големината на файла: FCHSIZE()

Запис на съдържанието на файловия буфер в диска : FFLUSH()

Затваряне на файла: FCLOSE()

Проверка за състоянието на файла: FERROR()

FoxPro работи с файлове само на ниско ниво.Но въпреки това има доста добри възможности за експортиране на информация във файл, тъй като може да се прехвърли целия изход във файл.Това пък от своя страна дава възможност за много лесно форматиране на записите и използването на удобни за потребителя разделители.

7.Компилатори Тъй като FoxPro е система за управление на данни, цялото приложение създадено на този език работи в тази среда.За да бъде стартирано е необходимо да бъде заредена първо средата на FoxPro и тогава да се изпълни приложението.Даже и в съвременните версии на езика ( Visual FoxPro ) принципа на работа е същия с тази разлика, че се компилира ЕХЕ файл.

Примери 1. Извеждане на информация за първия работник в базата, който работи в отдел IT select 1 use worker locate for department=’IT’

if found() ? firstname,lastname endif

close databases 2. Извеждане на информация за всички работници в базата, който работят в отдел IT select 1 use worker locate for department=’IT’

do while found() ? firstname,lastname enddo

close databases 3. Заменяне на информация в първия намерен ред от базата което отговаря на зададен критерий select 1 use worker store ‘BoBo’ to toRepalce locate for firstname=’Borislav’

if found() replace firstname with toReplace ? firstname endif

close databases 4. Заменяне на информация във всички редове от базата които отговарят на зададен критерий select 1 use worker store ‘IO’ to toRepalce locate for depertament=’IT’

do while found() replace depatment with toReplace enddo

close databases

5.Изтриване на ред от базата по зададен критерий select 1 use worker locate for firstname=’BoBo’

if found() delete endif

pack close databases 6.Извеждане на екрана на цялата база select 1 use worker scan ? firstname,lastname,department endscan close databases 7.Изчисляване на средната заплата по зададен отдел select 1 use worker store 0 to tmpSalary,cnt locate for department=’IT’

do while found() cnt=cnt+1 tmpSalary= tmpSalary+salary endif

? “Average Salary is: ”,tmpSalry/cnt close databases 8.Добавяне на информация от друга база select 1 use tmpWorker append from worker for department=’IT’ close databases 9.Пренасочване на изхода към файл select 1 use worker set printer to export.txt set printer on locate for department=’IT’

do while found() ? firstname,lastname,department,salary enddo

set printer to close databases

10.Показване на диалогов прозорец select 1 use worker locate for department=’IT’

if found() wait ‘FOUND !!!’ ? firstname,lastname endif

close databases