[ОТВЕТИТЬ]
Опции темы
29.07.2014 12:32  
AndreyZh
Цитата:
Сообщение от FinSoft
Развитие своих веб и мобильной подсистем имеет смысл, конечно, только в связке с основным продуктом. Конечно, нет смысла пробовать конкурировать с имеющимися универсальными решениями. А вот для пользователей конкретной учетной системы такие расширения из коробки позволяют экономить немало денег и нервов. Самое главное, один раз настроил и все довольны - пользователи спокойно работают без лишних телодвижений, разработчик контролирует систему и получает некое материальное вознаграждение. Там не критичны изменения в законодательстве, небольшие программки, которыми пользуется большое количество людей. А "смежники" не напрягают попытками перетянуть одеяло на себя. Ну я просто высказываю по своему опыту.
В принципе я периода 1990 - 2009 года с Вами полностью согласен, но сейчас объем накопленного негативного опыта не даёт соглашаться с данными идеями.

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

Как следствие Вы думаете о ПРОГРАММЕ, а я о её ПРОДВИЖЕНИИ. Занимаясь в основном мелким бизнесом, который раскусил маркетинговое враньё от ЗАО "1С" или вообще не автоматизирован пришел к выводу: или нужна модульная система, где пользователь подбирает для себя необходимый набор функциональных блоков (это годится только для платных программ), или нужна примитивная, легкая для освоения программа выполняющая минимально необходимый набор функций и расширяемая по мере необходимости.

В свете этого "понимания" и развиваю систему "УС Лэнд" (так же демонстрирую возможности доработки внешними специалистами): пытаюсь минимизировать функционал, удаляя "лишнее" и делая более дружественный интерфейс, а специализированные решения выводя за "рамки" системы, в том числе "отдавая" их разработку другим программистам.
 
29.07.2014 13:42  
FinSoft
Андрей, я в данном случае думаю о том, как усилить позиции на рынке действующих пользователей учетной системы и о том, как укрепить связи с ними. При большой конкуренции важно в первую очередь максимально защитить свою территорию. В общем, тебе виднее, как действовать в твоей ситуации. Обмен мнениями полезен в любом случае.
 
"Спасибо" FinSoft от:
29.07.2014 13:54  
AndreyZh
Цитата:
Сообщение от FinSoft
Обмен мнениями полезен в любом случае.
 
12.08.2014 14:28  
AndreyZh
К сожалению на Харборе сложно найти автора статьи и посему не могу указать его. Мне эта тема (создание приложений для мобильных устройств) пока малоинтересна, но демонстрирует гибкость и универсальность используемого инструмента разработки программ (x) Harbour...

В посте «Harbour — новое лицо xBase family» Александр Кресин рассказал, что такое Harbour.... Первое сообщение темы Проект QtContribs — это расширение Harbour для использования Qt.

Т.е. все, кто знаком с dbase-языками программирования (foxpro, clipper и др.) смогут, используя QtContribs, писать кроссплатформенные приложения с хорошим графическим интерфейсом (конечно изучив «философию» Qt), да и вообще использовать всю мощь Qt.

Учитывая изложенное в посте «Разработка Qt-приложения с доступом к MySQL под Android», возможности для разработки под Android + mySQL также существуют.

Но главный разработчик библиотеки QtContribs (Pritpal Bedi) консервативен и не развивает ту часть, которая связана с QtSql. Я посчитал это неправильным и немного поучаствовал в развитии этого направления.

(Исправлено) Сегодня(25.07.2014) главный разработчик QtContribs Pritpal Bedi, посмотрев мою работу, выложил новые биндинги для QtSql и сказал что будет развивать это направление. форум QtContribs Это здорово.

Далее покажу пример использования QSqlTableModel и QTableView. Итак, в поставке Qt есть много примеров и среди них приложение sqlbrowser. Я взял из него файл browserwidget.ui — это окошко приложения, сделанное в qt-designer, и немного его исправил.

Подготовил проект. Для связи объектов Harbour и Qt сделаны файлы с раширением qth — из них генерятся cpp-файлы (биндиги или проще связки). Два файла qth я вложил в архив проекта. Весь проект для Linux лежит здесь: форум QtContribs. Сделал основную программу на Harbour:

Код:
#include "hbqtgui.ch"
#include "hbqtsql.ch"

STATIC s_db, s_oBrowser

PROC main()
   LOCAL oMainWindow, oELoop, lExit := .F.//, oApp
   LOCAL oStrModel, oStrList//, db
   CLS
   
   hb_cdpSelect( "UTF8EX" )//Основная кодовая страница приложения

   oMainWindow := QMainWindow()
   oMainWindow:setAttribute( Qt_WA_DeleteOnClose, .F. )

   oMainWindow:setWindowTitle("Qt SQL Browser")
   s_oBrowser = hbqtui_browserwidget(oMainWindow)
   
   oMainWindow:setCentralWidget(s_oBrowser:oWidget)
   
   oMainWindow:connect( QEvent_Close   , {|| lExit := .T. } )
  
   s_db = QSqlDatabase():addDatabase("QMYSQL")
   s_db:setHostName("localhost")
   s_db:setDatabaseName("test")
   
   IF .NOT. s_db:open()
      ?"Not Connected!"
      RETURN
   ENDIF

   oStrList :=s_db:tables()
   oStrModel := QStringListModel( oStrList, s_oBrowser:listView )
   s_oBrowser:listView:setModel( oStrModel )
   s_oBrowser:listView:connect( "clicked(QModelIndex)", { |d| showTable(d) } )

   oMainWindow:show()

   oELoop := QEventLoop( oMainWindow )
   DO WHILE .t.
      oELoop:processEvents()
      IF lExit
         EXIT
      ENDIF
   ENDDO
   oELoop:exit( 0 )
   
   RETURN
   
PROCEDURE showTable(d)
   LOCAL cTName
   LOCAL model
   cTName := s_oBrowser:listView:model():data(d, 0):ToString()
   cTName := s_db:driver:escapeIdentifier(cTName, 1/*QSqlDriver():IdentifierType:TableName*/)

    model := QSqlTableModel(s_oBrowser:table, s_db)
    model:setTable(cTName)
    if (model:lastError():type() != 0)
       ?model:lastError():text()
    endif
    model:select()
    if (model:lastError():type() != 0)
       ??model:lastError():text()
    endif
    s_oBrowser:table:setModel(model)
//    s_oBrowser:table:setEditTriggers(QAbstractItemView_DoubleClicked+QAbstractItemView_EditKeyPressed)
   RETURN

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

Тем, кто заинтересовался, предлагаю посмотреть туториал разработки простых QtContribs-приложений:

Приглашаю всех обладающих свободным временем и желающих разбираться в Си, Си++ и других языках к развитию проекта. В ближайших планах сообщества интеграция отладчика в Harbour IDE (сокращенно HbIDE).
 
12.08.2014 17:38  
AndreyZh
Существенно большую популярность, чем Clipper и соответственно его "наследник" (x)Harbour на просторах России завоевал (Visual) FoxPro... замечу, что данная система полностью снимается с поддержки её владельцем Microsoft в 2015 году.

Как и все системы разработки группы xBase фокс очень сильно отличается по командам и функциям от Clipper/Harbour (знаю, т.к. программы CST/XBM входящие в УС Лэнд написаны на нем), но... и это иллюстрирует мощь заложенных в Харбор концепций стандарт языка FoxPro элементарно и "компактно" реализуется системой препроцессора языка (x)Harbour. Приведу пример реализации ВСЕХ уникальных команд FoxPro на Harbour (там же ссылка на автора библиотеки):

Код:
/*
File:		hbfoxlib.ch 
Version:	    1.1
Author:		Alex Antypenko
Description:	Foxpro command for (x)Harbour
Notes:		This is the header file for library that contains the implementation FoxPro commands and functions.
*/



#ifndef _HBFOXLIB_DEFINED
#define _HBFOXLIB_DEFINED


#xtranslate AND => .and.
#xtranslate OR  => .or.


#command DIMENSIONS <!name1!>( <dim1,...> ) [, <!nameN!>( <dimN,...> ) ] => ;
         PRIVATE <name1>\[ <dim1> \] [, <nameN>\[ <dimN> \] ]



/* commands using FIELDS clause which is not accepted by Clipper */
#command DISPLAY [FIELDS <v,...>] [<off:OFF>] ;
                 [<prn:TO PRINTER>] [TO FILE <(f)>] ;
                 [FOR <for>] [WHILE <while>] [NEXT <next>] ;
                 [RECORD <rec>] [<rest:REST>] [<all:ALL>] => ;
                 __dbList( <.off.>, { <{v}> }, <.all.>, ;
                   <{for}>, <{while}>, <next>, ;
                   <rec>, <.rest.>, <.prn.>, <(f)> )


#command SCATTER FIELDS <f1> [,<fn>]    ;
		 [<mm: MEMO>]           ;
		 [TO] MEMVAR         => ;
		 [ PRIVATE <f1>:=iif(!<.mm.> .and. fieldtype(fieldpos(<"f1">))=="M","", field-><f1>)];
		 [;PRIVATE <fn>:=iif(!<.mm.> .and. fieldtype(fieldpos(<"fn">))=="M","", field-><fn>)]


#command SCATTER FIELDS <f1> [,<fn>]    ;
		 [MEMO]                 ;
		 [TO] MEMVAR BLANK   => ;
         	 [PRIVATE <f1>:=fox_fieldBlank(fieldpos(<"f1">))];
		 [;PRIVATE <fn>:=fox_fieldBlank(fieldpos(<"fn">))]

#command SCATTER [TO] MEMVAR ;
		[<mm: MEMO>]            ;
		[<bb: BLANK>]       =>  ;
                ;PRIVATE ___i,___m  ;
		;FOR ___i:=1 to FCount() 			;
		;	 ___m:=FieldName(___i)        		;
		;        PRIVATE &___m                   	;
		;	IIF(<.bb.>,__mvPut(___m,fox_fieldBlank(___i)),IIF(!<.mm.> .and. FieldType(___i)=="M",__mvPut(___m,""),__mvPut(___m,fieldGet(___i)) ));
		;NEXT 
		    				
		

#command SCATTER TO <arr>;
		[<mm: MEMO>]            ;
		[<bb: BLANK>]       =>  ;
		<arr>:={} 		;	
                ;PRIVATE ___ch;
		;FOR ___ch:=1 TO FCount() ;
		;  IIF(<.bb.>, AAdd(<arr>,fox_fieldBlank(___ch)),IIF(!<.mm.> .and. FieldType(___ch)=="M",AAdd(<arr>,""),AADD(<arr>,FieldGet(___ch))));	
		;NEXT						


#command GATHER MEMVAR FIELDS <f1> [,<fn>]    ;
		 [MEMO]              => ;
		 [field-><f1>:=&("m->"+<"f1">)];
		 [;field-><fn>:=&("m->"+<"fn">)]


#command GATHER MEMVAR ;
		[<mm: MEMO>]        =>  ;
                ;PRIVATE ___lch,___m_f                  ;
		;FOR ___lch:=1 TO FCount() 		;
  		;  ___m_f:="m->"+FieldName(___lch)      ;
		;  IIF(Type(___m_f)!="U",IIF(<.mm.> .or. FieldType(___lch)!="M",FieldPut(___lch,&___m_f)),);
		;NEXT

#command GATHER FROM <arr> ;
		[<mm: MEMO>]        =>  ;
                ;PRIVATE ___lch1                  ;
		;FOR ___lch1:=1 TO Len(<arr>)	 ;
		; IIF(<.mm.> .or. FieldType(___lch1)!="M",FieldPut(___lch1,<arr>\[___lch1\]),);	
		;NEXT						

#command SCAN 								;
	 [FOR <for>]                                                    ;
	 [WHILE <while>]                                                ;
	 [NEXT <next>]                                                  ;
	 [RECORD <rec>]                                                 ;
	 [<rest:REST>]                                                  ;
	 [<all:ALL>]                                                    ;
	 [<nooptimize:NOOPTIMIZE>]                                      ;
	 =>								;
	 ;PRIVATE lExit:=.F.					;
	 ;fox_ScanBegin( <"for"> , <{for}>, <{while}>, 			;
	 		<next>, <rec>, <.rest.>, <.nooptimize.>)	;
	 ; WHILE !EOF().AND.!lExit 				;
	 ;  IIF(!fox_ScanNext(),lExit:=.T.,)		

#command ENDSCAN => ;
	 ; END ;
	 ;fox_ScanEnd()


#command _USE <(db)>                                                     ;
	     [VIA <rdd>]                                                ;
	     [IN  <in>]                                                 ;
	     [ALIAS <alias>]                                                ;
	     [<new: NEW>]                                               ;
	     [<ex: EXCLUSIVE>]                                          ;
	     [<sh: SHARED>]                                             ;
	     [<ro: READONLY>]                                           ;
	     [ASCENDING]                                                ;
	     [<desc: DESCENDING>]                                       ;
	     [<noUpdate: NOUPDATE>]                                     ;
         [CODEPAGE <codepage>]                                      ;
	     [INDEX <ilist,...>]                                        ;
	     [ORDER  <(xOrder)>]                                        ;
	     [TAG    <cTag>]                                            ;
	     [OF     <xOf>]                                             ;
	     =>;
	     fox_useArea(<(db)>,<(alias)>,<rdd>,<in>,NIL , 			;
			<.new.>,iif(<.sh.> .or. <.ex.>, !<.ex.>, NIL),	;
			<.ro.>, <.noUpdate.>, <.desc.>,  		;
			{ <(ilist)> },<(xOrder)>,<"cTag">,<"xOf">,<codepage>)

// mini SQL commands

#command CREATE TABLE <(filename)> ;
		FROM [ARRAY] <arr> ;
		[VIA <ddriver>]    ;
		=> ;
		dbcreate(<(filename)>,<arr>,<ddriver>)

#command CREATE DBF <(filename)>   ;
		FROM [ARRAY] <arr> ;
		[VIA <ddriver>]    ;
		=> ;
		dbcreate(<(filename)>,<arr>,<ddriver>)

#command CREATE TABLE <(filename)> <(fields_data)>	;
		[VIA <ddriver>]   ;
		=> ;
	      fox_CreateTable(<(filename)>,<"fields_data">,<ddriver>)

#command INSERT INTO <(filename)> <(fields_data)> ;
		VALUES <valData> ;
		[VIA <ddriver>]    ;
		=> ;
	      fox_InsertData(<(filename)> , <"fields_data">,<"valData">,<ddriver>)

#command INSERT INTO <(filename)>  ;
		VALUES <valData> ;
		[VIA <ddriver>]    ;
		=> ;
	      fox_InsertData(<(filename)> , "", <"valData">,<ddriver>)

#command INSERT INTO <(filename)> <(data)>  ;
	     FROM ARRAY <valData>  ;
		[VIA <ddriver>]    ;
		=> ;
	      fox_InsertData(<(filename)>, <(data)>,<valData>,<ddriver>)

#command INSERT INTO <(filename)> ;
	     FROM ARRAY <valData>  ;
		[VIA <ddriver>]    ;
		=> ;
	      fox_InsertData(<(filename)>, "",<valData>,<ddriver>)

#command INSERT INTO <(filename)> <(data)>  ;
	     FROM MEMVAR           ;
		[VIA <ddriver>]    ;
		=> ;
	      fox_InsertData(<(filename)>,<(data)>,,<ddriver>)


#command INSERT INTO <(filename)> ;
	     FROM MEMVAR           ;
		[VIA <ddriver>]    ;
		=> ;
	      fox_InsertData(<(filename)>,"",,<ddriver>)
   
// 15.11.2012
#command GO TOP IN <cTableAlias> => <cTableAlias>->(DbGoTop())

#command GO BOTTOM IN <cTableAlias> => <cTableAlias>->(DbGoBottom())

#command GOTO <nRecno> IN <cTableAlias> => <cTableAlias>->(DbGoTo(<nRecno>))

#xtranslate RECCOUNT(<cTableAlias>) => <cTableAlias>->( RecCount() )
#xtranslate FCOUNT(<cTableAlias>) => <cTableAlias>->( FCount() )
#xtranslate FILTER(<cTableAlias>) => <cTableAlias>->( DbFilter() )

#xtranslate USED(<cTableAlias>) => <cTableAlias>->(Used())
#xtranslate USED(<nWorkArea>) => (<nWorkArea>)->(Used())

#command SET FILTER TO <cFilter> IN <cTableAlias> =>  ;
         <cTableAlias>->(DbSetFilter( <{cFilter}>, <"cFilter"> ))

#command SEEK <eExpression> [<soft: SOFTSEEK>] [<last: LAST>] TAG <cTagName> IN <cTableAlias> => ;
            fox_Seek(<(eExpression)>,<.soft.>, <.last.>,<(cTableAlias)>, <(cTagName)>)



//

#endif
То есть вставив в код программы команду:

#include "FoxBibl.ch"

я могу писать на языке FoxPro! Скажу больше, для "извращенцев" - встречалась библиотечка реализации классов и функций интерпретатора "1С:Предприятие 7.7", т.е. на Харборе могу писать на языке "1С"
 
27.02.2015 12:12  
AndreyZh
Постепенно набирает популярность "тема" программирования на Harbour под андроид устройства, начинают популяризиваться самописные библиотеки и разного рода связки "обычных" ЯП для мобильных устройств и бизнес приложений на системах, реализованных на (x) Harbour.

Как всякий новый тренд - это пока неустоявшиеся техники и латиносы "играют" компиляторами под Android & iOS, славяне (поляки, болгары) пытаются адаптировать сам Harbour под эти операционки. Украинцы и россияне создают связки java с harbour. Приведу пример "Российской" тенденции:

Цитата:
На мой взгляд, это вполне рабочий вариант - обычно управленцу не надо с телефона или планшета вводить, условно говоря, накладную. Он хочет иметь возможность посмотреть, как идут дела - и для этого такое приложение вполне подходит. Доступ к данным через Letodb. Функции, формирующие эти мини-отчеты вы пишете на Harbour сами. Для сборки пакета нужен, естественно, Harbour, Java и Android SDK.
LetoDB- это СУБД, в которой реализуется клиент-серверная организация хранения, обработки и извлечения информации из набора таблиц и индексов обычной dBase архитектуры файлов...

"Сильно" думал о переводе на данную СУБД системы "УС Лэнд", благо объем переделок минимальный, но:

1. До 4 ПК на запись скорость работы с данными будет меньше, чем в классической файл-серверной архитектуре;
2. В основном развивается LetoDB для xNix (Linux) серверов, что для меня лишний гемор;
3. Нет реальных клиентов под данную организацию обработки данных. Украинские разработчики отмечают, что LetoDB легко "держит" до 200 рабочих станций "на запись"... нет таких пользователей УС!

На сейчас "российский" подход к "андроид" видоизменился и примерно "выглядит" - есть несколько развиваемых приложений:

Цитата:
Выложена версия 5 с сырцами:

Теперь программа нормально отрабатывает при смене ориентации устройства. Добавлено простейшее меню. Добавлена возможность вызова Harbour - кода из Javascript из окна Webview, что позволяет реализовывать интерфейс программы на базе веб-интерфейса и связки Javascript + Harbour.
Ждем`с стабилизации технологии и потом буду детальней её изучать, хотя возможны "чудачества", как и с LetoDB - начали "пилить" под macOs, "сломалась" стабильность под Win & Linux
 
27.06.2016 16:23  
AndreyZh
Пара новостей:

1. Российские разработчики на Харбор работают везде, но мало, кто в России... и как правило решая экзотичные задачи. Например свежая библиотека интеграции с нейронными сетями. Презентация автора:

Цитата:
Написал небольшую библиотеку для связи с FANN (Fast Artificial Neural Networks) - популярной библиотекой, реализующей искусственные нейронные сети


Впрочем, если понять суть [x]Harbour == компилятор преобразующий исходный xBase язык в программу на ANSI C, то ... ничего удивительного... Програмеры на [x]Harbour те же программисты C, только понимающие и прикладные области автоматизации.

2. Конечно можно писать и в "окошках". Один из примеров полезной програмки будет приведен в другой теме. Есть две ветви (семейства) развития библиотек:

а) HmGUI - базируется на метаклассах и позволяет собирать программы с графическим интерфейсом под Windows и xNix (Linux) без изменения кода и интерфейса. Следствием этого являются более убогие интерфейсные возможности.

б) MiniGUI - ветка, развивающаяся только под Windows. Впрочем эта "надстройка" включает и средства управления Internet, mail, графика, математические расчеты, SQL (все) сервера. Для Harbour (не xHarbour) доступно легкое создание многопоточных приложений.
 
15.11.2016 12:39  
AndreyZh
Случайно наткнулся на статью Александра Кресина (Российский гуру по Харбор), где описаны дополнительные расширения с почти моей системе разработки:

Благодаря наличию так называемой "Системы расширения" (Extend system) к prg-модулю, написанному на Harbour, можно подключать модули, написанные на C, что делает возможным использовать большое количество самых разных инструментов программирования через C API. Многие такие модули находятся в Harbour/contrib, многие доступны с сайтов производителей и Open source репозитариев как так называемые 3-rd party библиотеки.

Собственно, значительная часть функций, модулей самого Harbour написана на C и использует ту же "Систему расширения". Отличие дополнительных библиотек только в том, что их по тем или иным причинам не сочли возможным или нужным включить в ядро Harbour.

Ниже приведен список того, что включено в Harbour/contrib на момент написания этой статьи:

• gtalleg - основанный на Allegro экранный (GT) драйвер
• gtqtc - экранный (GT) драйвер, основанный на QT
• gtwvg - экранный (GT) драйвер для Windows, я бы сказал - продвинутый gtwvt, что-то среднее между консолью и GUI
• hbamf - привязка к библиотеке AmFast, возможно, кому-то это знакомо
• hbblat - основанная на Blat консольная утилита для отправки почты по SMTP протоколу
• hbblink - набор функций, знакомый тем, кто пользовался линковщиком Blinker
• hbbz2 - набор функций-оболочек для библиотеки BZip2
• hbbz2io - потоковый драйвер ввода/вывода для BZIP2
• hbcairo - набор функций-оболочек для Cairo. Cairo - это мультиплатформенная библиотека для создания 2D векторной графики, написанная на C. Она имеет привязки к Python, Perl, Java, C++, C#, работает на Linux, BSDs, OSX, Windows
• hbcomio - потоковый драйвер ввода/вывода для последовательного порта
• hbcomm - маленькая библиотечка для COM-портов, основана на hb_com... функциях Harbour
• hbct - реализация известной всем, кто писал на Клиппере, библиотеки Clipper Tools
• hbcups - маленький набор функций для Cups (принтер по умолчанию, список принтеров, печать файла на заданный принтер)
• hbcurl - интерфейс к библиотеке Curl
• hbexpat - интерфейс к библиотеке Expat, свободному XML-парсеру
• hbfbird - библиотека для доступа к популярной SQL СУБД Firebird
• hbfimage - набор функций-оболочек для графической библиотеки FreeImage
• hbformat - утилита для форматирования prg файлов
• hbfoxpro - маленький набор функций и заголовков для совместимости с Foxpro
• hbfship - набор функций для совместимости с Flagship
• hbgd - набор функций-оболочек для графической библиотеки GD
• hbgs - несколько функций для Ghostscript
• hbgt - набор строковых функций
• hbgzio - потоковый драйвер ввода/вывода для GZIP
• hbhpdf - интерфейс Libharu - библиотеке для создания pdf-файлов
• hbhttpd - http сервер, написанный на Harbour
• hblzf - набор функций-оболочек для библиотеки компрессии данных LZF
• hbmagic - набор функций-оболочек для библиотеки Libmagic (распознавание файлов)
• hbmemio - Драйвер для файловых операций в оперативной памяти
• hbmisc - набор разных функций
• hbmlzo - набор функций-оболочек для библиотеки компрессии данных miniLZO
• hbmxml - набор функций-оболочек для библиотеки miniXML
• hbmysql - библиотека для доступа к популярной SQL СУБД MySQL
• hbmzip - поддержка zip компрессии, основанная на использовании библиотеки Minizip
• hbnetio - альтернативная реализация ввода-ввывода RDD с поддержкой RPC, перенаправляющая выполнение операций с базами данных на сервер, включает клиентскую и серверную части
• hbnf - реализация известной всем, кто писал на Клиппере, библиотеки Nanfor
• hbodbc - библиотека для доступа к данным через ODBC
• hboslib - Маленький набор функций oslib
• hbpgsql- библиотека для доступа к популярной SQL СУБД postgreSQL
• hbpipeio - потоковый драйвер ввода/вывода для PIPE (каналов)
• hbrun - утилита hbrun, см. здесь
• hbsms - библиотека для отправки sms
• hbsqlit3 - набор функций-оболочек для библиотеки SQLite
• hbssl - интерфейс к OpenSSL API
• hbtinymt - интерфейс к tinyMT - генератору псевдослучайных чисел
• hbtip - набор классов, основанных на INET-подсистеме, реализующий ftp, http, pop3 и др. протоколы
• hbtpathy - реализация популярной библиотеки для последовательных ( COM ) портов Telepathy
• hbunix - маленький набор функций для Unix-систем
• hbwin - набор функций для связи с Windows API, в т.ч. реализация OLE
• hbxdiff - набор функций-оболочек для библиотеки libXDiff
• hbxpp - набор функция для совместимости с xBase++
• hbzebra - библиотека Зебра ( баркоды )
• hbziparc - набор функций для упаковки/распаковки файлов в zip - формате
• rddads - RDD для Advantage Database Server
• rddbm - BMDBF RDD
• rddsql - простой RDD для SQL СУБД
• sddfb - RDD для Firebird
• sddmy - RDD для MySQL
• sddoci - RDD для Oracle через OCILIB
• sddodbc - RDD для ODBC
• sddpg - RDD для postgreSQL
• sddsqlt3 - RDD для SQLite
• xhb - набор функций и классов для совместимости с xHarbour

Хочу отметить, что не все из перечисленных модулей полностью готовы к использованию, некоторые представляют собой просто пробу пера, рассчитанную на то, что общими усилиями их удастся довести до более высокой степени готовности.

Особо "умилило" наличие "hbcurl - интерфейс к библиотеке Curl", т.е. возможность использовать возможности cURL без вызова из командной строки - "моргушки" при отправке запросов в "УС Лэнд:ЕГАИС" ... только жаль, что всё это нельзя напрямую использовать мне, как использующего не совсем совместимого с Harbour "родственника" xHarbour... В принципе конечно можно, но только путём "прикрепления" и "допиливания" прилагаемых к перечисленным к библиотекам исходных модулей
 
 


Опции темы



Часовой пояс GMT +3, время: 04:52.

Все в прочитанное - Календарь - RSS - - Карта - Вверх 👫 Яндекс.Метрика
Форум сделан на основе vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.