On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение



Пост N: 1
Зарегистрирован: 07.02.12
ссылка на сообщение  Отправлено: 07.02.12 11:34. Заголовок: Изучаю Clipper


Доброго всем времени суток!
Решил немного подучить Clipper. Это не для учёбы, не для работы. Так для себя. С удивлением обнаружил, что в сети нет нормальных учебников по Clipper. Есть Norton guides с описанием функций, но мне необходим имеено учебник с примерами и описанием происходящего. Для чайников. Что именно интересует:
1. Структура программы (если он есть, как в Паскале?)
2. Типы данных
3. Ввод-вывод
4. Операторы цикла, ветвления и т. д.
5. Желательны примеры работы с dbf-файлами. Открытие, выборка записей, изменение их, удаление, и т. д.
Что сделал самостоятельно:
Скачал Clipper 5.3. Установил его в DosBox. Создал программу hello.prg с содержимым:
? "Hello world"
Скомпилировал его и слинковал blinker'ом. В результате всё работает. Мне бы двинуться дальше, но не могу - инфы для изучения нет!

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 80 , стр: 1 2 3 4 All [только новые]





Пост N: 10
Зарегистрирован: 07.02.12
ссылка на сообщение  Отправлено: 08.02.12 18:38. Заголовок: Не, не. Мозг то не р..


Не, не. Мозг то не резиновый. Пока достаточно Клиппера.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 402
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 08.02.12 18:46. Заголовок: demetrius2003 пишет:..


demetrius2003 пишет:

 цитата:
Не, не. Мозг то не резиновый. Пока достаточно Клиппера.


А чего ждать, разбираться все равно придется рано или поздно , так что будет тема - поможем

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 722
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 08.02.12 19:20. Заголовок: demetrius2003, для H..


demetrius2003, для Harbour: hbmk2 <имя prg> - получаешь .exe


Спасибо: 1 
ПрофильЦитата Ответить



Пост N: 139
Зарегистрирован: 11.10.11
ссылка на сообщение  Отправлено: 08.02.12 19:31. Заголовок: demetrius2003 пишет:..


demetrius2003 пишет:

 цитата:
(Кстати! Как в форум код правильно вставлять? Есть ли теги CODE /CODE или наподобие?)



Для кода я выбираю моноширинный шрифт. Но у него есть недостаток, что он некоторые символы кода рассматривает, как символы форматирования текста. Например, индекс элемента массива я указываю обрамленным в пробелы, то есть следующим образом: a[ i ]. Если этого не делать, то индекс не выводится, а получается только a, как будто бы допущена ошибка в коде.


 цитата:
