On-line: PSP, tnsr2, гостей 1. Всего: 3 [подробнее..]
АвторСообщение
moderator




Пост N: 2201
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 13.10.23 16:46. Заголовок: Библиотека SQLRDD для Харбора


Всем кому это интересно
Стали доступны исходники известной библиотеки SQLRDD для xXарбора, которая раньше была платной.
Сейчас адаптирую для работы с Минигуи эту библиотеку, которая позволяет портировать синтаксис Харбора без всяких изменений для работы с серверами MySQL, Postgres, Firebird, Oracle, MS SQL.

Подготовил для сравнения две программы - одна использует SQLRDD для доступа к таблице на сервере MySQL, а другая использует для доступа к DBF драйвер DBFCDX.

Код первой программы ниже
 
#include "minigui.ch"
#include "sqlrdd.ch"

REQUEST SQLRDD
REQUEST SR_MYSQL


// NOTE: the database must exist before runnning the test.
#define SERVER "localhost"
#define UID "root"
#define PWD "mypass"
#define DTB "test"

*--------------------------------------------------------*
FUNCTION Main()
*--------------------------------------------------------*

LOCAL nConnection

rddSetDefault( "SQLRDD" )

nConnection := sr_AddConnection( CONNECT_MYSQL, "MySQL=" + SERVER + ";UID=" + UID + ";PWD=" + PWD + ";DTB=" + DTB )

IF nConnection < 0
Alert( "Connection error. See sqlerror.log for details." )
RETURN NIL
ELSE
//Alert( "Connected to : " + SR_GetConnectionInfo(, SQL_DBMS_NAME ) + " " + SR_GetConnectionInfo(, SQL_DBMS_VER ) )
ENDIF

DEFINE WINDOW Form_1 ;
WIDTH 640 HEIGHT 480 ;
TITLE 'SQLRDD Demo' ;
MAIN NOMAXIMIZE ;
ON INIT OpenTable() ;
ON RELEASE CloseTable()

DEFINE MAIN MENU

DEFINE POPUP 'Test'
MENUITEM 'Add record' ACTION AddRecord( 'ARG', 'Argentina', 38740000 )
SEPARATOR
ITEM "Exit" ACTION ThisWindow.Release()
END POPUP

END MENU

@ 10, 10 BROWSE Browse_1 ;
WIDTH 610 ;
HEIGHT 390 ;
HEADERS { 'Code', 'Name', 'Residents' } ;
WIDTHS { 50, 160, 100 } ;
WORKAREA country ;
FIELDS { 'Code', 'Name', 'Residents' } ;
JUSTIFY { BROWSE_JTFY_LEFT, BROWSE_JTFY_LEFT, BROWSE_JTFY_RIGHT } ;
EDIT ;
INPLACE ;
READONLY { .T., .F., .F. }

END WINDOW

CENTER WINDOW Form_1

ACTIVATE WINDOW Form_1

RETURN NIL

*--------------------------------------------------------*
PROCEDURE OpenTable
*--------------------------------------------------------*

Form_1.Browse_1.VISIBLE := .F.

CreateTable()

INDEX ON FIELD->RESIDENTS TAG residents TO country

GO TOP

Form_1.Browse_1.VISIBLE := .T.

RETURN

*--------------------------------------------------------*
PROCEDURE CloseTable
*--------------------------------------------------------*

dbCloseArea( "country" )

RETURN

*--------------------------------------------------------*
FUNCTION CreateTable
*--------------------------------------------------------*

LOCAL aStruct := { ;
{ "CODE", "C", 3, 0 }, ;
{ "NAME", "C", 50, 0 }, ;
{ "RESIDENTS", "N", 11, 0 } ;
}

IF sr_file( "country" )
sr_DropTable( "country" )
sr_DropIndex( "country" )
ENDIF

dbCreate( "country", aStruct, "SQLRDD" )

USE country /*EXCLUSIVE*/ VIA "SQLRDD"

dbAppend()
REPLACE CODE WITH 'LTU', NAME WITH 'Lithuania', RESIDENTS WITH 3369600
dbAppend()
REPLACE CODE WITH 'USA', NAME WITH 'United States of America', RESIDENTS WITH 305397000
dbAppend()
REPLACE CODE WITH 'POR', NAME WITH 'Portugal', RESIDENTS WITH 10617600
dbAppend()
REPLACE CODE WITH 'POL', NAME WITH 'Poland', RESIDENTS WITH 38115967
dbAppend()
REPLACE CODE WITH 'AUS', NAME WITH 'Australia', RESIDENTS WITH 21446187
dbAppend()
REPLACE CODE WITH 'FRA', NAME WITH 'France', RESIDENTS WITH 64473140
dbAppend()
REPLACE CODE WITH 'RUS', NAME WITH 'Russia', RESIDENTS WITH 141900000

RETURN NIL

*--------------------------------------------------------*
PROCEDURE AddRecord( cCode, cName, nResidents )
*--------------------------------------------------------*

APPEND BLANK

REPLACE CODE WITH cCode, ;
NAME WITH cName, ;
RESIDENTS WITH nResidents

dbUnlock() // Recno() is valid only after UNLOCK or COMMIT

Form_1.Browse_1.VALUE := country->( RecNo() )
Form_1.Browse_1.Refresh

RETURN

и для сравнения код второй программы:
#include "minigui.ch" 

REQUEST DBFCDX

*--------------------------------------------------------*
FUNCTION Main()
*--------------------------------------------------------*

rddSetDefault( "DBFCDX" )

DEFINE WINDOW Form_1 ;
WIDTH 640 HEIGHT 480 ;
TITLE 'DBFCDX Demo' ;
MAIN NOMAXIMIZE ;
ON INIT OpenTable() ;
ON RELEASE CloseTable()

DEFINE MAIN MENU

DEFINE POPUP 'Test'
MENUITEM 'Add record' ACTION AddRecord( 'ARG', 'Argentina', 38740000 )
SEPARATOR
ITEM "Exit" ACTION ThisWindow.Release()
END POPUP

END MENU

@ 10, 10 BROWSE Browse_1 ;
WIDTH 610 ;
HEIGHT 390 ;
HEADERS { 'Code', 'Name', 'Residents' } ;
WIDTHS { 50, 160, 100 } ;
WORKAREA country ;
FIELDS { 'Code', 'Name', 'Residents' } ;
JUSTIFY { BROWSE_JTFY_LEFT, BROWSE_JTFY_LEFT, BROWSE_JTFY_RIGHT } ;
EDIT ;
INPLACE ;
READONLY { .T., .F., .F. }

END WINDOW

CENTER WINDOW Form_1

ACTIVATE WINDOW Form_1

RETURN NIL

*--------------------------------------------------------*
PROCEDURE OpenTable
*--------------------------------------------------------*

Form_1.Browse_1.VISIBLE := .F.

CreateTable()

INDEX ON FIELD->RESIDENTS TAG residents TO country

GO TOP

Form_1.Browse_1.VISIBLE := .T.

RETURN

*--------------------------------------------------------*
PROCEDURE CloseTable
*--------------------------------------------------------*

dbCloseArea( "country" )

RETURN

*--------------------------------------------------------*
FUNCTION CreateTable
*--------------------------------------------------------*

LOCAL aStruct := { ;
{ "CODE", "C", 3, 0 }, ;
{ "NAME", "C", 50, 0 }, ;
{ "RESIDENTS", "N", 11, 0 } ;
}

IF File( "country.dbf" )
FErase( "country.dbf" )
FErase( "country.cdx" )
ENDIF

dbCreate( "country", aStruct, "DBFCDX" )

USE country /*EXCLUSIVE*/ VIA "DBFCDX"

dbAppend()
REPLACE CODE WITH 'LTU', NAME WITH 'Lithuania', RESIDENTS WITH 3369600
dbAppend()
REPLACE CODE WITH 'USA', NAME WITH 'United States of America', RESIDENTS WITH 305397000
dbAppend()
REPLACE CODE WITH 'POR', NAME WITH 'Portugal', RESIDENTS WITH 10617600
dbAppend()
REPLACE CODE WITH 'POL', NAME WITH 'Poland', RESIDENTS WITH 38115967
dbAppend()
REPLACE CODE WITH 'AUS', NAME WITH 'Australia', RESIDENTS WITH 21446187
dbAppend()
REPLACE CODE WITH 'FRA', NAME WITH 'France', RESIDENTS WITH 64473140
dbAppend()
REPLACE CODE WITH 'RUS', NAME WITH 'Russia', RESIDENTS WITH 141900000

