Форум » Clipper » Изучаю Clipper » Ответить

Изучаю Clipper

demetrius2003: Доброго всем времени суток! Решил немного подучить 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

Dima: Держал в руках такой учебник очень давно (когда Clipper 5.01 покупали) Скана в сети не видел.........

Сыроежка: У меня из книг по Clipper имелись и имеются следующие книги: 1. "Руководство по применению Cliipper 5.0 на ПЭВМ" под общей редакцией Барранова и Воробьева. Фактически . это перевод документации. 2. "CA-Clipper 5.2 и билиотека CA-Clipper TOOLS 3.0" Канатников А.Н., Ткачев С.Б. 3. "Clipper. Руководство по программированию. 3 издание, версия 5.01" Рик Спенс. Это единственная оригинаьная книга, которая не является простой компиляцией документации. Самое смешное, что я даже по памяти уже не помню, как выглядит оператор цикла в Clipper! Так как поглащен изцчением С++.

demetrius2003: О! Спасибо за оперативность. Попробую Рика Спенса найти. Хоть фамилия с названием известны. Уже кое что.


demetrius2003: А вот и нет... Видимо не сильно популярен Клиппер в данный момент. Хотя даже по ZX спектруму инфы можно выкачать гигабайты. А по Клипперу - пустота. Хотя есть несколько документов. Что ж, будем играться!

Dima: demetrius2003 Чуть http://online.spb4plus.ru/index.html?01_info.htm

demetrius2003: Да! Спасибо за ссылку. Один из присутствующих документов я и скачал в виде архива.

demetrius2003: Продолжаю задавать глупые вопросы. 1. Клиппер изначально затачивался под применение DBF-файлов? Т. е. это его родной формат? Есть ли в нём встроенные функции для работы скажем с Paradox DB? 2. Взял data.dbf из какой-то базы. Набросал простецкую программу: ? "Start program" USE data NEW FOR i=1 TO LASTREC() GO i A = PDATE B = SUMMA C = ADDR ? A, B, C, RECNO() NEXT ? "End program, press a key" INKEY(0) CLOSE data (Кстати! Как в форум код правильно вставлять? Есть ли теги CODE /CODE или наподобие?) Вопрос по программе - USE открывает базу data. Так? А если мне надо сразу несколько баз открытыми держать, то как система узнает, к примеру, чей LASTREC() использовать? 3. Как менять значения полей в произвольной записи, выбранной скажем по номеру?

AlexMyr: Может лучше Harbour изучать? demetrius2003 пишет: Вопрос по программе - USE открывает базу data. Так? А если мне надо сразу несколько баз открытыми держать, то как система узнает, к примеру, чей LASTREC() использовать? use db1 new use db2 new ?db1->(lastrec()) ?db2->(lastrec()) demetrius2003 пишет: 3. Как менять значения полей в произвольной записи, выбранной скажем по номеру? field->name_field1 := value replace name_field2 with value

PSP: 1. Имхо, только DBF. 2. Нужно так: USE Data ALIAS Base1 NEW. Далее BASE1->( LastRec() ) [pre2] Чтобы форматировать текст, есть тег моноширинный шрифт (кнопка с цифрами 123) [/pre2] 3. [pre2]BASE1->Summa := nSumma[/pre2] записывает в поле Summa текущей записи значение переменной nSumma.

demetrius2003: Понятно. Изменил программу: [pre] ? "Start program" USE data NEW USE data2 NEW FOR i=1 TO data->(LASTREC()) GO i A = data->(PDATE) B = data->(SUMMA) C = data->(ADDR) ? A, B, C, data->(RECNO()) NEXT ? "End program, press a key" INKEY(0) CLOSE data [/pre] Теперь проблема в операторе GO. Фишка со стрелками -> уже не прокатывает. В справочнике написано, что команда перемещает указатель записи на заданную запись текущей рабочей области. Т. е. прежде чем её использовать надо сменить рабочую область? Или использовать другую команду позиционирования? А какую? Кстати, к Харбору присматриваюсь. Но пока не вижу надобности в его изучении. Клиппер прост. Похож на MSX-Basic. Если одолею его в краткий срок можно будет и в работе применить. Частенько с DBF сталкиваюсь. Но пока так, чисто академический интерес. И да! Кстати! Текущая рабочая область - это то, что открыто в последней USE?

