Автор | Сообщение |
|
| |
Пост 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'ом. В результате всё работает. Мне бы двинуться дальше, но не могу - инфы для изучения нет!
|
|
|
Ответов - 80
, стр:
1
2
3
4
All
[только новые]
|
|
|
| |
Пост N: 10
Зарегистрирован: 07.02.12
|
|
Отправлено: 08.02.12 18:38. Заголовок: Не, не. Мозг то не р..
Не, не. Мозг то не резиновый. Пока достаточно Клиппера.
|
|
|
|
| |
Пост N: 402
Зарегистрирован: 11.06.10
|
|
Отправлено: 08.02.12 18:46. Заголовок: demetrius2003 пишет:..
demetrius2003 пишет: цитата: | Не, не. Мозг то не резиновый. Пока достаточно Клиппера. |
| А чего ждать, разбираться все равно придется рано или поздно , так что будет тема - поможем
|
|
|
|
| постоянный участник
|
Пост N: 722
Зарегистрирован: 27.01.07
|
|
Отправлено: 08.02.12 19:20. Заголовок: demetrius2003, для H..
demetrius2003, для Harbour: hbmk2 <имя prg> - получаешь .exe
|
|
|
|
| |
Пост 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 ,плюс заключительный ноль. Поэтому вам не следует глубоко на диске "закапывать" свои базы данных.
|
|
|
|
| |
Пост N: 11
Зарегистрирован: 07.02.12
|
|
Отправлено: 08.02.12 19:38. Заголовок: Хм. Работает в Харбо..
Хм. Работает в Харборе мой примерчик! Токма размер exe у него... Сыроежка, спасибо за наводку про драйверы. Надо будет копнуть в этом напрвлении.
|
|
|
|
| |
Пост N: 403
Зарегистрирован: 11.06.10
|
|
Отправлено: 08.02.12 21:22. Заголовок: demetrius2003 пишет:..
demetrius2003 пишет: цитата: | Хм. Работает в Харборе мой примерчик! |
| Работает, куда он денется. demetrius2003 пишет: цитата: | Токма размер exe у него... |
|
Как выясняется это уже не актуально сейчас, а вот скорость работы проги собранной с помощью harbour превосходит аналогичную прогу собранную clipper. Еще exe на harbour можно сжать upx-ом.
|
|
|
|
| постоянный участник
|
Пост 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-школы... :)
|
|
|
|
| |
Пост 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 выводить данные из первой таблицы. Т. е. как именно связь осуществить? И последнее. Прошу сильно не пинать, но действительно этого пока не понимаю. Зачем нужны индексные файлы? Ведь можно вполне и без них обойтись? Они ведь не несут смысловой нагрузки? В данном случае я прекрасно без них работаю с табличками.
|
|
|
|
| |
Пост N: 404
Зарегистрирован: 11.06.10
|
|
Отправлено: 09.02.12 16:05. Заголовок: demetrius2003 пишет:..
demetrius2003 пишет: цитата: | И последнее. Прошу сильно не пинать, но действительно этого пока не понимаю. Зачем нужны индексные файлы? Ведь можно вполне и без них обойтись? Они ведь не несут смысловой нагрузки? В данном случае я прекрасно без них работаю с табличками. |
| Зачем в мне в библиотеке картотека? Я буду по одной книге перебирать и найду то, что ищу demetrius2003 пишет: цитата: | Т. е. как именно связь осуществить? |
| Так demetrius2003 пишет: доку смотрели по этой команде?
|
|
|
|
| |
Пост 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 сижу изучаю.
|
|
|
|
| |
Пост 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 Ну батенька, знаете что такое обфускация, тогда изучайте нормализацию и индексацию
|
|
|
|
|
| |
Пост 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, то едиственный вариант - писать функцию перекодировки самому?
|
|
|
|
| |
Пост N: 406
Зарегистрирован: 11.06.10
|
|
Отправлено: 09.02.12 17:01. Заголовок: Снова, смотрим в сто..
Снова, смотрим в сторону Harbour
|
|
|
|
| |
Пост N: 2282
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.02.12 17:03. Заголовок: demetrius2003 пишет:..
demetrius2003 пишет: цитата: | Т. е. как я понял, индекс позволит мне не искать каждый раз, где находится необходимая мне запись? |
| есть у тебя база и в ней мильон записей , как ты будешь искать IDDOC равное " 4" не имея индекса по этому полю ? Думаю только перебором что будет очень долго. А при наличии индекса сделать это можно просто и без затрат по времени if dbseek(" 4" ) ? "Найдено" else ? "Не найдено" endif demetrius2003 пишет: После Locate хорошо бы проверить результат поиска с помощью Found()
|
|
|
|
| |
Пост N: 2283
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.02.12 17:05. Заголовок: demetrius2003 пишет:..
|
|
|
|
| постоянный участник
|
Пост 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 ...) почитайте что угодно про тот же Фокспро (про "реляционные базы данных"); а учиться с самого начала на форуме, задавая вопросы по всем мелочам, о которых можно прочитать где-то - только свое и чужое время тратить, думаю.
|
|
|
|
| |
Пост N: 15
Зарегистрирован: 07.02.12
|
|
Отправлено: 10.02.12 09:55. Заголовок: gustow, я Вам мешаю?..
gustow, я Вам мешаю? Или может отнял у Вас слишком много Вашего времени? Извиняюсь. Учится с самого начала на форуме есть смысл. Особенно если этот форум почти единственный источник информации по заданной теме. Онлайн-оцифровки не в счёт (их уже есть у меня) - они никогда не заменят живое общение. Про реляции - я понял, что напал на неизвестный мне пласт информации. И я изучу его без помощи форумчан, потому как этой инфы в сети с избытком. Но более-менее въехать в Клиппер без помощи всё тех же форумчан у меня (да и у других начинающих с нуля я думаю тоже) не получится. А так посудить, так мы все приходя на различные форумы тратим своё время и время чужое - админов, модераторов и пользователей форума. Так и получается, начинающие приходят, задают глупые вопросы, получают пинки в нужном направлении, и более менее разобравшись двигаются дальше самостоятельно.
|
|
|
|
| постоянный участник
|
Пост N: 265
Зарегистрирован: 06.02.07
|
|
Отправлено: 13.02.12 06:47. Заголовок: Прошу прощения, что ..
Прошу прощения, что потратил Ваше время на чтение моего ответа (да еще впридачу - на написание ответа на мой глупый ответ).
|
|
|
|
| |
Пост 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. Каким образом можно контролировать этот процесс?
|
|
|
|
| |
Пост N: 2296
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.02.12 13:14. Заголовок: demetrius2003 Какая..
demetrius2003 Какая версия Clipper ?
|
|
|
Ответов - 80
, стр:
1
2
3
4
All
[только новые]
|
|