RETURN NIL

*--------------------------------------------------------*
PROCEDURE AddRecord( cCode, cName, nResidents )
*--------------------------------------------------------*

APPEND BLANK

REPLACE CODE WITH cCode, ;
NAME WITH cName, ;
RESIDENTS WITH nResidents

Form_1.Browse_1.VALUE := country->( RecNo() )
Form_1.Browse_1.Refresh

RETURN

Как Вы можете увидеть, различия у этих программ минимальные:
для SQLRDD нужно добавить только подключение к серверу MySQL.

Ваши комментарии на тему актуальности этой библиотеки приветствуются...

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


администратор




Пост N: 7836
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 13.10.23 18:50. Заголовок: Интересно а где исхо..


Интересно а где исходники лежат ?

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




Пост N: 2202
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 13.10.23 19:05. Заголовок: Dima пишет: Ориги..


Dima пишет:

 цитата:
а где исходники лежат ?


Оригинальные исходники для хХарбора лежат здесь.
Но без некоторой трансформации они не будут работать под Харбором, хотя гуру [х]Харбора Пржемек Черпак и внес изменения в код для совместимости.

P.S. Дима, как всегда, среагировал первым.

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




Пост N: 7594
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.10.23 21:42. Заголовок: На Postgres у меня е..


На Postgres у меня есть работающая прога, сделал ещё в 2015 году, до сих пор работает.
Переделать может и буду, но после того как заставлю версию 23.09.2 собирать правильно мою большую прогу (352 файла, 13Мб кода).
Вместе с Сергеем сделал тестовый вариант-заготовку программы, как у меня в большой системе, этот вариант собирается нормально.
В 23.09 опять полезла проблема по вызову STANDARD + 3 MODAL окна, после которого на 2 MODAL окне кнопки блокируются и не работают.
Помогает выход по ESC. А вот со второго входа в эти окна подвисание окна пропадает.
Если вышел из окна STANDARD, то после входа опять в этот режим - начинается повтор этого глюка.
И как с этим бороться ?

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




Пост N: 4429
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.10.23 11:34. Заголовок: gfilatov2002 пишет К..


gfilatov2002 пишет
 цитата:
Как Вы можете увидеть, различия у этих программ минимальные:
для SQLRDD нужно добавить только подключение к серверу MySQL.


Но не видно, как все согласуется с SQL языком, база создана им, типы данных, индексы, связи таблиц ... тоже
Как будет доступ к данным с 10 000 000 записей в таблице (с SQL это надо исп. LIKE ...), выборки по select ... с вложенными select понятны, как тут. Сделали USE на таблицу, описания, триггера подключились ?

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




Пост N: 7839
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.10.23 16:52. Заголовок: SergKis Вот дока ес..


SergKis
Вот дока если что click here

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




Пост N: 4431
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.10.23 18:31. Заголовок: Dima Спасибо :sm36:..


Dima
Спасибо
Но что то он у меня на 8.1 acrobat убивает, валит
попробовал другие, оказалось тоже валится, как говорится "будем искать"

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




Пост N: 7840
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.10.23 18:52. Заголовок: SergKis У меня паше..


SergKis
У меня пашет но открывал прямо в FIREFOX

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




Пост N: 7841
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.10.23 18:55. Заголовок: Пробнул тут тоже паш..


Пробнул тут тоже пашет


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




Пост N: 7842
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.10.23 19:10. Заголовок: преобразовал в WORD ..


преобразовал в WORD , скинул к тебе на FTP

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




Пост N: 4432
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.10.23 20:36. Заголовок: Dima пишет Пробнул т..


Dima пишет
 цитата:
Пробнул тут тоже пашет


Пробнул и я у себя на PC с 10 (пришла зарядка) "ФигВам называется"
Acrobat просит ключ регистрации и еще что (не так давно стал это делать) сбрасываешь, так и acrobat закрывается
На 8.1 там просто валится типа ошибка windows, думаю лезет в сист. каталоги c:\Users\... , а они зборонены
Сегодня Youtub сказал "У вас включен блокировщик рекламы, надо выключить ведь Реклама - это ... бла бла бла"
Пока еще работает

 цитата:
преобразовал в WORD , скинул к тебе на FTP


Большое спасибо Посмотрю

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


Пост N: 1681
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 14.10.23 20:39. Заголовок: Суматра открывает..


Суматра открывает

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


Пост N: 1682
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 14.10.23 20:40. Заголовок: https://i.postimg.cc..




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


Пост N: 1683
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 14.10.23 20:49. Заголовок: Что-то не впечатляет..


Что-то не впечатляет...


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




Пост N: 4132
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 14.10.23 21:44. Заголовок: так написано же: SQ..


так написано же:

SQLRDD for xHarbour 38
© 2004 - Marcelo Lombardo – marcelo@xharbour.com.br

и в сырцах копирайты 2003 и подобных нулевых годов

20 лет тому назад

Postgres 8.0 это 2005-й

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




Пост N: 4433
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.10.23 22:35. Заголовок: Смотрю для FireBird ..


Смотрю для FireBird Firebird 1.5 and 2.0 - это совсем устаревшее, делал прибамбас задаче на версию FB 2.5 от 2012 года через dll (в hmg есть рыба) получение структур и данных, для типа N получал длину данных 9 байт, а в базе реально 12 -> отказался, сделал через утилиту isql.exe + файлы после нее в память => быстрая обработка ~10 000 000 записей в одной таблице. Поля memo были 10К, autoincrement ... Не знаю подошел бы вариант SQLRDD for xHarbour 38 для этого (взят за основу RDDNTX) ?

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


Пост N: 1684
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 15.10.23 09:33. Заголовок: Pasha пишет: так на..


Pasha пишет:

 цитата:
так написано же:


Вот я ж и говорю, что не впечатляет)

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




Пост N: 2203
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.10.23 14:08. Заголовок: Pasha пишет: 20 лет..


Pasha пишет:

 цитата:
20 лет тому назад


Так и есть. Поэтому я и спрашивал, насколько актуально использование этой библиотеки.

SergKis пишет:

 цитата:
Смотрю для FireBird Firebird 1.5 and 2.0 - это совсем устаревшее


Спешу обрадовать, что я не использую оригинальные исходники для хХарбора.
Я нашел форк этой библиотеки, адаптированный для Харбора, с поддержкой новых версий FireBird:
- добавлены новые фукции SR_FIREBIRD3, SR_FIREBIRD4, SR_FIREBIRD5.


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




Пост N: 4434
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.10.23 14:29. Заголовок: gfilatov2002 пишет Я..


gfilatov2002 пишет
 цитата:
Я нашел форк этой библиотеки, адаптированный для Харбора, с поддержкой новых версий FireBird:


Если есть и для свежих MySql, то однозначно, библиотека интересна

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




Пост N: 2204
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.10.23 15:12. Заголовок: SergKis пишет: есть..


SergKis пишет:

 цитата:
есть и для свежих MySql


Я собирал все примеры для MySQL версии 8.0.30. Они все работают после моих корректировок.
Эта версия достаточно свежая

Кстати, библиотека имеет встроенный парсер для SQL запросов и свой генератор SQL на его основе.
Пример использования см. ниже
 
*--------------------------------------------------------*
Procedure OpenTable
*--------------------------------------------------------*
LOCAL cComm
LOCAL apCode
LOCAL nErr
LOCAL nPos

RDDSETDEFAULT( "SQLRDD" )

cComm := [SELECT Country.Name AS Country, City.Name AS Capital_City ] + ;
[FROM Country, City ] + ;
[WHERE Country.Capital = City.ID ] + ;
[ORDER BY Country, Capital_City]

apCode := SR_SQLParse( cComm, @nErr, @nPos )
cComm := SR_SQLCodeGen( apCode )

dbUseArea( .T.,, cComm, "Country" )

Return


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




Пост N: 4435
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.10.23 15:38. Заголовок: gfilatov2002 Тогда ..


gfilatov2002
Тогда все хорошо, просто SUPER

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

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