Dima: data->(dbgoto( i )) demetrius2003 пишет: Текущая рабочая область - это то, что открыто в последней USE В данном примере да.

Dima: demetrius2003 пишет: FOR i=1 TO data->(LASTREC()) GO i A = data->(PDATE) B = data->(SUMMA) C = data->(ADDR) ? A, B, C, data->(RECNO()) NEXT Можно так [pre2] do while !data->(eof()) A = data->PDATE B = data->SUMMA C = data->ADDR ? A, B, C, data->(RECNO()) data->(dbskip()) enddo [/pre2]

demetrius2003: Ребята, спасибо, что уделяете мне время! Кажется начинаю въезжать в Клиппер. Вот, только что сам дошёл: [pre] ? "Start program" USE data NEW USE data2 NEW FOR i=1 TO data->(LASTREC()) A = data->(PDATE) B = data->(SUMMA) C = data->(ADDR) ? A, B, C, data->(RECNO()) SKIP 1 ALIAS data NEXT ? "End program, press a key" INKEY(0) CLOSE data, data2 [/pre] Хм. dbgoto(i) - нет такой функции в справочнике (и dbskip() тоже нет). Видимо секретная функция. Вобщем, плюс ко всему, одну и ту же проблему можно решить множеством способов.

Dima: demetrius2003 пишет: Хм. dbgoto(i) - нет такой функции в справочнике Смотри dbgoto а так же dbgotop() dbgobottom()

AlexMyr: demetrius2003 пишет: Кстати, к Харбору присматриваюсь. Но пока не вижу надобности в его изучении. Клиппер прост. Harbour такой же простой как и clipper

demetrius2003: Нашёл! Более подробно функции описаны в Norton guides. Там оказывается всё есть! Теперь начинаю понимать, почему в своё время Клиппер был так популярен.

AlexMyr: Dima пишет: Можно так do while !data->(eof()) A = data->PDATE B = data->SUMMA C = data->ADDR ? A, B, C, data->(RECNO()) data->(dbskip()) enddo Или так data->(dbeval({||qout( pdate,summa,addr,recno() )}))

Dima: AlexMyr пишет: Или так Опередил

demetrius2003: [pre2]data->(dbeval({||qout( pdate,summa,addr,recno() )}))[/pre2] Жесть. Как в том анекдоте. Я то думал, что Perl - единственный язык, программы на котором одинаково выглядят до и после обфускации... Утянул Harbour и xHarbour. Попробовал им обоим скормить свою прожку. Всё конвертится ОК. Только что мне делать с получившимися сишниками? Если просто перетяну в MinGW ведь не скомпилится с первого раза? И в Борланде не скомпилится просто так. Т. е. быстрого старта, как с Клиппером не будет явно. Хотя, возможно, необходимо всего лишь один раз всё настроить?

Dima: demetrius2003 пишет: Утянул Harbour и xHarbour. Создавай тему Изучаю (X)Harbour

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

AlexMyr: demetrius2003 пишет: Не, не. Мозг то не резиновый. Пока достаточно Клиппера. А чего ждать, разбираться все равно придется рано или поздно , так что будет тема - поможем

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

Сыроежка: 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 ,плюс заключительный ноль. Поэтому вам не следует глубоко на диске "закапывать" свои базы данных.

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

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

gustow: 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-школы... :)

demetrius2003: Ладно, ещё вопрос. Читаю документацию. Частенько встречаю выражение Get-области. Но объяснения, что же это такое нет. Но это так, мелочь. Главное же, что меня озадачило сегодня - реляции. Т. е. как я понял весь цимус в команде SET RELATIONS TO? Вот пример. Есть две таблички. Описание первой: [pre2] # #=============================================================================== #==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 # [/pre2] Описание второй: [pre2] # #=============================================================================== #==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 # [/pre2] Собственно первая таблица - справочник товаров. Вторая - документы типа перемещение. Но не в этом суть. Если я начну выводить строки скажем первого документа, то вместо наименований товаров и их атрибутов я увижу их ID (поле SP249). Как вместо поля SP249 выводить данные из первой таблицы. Т. е. как именно связь осуществить? И последнее. Прошу сильно не пинать, но действительно этого пока не понимаю. Зачем нужны индексные файлы? Ведь можно вполне и без них обойтись? Они ведь не несут смысловой нагрузки? В данном случае я прекрасно без них работаю с табличками.

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

demetrius2003: Вот именно, что не понимаю, зачем в библиотеке картотека? Я бы по незнанию в цикле записи перебирал. Вот такая глупость! Вот пример, реально работающий, выводящий все строчки 4 документа: [pre2] ? "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 [/pre2] Вместо товара - айдишник в виде непонятного набора символов. Доку по команде SET RELATIONS TO сижу изучаю.

AlexMyr: [pre]? "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 [/pre] Ну батенька, знаете что такое обфускация, тогда изучайте нормализацию и индексацию

demetrius2003: Вот пример, работает как надо, т. е. как я хочу. Но медленооооо... [pre2] ? "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 [/pre2] Т. е. как я понял, индекс позволит мне не искать каждый раз, где находится необходимая мне запись? Т. е. заранее будет известно где что лежит и работать соответственно будет в разы быстрее? Я так полагаю к Клипперу это не имеет прямого отношения, т. е. тут уже копать надо в дисциплину под общим названием "Базы данных". И да, ещё в догонку. Кто как борется с кодовыми страницами? Я так понимаю встроенных средств перекодировки в Клиппере нет? Т. е. если у меня таблицы в cp1251, то едиственный вариант - писать функцию перекодировки самому?

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

Dima: demetrius2003 пишет: Т. е. как я понял, индекс позволит мне не искать каждый раз, где находится необходимая мне запись? есть у тебя база и в ней мильон записей , как ты будешь искать IDDOC равное " 4" не имея индекса по этому полю ? Думаю только перебором что будет очень долго. А при наличии индекса сделать это можно просто и без затрат по времени [pre2] if dbseek(" 4" ) ? "Найдено" else ? "Не найдено" endif [/pre2] demetrius2003 пишет: LOCATE FOR ID = tovarid После Locate хорошо бы проверить результат поиска с помощью Found()

Dima: demetrius2003 пишет: Т. е. если у меня таблицы в cp1251, то едиственный вариант - писать функцию перекодировки самому? Есть уже написанная , могу дать Вот тут http://clipper.borda.ru/?1-0-0-00000128-000-0-0-1255341201

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

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

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

demetrius2003: Ребята! Чисто технический вопрос. Есть код: [pre2] ? "Start program" USE DT239 NEW ? "Start dt239" INDEX ON IDDOC TO DT239 USE SC33 NEW ? "Start sc33" INDEX ON ID TO SC33 [/pre2] Размер ДБФ-файлов: DT239 - 34574 байт SC33 - 9208530 байт Смысл в том, что построение индекса таблицы DT239 проходит моментально, а SC33 мягко говоря нет. Т. е. не понятно, идёл ли оно вообще, или всё повисло. Ждал более часа, менял виртуалку на qemu. Каким образом можно контролировать этот процесс?

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

Alw Spencer: Еще очень хорошая книга есть: Сухов Н. "Практический курс программирования на CA-Clipper"

demetrius2003: clipper.exe возвращает 5,3

Dima: demetrius2003 Тогда смотри предложение EVAL команды Index

Dima: Alw Spencer пишет: Еще очень хорошая книга есть: Сухов Н. "Практический курс программирования на CA-Clipper" В электронном виде ?

Сыроежка: demetrius2003 пишет: Смысл в том, что построение индекса таблицы DT239 проходит моментально, а SC33 мягко говоря нет. Т. е. не понятно, идёл ли оно вообще, или всё повисло. Ждал более часа, менял виртуалку на qemu. Каким образом можно контролировать этот процесс? При инлексировании вызывается функция sort, для работы которой нужно много памяти и место на диске под временный набор. Попробуйте запустить индексацию автономно в простейшей программе, которая больше ничего не содержит. Кроме того у вас индекс возможно состоит из различных выражений со строками, которые постоянно требуют выделения памяти для их копирования при вычислении выражений.

Dima: Сыроежка пишет: Кроме того у вас индекс возможно состоит из различных выражений со строками Нет там ни чего похожего. demetrius2003 пишет: INDEX ON ID TO SC33