(Вопрос по программе - USE открывает базу data. Так? А если мне надо сразу несколько баз открытыми держать, то как система узнает, к примеру, чей LASTREC() использовать?
3. Как менять значения полей в произвольной записи, выбранной скажем по номеру?



У Clipper имеется 256 рабочих областей для баз данных. Что это означает? Что имеется таблица из 255 записей, в которой он строит структуры, связанные с базой дданных. То есть одноврменно вы можете максимально теоретически открыть 255 баз данных. Рабочая область с номером 0 используется для текущей базы данных.
У Clipper имеется система драйверов для работы с базами данных. Поэтому вы можете работать с любыми типами баз данных, лишь бы был соответсвующий драйвер, который удовлетворяет требованиям Clipper к драйверам баз данных. Вы также можете открывать базу данных и в команде открытия указывать, какой драйвер будет задействован для этой базы данных. В Clipper 5.01 вы можете одновременно использовать лишь 4 драйвера баз данных. В более сттарших версиях таких ограничений нет.
С каждой базой данной при открытии вы можете связывать алиас и обращаться к базе данных по имени алиаса. Я не помню, но, кажется, если вы не указываете сами алиас, то имя базы данных становится алиасом.
так как Clipper писался еще для старых операционных систем DOS, то максимальный путь, включая имя самого файла, не должен превышать 64 знака. На самом деле в DOS, насколько я помню, задание полной спецификации файла может составлять 81 байт, то есть 64 байта - это вложенные директории, 12 - байтов - имя файла, 2 байта - имя диска с двоеточием, обозначение корневого директория и слеш для разделения вложенных директориев от имени файла. То есть всего получается 80 байтов плюс заключительный нулевой байт. Но Clipper для этого отводит лишь 64 ,плюс заключительный ноль. Поэтому вам не следует глубоко на диске "закапывать" свои базы данных.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 11
Зарегистрирован: 07.02.12
ссылка на сообщение  Отправлено: 08.02.12 19:38. Заголовок: Хм. Работает в Харбо..


Хм. Работает в Харборе мой примерчик! Токма размер exe у него...
Сыроежка, спасибо за наводку про драйверы. Надо будет копнуть в этом напрвлении.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 403
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 08.02.12 21:22. Заголовок: demetrius2003 пишет:..


demetrius2003 пишет:

 цитата:
Хм. Работает в Харборе мой примерчик!


Работает, куда он денется.

demetrius2003 пишет:

 цитата:
Токма размер exe у него...

Как выясняется это уже не актуально сейчас, а вот скорость работы проги собранной с помощью harbour превосходит аналогичную прогу собранную clipper. Еще exe на harbour можно сжать upx-ом.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 262
Зарегистрирован: 06.02.07
ссылка на сообщение  Отправлено: 09.02.12 13:04. Заголовок: AlexMyr пишет: Как ..


AlexMyr пишет:

 цитата:
Как выясняется это уже не актуально сейчас, а вот скорость работы проги собранной с помощью harbour превосходит аналогичную прогу собранную clipper. Еще exe на harbour можно сжать upx-ом.

Ооо, там (в (x)Harbour'е) еще такооое можно делать!.. :) :) Я тут некогда начал на основе раздела "What's MiniGUI" файла помощи MiniGUI.chm (который идет с библиотекой MiniGUI Ext., которую Григорий Филатов собирает - см. тему в форуме http://clipper.borda.ru/?1-1-0-00000283-000-0-0-1328691952) делать некий "курс молодого MiniGUI-бойца" (см. http://gustow.narod.ru/harbour/MiniGUI_help/welcome.htm) (еще на примере help'а от версии 1.5.54 2008 года) - да позабросил, всё руки не доходят... Но хоть что-то для "первый раз в первый класс" Harbour-школы... :)

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 12
Зарегистрирован: 07.02.12
ссылка на сообщение  Отправлено: 09.02.12 15:54. Заголовок: Ладно, ещё вопрос. Ч..


Ладно, ещё вопрос. Читаю документацию. Частенько встречаю выражение Get-области. Но объяснения, что же это такое нет. Но это так, мелочь. Главное же, что меня озадачило сегодня - реляции. Т. е. как я понял весь цимус в команде SET RELATIONS TO?
Вот пример. Есть две таблички. Описание первой:

 
#
#===============================================================================
#==TABLE no 25 : Справочник Номенклатура
# Name |Descr |Type[A/S/U]|DBTableName|ReUsable
T=SC33 |Справочник Номенклатура |A |SC33 |1
#-----Fields-------
# Name |Descr |Type|Length|Precision
F=ID |ID object |C |9 |0
F=PARENTID |ID parent obj |C |9 |0
F=CODE |object code |C |6 |0
F=DESCR |object description |C |100 |0
F=ISFOLDER |Flag - Is Line - Fol|N |1 |0
F=ISMARK |Flag Object is Marke|C |1 |0
F=VERSTAMP |Version stamp |C |6 |0
F=SP3752 |(P)Артикул |C |25 |0
F=SP3757 |(P)БазоваяЕдиница |C |9 |0
F=SP124 |(P)ВалютаУчета |C |9 |0
F=SP3792 |(P)Вес |N |15 |3
F=SP689 |(P)ВидТовара |C |9 |0
F=SP5514 |(P)ГруппаДляДекларац|C |9 |0
F=SP4374 |(P)ГТД |C |9 |0
F=SP3753 |(P)ЕдиницаПоУмолчани|C |9 |0
F=SP5515 |(P)КодИД |C |10 |0
F=SP3755 |(P)МинимальныйОстато|N |15 |3
F=SP5516 |(P)НаимДляКассы |C |12 |0
F=SP4089 |(P)НомерГТД |C |21 |0
F=SP3756 |(P)ОКДП |C |7 |0
F=SP5517 |(P)Отходы |C |9 |0
F=SP5518 |(P)Признак |C |9 |0
F=SP5519 |(P)Размер |C |9 |0
F=SP5520 |(P)СрокГодности |D |8 |0
F=SP3304 |(P)СтатьяИздержекУсл|C |9 |0
F=SP4091 |(P)СтранаПроисхожден|C |30 |0
F=SP3563 |(P)ТипТовара |C |9 |0
F=SP5521 |(P)ТовСкид |N |11 |0
F=SP3815 |(P)ТорговаяНаценка |N |7 |2
F=SP5522 |(P)Убыль |C |9 |0
F=SP3866 |(P)УчетнаяЦена |N |16 |2
F=SP5523 |(P)ЦеноваяСхема |C |9 |0
F=SP3559 |(P)ШтрихКод |C |13 |0
#----Indexes------
# Name |Descr |Unique|Indexed fields |DBName
I=IDD |of ID |0 |ID |IDD
I=PCODE |of PARENT and |0 |PARENTID,ISFOLDER,CODE(UPPER) |PCODE
I=PDESCR |of PARENT and |0 |PARENTID,ISFOLDER,DESCR(UPPER) |PDESCR
I=CODE |of CODE |0 |CODE(UPPER) |CODE
I=DESCR |of DESCR |0 |DESCR(UPPER) |DESCR
I=VI3752 |VI3752 |0 |SP3752(UPPER=128) |VI3752
I=VIP3752 |VIP3752 |0 |PARENTID,ISFOLDER,SP3752(UPPER=128) |VIP3752
I=VI5514 |VI5514 |0 |SP5514 |VI5514
I=VIP5514 |VIP5514 |0 |PARENTID,ISFOLDER,SP5514 |VIP5514
I=VI4374 |VI4374 |0 |SP4374 |VI4374
I=VIP4374 |VIP4374 |0 |PARENTID,ISFOLDER,SP4374 |VIP4374
I=VI5515 |VI5515 |0 |SP5515(UPPER=128) |VI5515
I=VIP5515 |VIP5515 |0 |PARENTID,ISFOLDER,SP5515(UPPER=128) |VIP5515
I=VI3563 |VI3563 |0 |SP3563,DESCR(UPPER) |VI3563
I=VIP3563 |VIP3563 |0 |PARENTID,ISFOLDER,SP3563,DESCR(UPPER) |VIP3563
I=VI3559 |VI3559 |0 |SP3559(UPPER=128),DESCR(UPPER) |VI3559
I=VIP3559 |VIP3559 |0 |PARENTID,ISFOLDER,SP3559(UPPER=128),DESCR(UPPER) |VIP3559
#


Описание второй:

 
#
#===============================================================================
#==TABLE no 92 : Документ (Мн.ч.) Перемещение
# Name |Descr |Type[A/S/U]|DBTableName|ReUsable
T=DT239 |Документ (Мн.ч.) Перемещение |A |DT239 |1
#-----Fields-------
# Name |Descr |Type|Length|Precision
F=IDDOC |ID Document's |C |9 |0
F=LINENO |LineNo |N |4 |0
F=SP249 |(P)Товар |C |9 |0
F=SP250 |(P)Количество |N |15 |3
F=SP251 |(P)Единица |C |9 |0
F=SP1034 |(P)Коэффициент |N |11 |3
F=SP5880 |(P)Цена |N |16 |2
F=SP5881 |(P)Сумма |N |18 |2
F=SP5882 |(P)Проц |N |11 |1
F=SP5883 |(P)ЦенаИсх |N |11 |2
F=SP5884 |(P)СуммаИсх |N |18 |2
#----Indexes------
# Name |Descr |Unique|Indexed fields |DBName
I=IDLINE |of IDDOC+LineN|0 |IDDOC,LINENO |IDLINE
#


Собственно первая таблица - справочник товаров. Вторая - документы типа перемещение. Но не в этом суть. Если я начну выводить строки скажем первого документа, то вместо наименований товаров и их атрибутов я увижу их ID (поле SP249). Как вместо поля SP249 выводить данные из первой таблицы. Т. е. как именно связь осуществить?
И последнее. Прошу сильно не пинать, но действительно этого пока не понимаю. Зачем нужны индексные файлы? Ведь можно вполне и без них обойтись? Они ведь не несут смысловой нагрузки? В данном случае я прекрасно без них работаю с табличками.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 404
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 09.02.12 16:05. Заголовок: demetrius2003 пишет:..


demetrius2003 пишет:

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


Зачем в мне в библиотеке картотека? Я буду по одной книге перебирать и найду то, что ищу

demetrius2003 пишет:

 цитата:
Т. е. как именно связь осуществить?


Так demetrius2003 пишет:

 цитата:
SET RELATIONS TO?

доку смотрели по этой команде?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 13
Зарегистрирован: 07.02.12
ссылка на сообщение  Отправлено: 09.02.12 16:13. Заголовок: Вот именно, что не п..


Вот именно, что не понимаю, зачем в библиотеке картотека? Я бы по незнанию в цикле записи перебирал. Вот такая глупость!
Вот пример, реально работающий, выводящий все строчки 4 документа:

 
? "Start program"
USE SC33 NEW
USE DT239 NEW
SELECT DT239
FOR i=1 TO LASTREC()
lineno = LINENO
tovar = SP249
kolvo = SP250
cena = SP5880
summa = SP5881
IF IDDOC = " 4"
? lineno, tovar, kolvo, cena, summa
ENDIF
SKIP 1
NEXT
? "End program, press a key"
INKEY(0)
CLOSE data


Вместо товара - айдишник в виде непонятного набора символов. Доку по команде SET RELATIONS TO сижу изучаю.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 405
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 09.02.12 16:20. Заголовок: ? "Start program..


? "Start program"  
USE SC33 NEW
USE DT239 NEW
index on iddoc to dt239
SELECT DT239
ordscope(0," 4")
ordscope(1," 4")
dbgotop()
dbeval({||qout(lineno, tovar, kolvo, cena, summa)})
? "End program, press a key"
INKEY(0)
CLOSE data


Ну батенька, знаете что такое обфускация, тогда изучайте нормализацию и индексацию

Спасибо: 1 
ПрофильЦитата Ответить



Пост N: 14
Зарегистрирован: 07.02.12
ссылка на сообщение  Отправлено: 09.02.12 16:54. Заголовок: Вот пример, работает..


Вот пример, работает как надо, т. е. как я хочу. Но медленооооо...

 
? "Start program"
USE SC33 NEW
USE DT239 NEW
SELECT DT239
FOR i=1 TO LASTREC()
lineno = LINENO
tovarid = SP249
SELECT SC33
LOCATE FOR ID = tovarid
tovar = DESCR
SELECT DT239
kolvo = SP250
cena = SP5880
summa = SP5881
IF IDDOC = " 4"
? lineno, tovar, kolvo, cena, summa
ENDIF
SKIP 1
NEXT
? "End program, press a key"
INKEY(0)
CLOSE data


Т. е. как я понял, индекс позволит мне не искать каждый раз, где находится необходимая мне запись? Т. е. заранее будет известно где что лежит и работать соответственно будет в разы быстрее? Я так полагаю к Клипперу это не имеет прямого отношения, т. е. тут уже копать надо в дисциплину под общим названием "Базы данных".

И да, ещё в догонку. Кто как борется с кодовыми страницами? Я так понимаю встроенных средств перекодировки в Клиппере нет? Т. е. если у меня таблицы в cp1251, то едиственный вариант - писать функцию перекодировки самому?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 406
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 09.02.12 17:01. Заголовок: Снова, смотрим в сто..


Снова, смотрим в сторону Harbour

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2282
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.02.12 17:03. Заголовок: demetrius2003 пишет:..


demetrius2003 пишет:

 цитата:
Т. е. как я понял, индекс позволит мне не искать каждый раз, где находится необходимая мне запись?


есть у тебя база и в ней мильон записей , как ты будешь искать IDDOC равное " 4" не имея
индекса по этому полю ? Думаю только перебором что будет очень долго.
А при наличии индекса сделать это можно просто и без затрат по времени
 
if dbseek(" 4" )
? "Найдено"
else
? "Не найдено"
endif



demetrius2003 пишет:

 цитата:
LOCATE FOR ID = tovarid


После Locate хорошо бы проверить результат поиска с помощью Found()

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2283
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.02.12 17:05. Заголовок: demetrius2003 пишет:..


demetrius2003 пишет:

 цитата:
Т. е. если у меня таблицы в cp1251, то едиственный вариант - писать функцию перекодировки самому?


Есть уже написанная , могу дать

Вот тут
http://clipper.borda.ru/?1-0-0-00000128-000-0-0-1255341201

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 263
Зарегистрирован: 06.02.07
ссылка на сообщение  Отправлено: 10.02.12 07:59. Заголовок: demetrius2003 , тут ..


demetrius2003 , тут (http://online.spb4plus.ru/index.html?01_info.htm) доку по Клипперу (онлайновую, правда) смотрели? Это оцифровка (не совсем полностью) книжки года 1990го, кажется, по Клиппер 5.01 - который лично я пользую до сих пор. Для понимания базовых идей типа "реляционности" (и, соответственно, назначения команд типа SET RELATION TO ... INTO ...) почитайте что угодно про тот же Фокспро (про "реляционные базы данных"); а учиться с самого начала на форуме, задавая вопросы по всем мелочам, о которых можно прочитать где-то - только свое и чужое время тратить, думаю.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 15
Зарегистрирован: 07.02.12
ссылка на сообщение  Отправлено: 10.02.12 09:55. Заголовок: gustow, я Вам мешаю?..


gustow, я Вам мешаю? Или может отнял у Вас слишком много Вашего времени? Извиняюсь. Учится с самого начала на форуме есть смысл. Особенно если этот форум почти единственный источник информации по заданной теме. Онлайн-оцифровки не в счёт (их уже есть у меня) - они никогда не заменят живое общение. Про реляции - я понял, что напал на неизвестный мне пласт информации. И я изучу его без помощи форумчан, потому как этой инфы в сети с избытком. Но более-менее въехать в Клиппер без помощи всё тех же форумчан у меня (да и у других начинающих с нуля я думаю тоже) не получится. А так посудить, так мы все приходя на различные форумы тратим своё время и время чужое - админов, модераторов и пользователей форума. Так и получается, начинающие приходят, задают глупые вопросы, получают пинки в нужном направлении, и более менее разобравшись двигаются дальше самостоятельно.

Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник




Пост N: 265
Зарегистрирован: 06.02.07
ссылка на сообщение  Отправлено: 13.02.12 06:47. Заголовок: Прошу прощения, что ..


Прошу прощения, что потратил Ваше время на чтение моего ответа (да еще впридачу - на написание ответа на мой глупый ответ).

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 16
Зарегистрирован: 07.02.12
ссылка на сообщение  Отправлено: 16.02.12 12:18. Заголовок: Ребята! Чисто технич..


Ребята! Чисто технический вопрос. Есть код:
 
? "Start program"
USE DT239 NEW
? "Start dt239"
INDEX ON IDDOC TO DT239
USE SC33 NEW
? "Start sc33"
INDEX ON ID TO SC33

Размер ДБФ-файлов:
DT239 - 34574 байт
SC33 - 9208530 байт
Смысл в том, что построение индекса таблицы DT239 проходит моментально, а SC33 мягко говоря нет. Т. е. не понятно, идёл ли оно вообще, или всё повисло. Ждал более часа, менял виртуалку на qemu. Каким образом можно контролировать этот процесс?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2296
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.02.12 13:14. Заголовок: demetrius2003 Какая..


demetrius2003
Какая версия Clipper ?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 80 , стр: 1 2 3 4 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 6
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет