Форум » GUI » Библиотека SQLRDD для Харбора » Ответить

Библиотека SQLRDD для Харбора

gfilatov2002: Всем кому это интересно Стали доступны исходники известной библиотеки SQLRDD для xXарбора, которая раньше была платной. Сейчас адаптирую для работы с Минигуи эту библиотеку, которая позволяет портировать синтаксис Харбора без всяких изменений для работы с серверами MySQL, Postgres, Firebird, Oracle, MS SQL. Подготовил для сравнения две программы - одна использует SQLRDD для доступа к таблице на сервере MySQL, а другая использует для доступа к DBF драйвер DBFCDX. Код первой программы ниже [pre] #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 [/pre] и для сравнения код второй программы: [pre]#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 [/pre] Как Вы можете увидеть, различия у этих программ минимальные: для SQLRDD нужно добавить только подключение к серверу MySQL. Ваши комментарии на тему актуальности этой библиотеки приветствуются...

Ответов - 36, стр: 1 2 All



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