AlexMyr: У меня база весит 23 мегабайта и количество записей 420 тис. и индексируется она приблизительно минуту, может быть проблема в железе (винчестер), нужно попробовать на другом компе. Сыроежка пишет: Кроме того у вас индекс возможно состоит из различных выражений со строками, которые постоянно требуют выделения памяти для их копирования при вычислении выражений. внимательно читаем demetrius2003 пишет: Ребята! Чисто технический вопрос. Есть код: ? "Start program" USE DT239 NEW ? "Start dt239" INDEX ON IDDOC TO DT239 USE SC33 NEW ? "Start sc33" INDEX ON ID TO SC33 какие выражения?

demetrius2003: Код предельно прост. Проблема с железом исключена - программа запускалась под DosBox, QEmu и на железном компе - результаты везде одинаковы. Жаль, что нет ошибок времени исполнения, ни чего похожего. Прога всё-ж виснет. SC33.NTX создаётся 1024 байта и всё - тишина! Кстати, файл SC33.DBF взят из 1С базы. Сама 1С при тестировании говорит, что файл нормален. Это вдвойне странно, ведь DT239.DBF оттуда же и переваривается нормально. Ладно, пока отставим это на потом. Изучу Index, Eval и т. д. Там видно будет.

Dima: demetrius2003 пишет: SC33.DBF взят из 1С базы А метни этот файлик в архиве на какой нить файлообменник , проверю у себя.

Иван: Вот еще нашел http://bazila.net/index.php/home/clipper

demetrius2003: Dima - файлы Иван - эти дистрибутивы и руководство встречаются очень часто, на каждом шагу. Я это видел множество раз. Кроме этого ничего нет.

PSP: demetrius2003, сейчас проверил индексацию SC33.DBF. Только не Клиппером, а Харбором. Индекс (NTX) создался за 0.06 сек.

Dima: demetrius2003 Clipper 5.2e use sc33 new index on id to test Dbfntx - NTX cоздан успешно Sixcdx - IDX cоздан успешно

Dima: demetrius2003 Попробуй так [pre2] ? "Start program" USE DT239 NEW ? "Start dt239" INDEX ON IDDOC TO DT239 USE SC33 NEW ? "Start sc33" INDEX ON ID TO SC33 BROWSE() [/pre2] Дойдет дело до browse или нет. Кодировка в базе Ansi поэтому в browse будут крякозяблы.

demetrius2003: Подтверждаю! Harbour-2.1. Доли секунды - и два индексных файла (SC33.NTX - 414720 байт, DT239.NTX - 7168 байт) готовы. Полагаю, что проблема скорее всего в 1С, а точнее в их понимании DBF формата. Но кто бы знал! Знать бы ещё причину такого поведения! До browse не дойдет, что-то подобное пробовал. P.S.: Всё! Разобрался! Без изменения кода скомпилировал в Clipper 5.2. Прога отработала и выдала индексы. Правда размер SC33.NTX - 419840 байт.

Pasha: Дополнительные глюки может давать dosbox

Alw Spencer: Dima пишет: Alw Spencer пишет: цитата: Еще очень хорошая книга есть: Сухов Н. "Практический курс программирования на CA-Clipper" В электронном виде ? Dima, увы, только в бажном виде, как и 2. "CA-Clipper 5.2 и билиотека CA-Clipper TOOLS 3.0" Канатников А.Н., Ткачев С.Б. 3. "Clipper. Руководство по программированию. 3 издание, версия 5.01" Рик Спенс. Это единственная оригинаьная книга, которая не является простой компиляцией документации. Много раз перечитанные.

demetrius2003: Очередной вопрос - а есть ли у Клиппера механизм подобный ссылкам или указателям? Как я, к примеру, могу организовать структуру связанного списка?

Сыроежка: demetrius2003 пишет: Очередной вопрос - а есть ли у Клиппера механизм подобный ссылкам или указателям? Как я, к примеру, могу организовать структуру связанного списка? Связный список - это, по сути, некоторый определенный интерфейс, который может быть реализован разными способами. Так как в Clipper массив обладает достаточной гибкостью, позволяя вставлять элементы в любую позицию, то вы с помощью массива можете обеспечить функциональность связного списка.

Pasha: Есть передача параметров функции по ссылке - перед переменной надо указать символ @: myfunc(@par1) Есть также тип блок кода. Это что-то вроде адреса функции, только это делается намного более гибко. Для создания списка можно использовать массивы. Массив - это собственно не массив в традиционном понимании, а именно список: элементом массива может быть значение любого типа данных, в том числе массива. Таким образом, можно создавать структуры произвольной сложности.

Seva: Посмотри на новом сайте SoftClipper

СевДон: мож кому сгодится -- сканы нескольких статей из 4х журналов Nantucket News линк: http://zalil.ru/32821893 ЗЫ журналы пробегали мимо меня году так в 92 (господя, уже 20 лет прошло) в чужой фирме и дали подержать на полчаса. посему ксерил быстро и токмо то шо интересовало на тот момент так шо за качество копий просьба не пинать да и время не пощадило бумагу

Alw Spencer: Seva пишет: Посмотри на новом сайте SoftClipper Классный сайт! Нашел одну ошибку в http://softclipper.net/index.php/clipper/download.html "Совет - лучьше используйте..." "лучше"

GeorgTor: Время разбрасывать камни... Если кому-то понадобится - выложил библиотеки(и не только) по Clipper. Лежат на http://moemesto.ru/georgtor/file/14103373/Clipp.rar

GeorgTor: Выложил еще кусочек по Clipper Лежит здесь http://moemesto.ru/georgtor/file/14110574/ClipAll1.rar

GeorgTor: Лежит здесь http://moemesto.ru/georgtor/file/14204783/ClipAll3.rar И еще http://moemesto.ru/georgtor/file/14204786/ClipAll4.rar И еще http://moemesto.ru/georgtor/file/14204791/ClipAll5.rar И еще http://moemesto.ru/georgtor/file/14204812/ClipAll6.rar И еще http://moemesto.ru/georgtor/file/14204827/ClipAll7.rar И еще http://moemesto.ru/georgtor/file/14204834/ClipAll8.rar Уфф! Кажись все, может кому и понадобится...

Andrey: GeorgTor пишет: Лежит здесь http://moemesto.ru/georgtor/file/14204783/ClipAll3.rar Посмотрел папку "Конвертирование DBF в Excell" - очень интересно, а большие файлы конвертирования потянет ?

Dima: Andrey пишет: а большие файлы конвертирования потянет ? Потянет конечно , вопрос в том скушает ли Excel такой большой файл ;)

Andrey: GeorgTor пишет: Лежат на http://moemesto.ru/georgtor/file/14103373/Clipp.rar GeorgTor пишет: Лежит здесь http://moemesto.ru/georgtor/file/14110574/ClipAll1.rar Ссылки битые. А это по Задорнову: ClipAll1.rar, , ClipAll3.rar, ClipAll4.rar и т.д.

Softlog86: Подписывайте что лежит в архивах !

GeorgTor: Последнее по Клипперу здесь http://moemesto.ru/georgtor/file/14242385/display/ClipAll2.rar

Pasha: GeorgTor пишет: Время разбрасывать камни... Спасибо ! Фундаментальная подборка

demetrius2003: Ух ты! А кто успел скачать ClipAll и ClipAll1? Я все думал завтра скачаю, завтра скачаю... Завтра наконец наступило, но файлы видимо просрочились

Dima: demetrius2003 Похоже мало кто успел...... У меня только это [pre2] ClipAll2.rar ClipAll3.rar ClipAll4.rar ClipAll5.rar ClipAll6.rar ClipAll7.rar ClipAll8.rar [/pre2]

GeorgTor: Пишите, что нужно конкретно, я сформирую архив и выложу. Я и сам не помню,что было в тех двух архивах...

demetrius2003: GeorgTor! Вы не поверите! Не знаю, как другим, а мне надо всё! Конфа эта сегодня есть, завтра нет. Инфы с каждым годом становится всё меньше и меньше. Неровен час вобще в интернете окромя сисек ничего не останется...

Andrey: demetrius2003 пишет: Неровен час вобще в интернете окромя сисек ничего не останется...

Сыроежка: Там есть дистрибутив Clipper 5.3b? А то у меня только есть, если память не изменяет, clipper.lib.

AlexMyr: Сыроежка дааааа, дистибутив cl*pper найти куда сложнее, чем стандарты по с/с++ изучать. Сыроежка пишет: А то у меня только есть, если память не изменяет, как же, изменяет.

Pasha: Нормальные герои всегда идут в обход :) Но есть же и прямой путь: http://spravki.net.ru/clipper/ca-clipper.htm



полная версия страницы