2011-05-01 22:20 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)

* contrib/hbtip/tests/upld_ftp.prg
  * contrib/rddads/tests/datad.prg
  * contrib/rddads/tests/testmg.prg
    * function main() -> procedure main() + cleanup

  * contrib/rddads/tests/datad.prg
  * contrib/rddads/tests/testmg.prg
  * contrib/rddads/doc/en/adsfuncs.txt
  * contrib/rddads/doc/en/readme.txt
    * formatted (hbformat, manual)
    * fixes

  * src/rtl/gtxwc/gtxwc.h
  * src/rtl/gtxwc/gtxwc.c
  * src/rtl/hbmd5.c
  * contrib/gtwvg/tests/demowvg.prg
  * contrib/gtwvg/tests/wvgdyndialogs.prg
  * contrib/gtwvg/tests/wvgwvtclasses.prg
  * contrib/hbtip/thtml.prg
  * contrib/hbtip/tests/loadhtml.prg
  * tests/server.prg
  * examples/hbvpdf/hbvpdft.prg
    * Using 'harbour' name in outputs and some comments

  * src/rdd/dbcmd.c
    * typo
This commit is contained in:
Viktor Szakats
2011-05-01 20:22:54 +00:00
parent bb31c97baa
commit 0aa41ed480
17 changed files with 215 additions and 189 deletions

View File

@@ -16,6 +16,34 @@
The license applies to all entries newer than 2009-04-28.
*/
2011-05-01 22:20 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* contrib/hbtip/tests/upld_ftp.prg
* contrib/rddads/tests/datad.prg
* contrib/rddads/tests/testmg.prg
* function main() -> procedure main() + cleanup
* contrib/rddads/tests/datad.prg
* contrib/rddads/tests/testmg.prg
* contrib/rddads/doc/en/adsfuncs.txt
* contrib/rddads/doc/en/readme.txt
* formatted (hbformat, manual)
* fixes
* src/rtl/gtxwc/gtxwc.h
* src/rtl/gtxwc/gtxwc.c
* src/rtl/hbmd5.c
* contrib/gtwvg/tests/demowvg.prg
* contrib/gtwvg/tests/wvgdyndialogs.prg
* contrib/gtwvg/tests/wvgwvtclasses.prg
* contrib/hbtip/thtml.prg
* contrib/hbtip/tests/loadhtml.prg
* tests/server.prg
* examples/hbvpdf/hbvpdft.prg
* Using 'harbour' name in outputs and some comments
* src/rdd/dbcmd.c
* typo
2011-05-01 21:41 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* contrib/hbct/tests/datetime.prg
* contrib/hbcurl/tests/ftp_uldl.prg

View File

@@ -102,7 +102,7 @@ PROCEDURE Main()
LOCAL nRgt := 75
LOCAL nMaxRows := MaxRow()
LOCAL nBtnRow := nMaxRows - 1
LOCAL cLabel := "(x)Harbour simulated GUI."
LOCAL cLabel := "Harbour simulated GUI."
LOCAL aObjects := WvtSetObjects( {} )
SET DATE BRITISH
@@ -127,7 +127,7 @@ PROCEDURE Main()
pGT := SetGT( 1, hb_gtSelect() )
// Force mouse pointer right below the xHarbour label
// Force mouse pointer right below the Harbour label
//
Wvt_SetMousePos( 2,40 )
@@ -375,7 +375,7 @@ PROCEDURE WvtNextGets_X()
clr := SetColor( "N/W,N/GR*,,,N/W*" )
CLS
@ MaxRow(), 0 SAY PadC( "(x)Harbour + WVT Console GUI Screen",80 ) COLOR "R+/W"
@ MaxRow(), 0 SAY PadC( "Harbour + WVT Console GUI Screen",80 ) COLOR "R+/W"
@ 6, nColGet SAY "< Date >"
@ 9, nColGet SAY "<" + PadC( "Name", 33 ) + ">"

View File

@@ -1,8 +1,8 @@
/*
* $Id$
*/
/*
/*
* Pritpal Bedi <bedipritpal@hotmail.com>
*/
@@ -13,7 +13,7 @@
#include "wvtwin.ch"
#include "hbgtinfo.ch"
#include "hbgtwvg.ch"
#include "wvgparts.ch"
#include "wvgparts.ch"
/*----------------------------------------------------------------------*/
@@ -31,9 +31,9 @@
#define ID_STA_TEXT 71
#define ID_STA_IMAGE 72
#define ID_ICO_VOUCH 81
#define ID_GRP_COMP 113
#define ID_MNU_FILE 201
#define ID_MNU_CONTROL 202
@@ -96,7 +96,7 @@ FUNCTION DynWinDialog( nInfo )
nStyle := WS_CHILD + WS_VISIBLE + WS_TABSTOP + BS_GROUPBOX
aDlg := Wvt_AddDlgItem( aDlg, 7, 41, 4, 17, {0,0,4,0},ID_GRP_COMP, "BUTTON" , nStyle, "Compiler" )
nStyle := WS_CHILD + WS_VISIBLE + WS_TABSTOP + BS_AUTORADIOBUTTON
aDlg := Wvt_AddDlgItem( aDlg, 8, 43, 1, 14, {}, ID_RDO_XH , "BUTTON" , nStyle, "(x)Harbour" )
aDlg := Wvt_AddDlgItem( aDlg, 8, 43, 1, 14, {}, ID_RDO_XH , "BUTTON" , nStyle, "Harbour" )
aDlg := Wvt_AddDlgItem( aDlg, 9, 43, 1, 14, {}, ID_RDO_CLIP , "BUTTON" , nStyle, "Clipper" )
aDlg := Wvt_AddDlgItem( aDlg,10, 43, 1, 14, {}, ID_RDO_XBASE , "BUTTON" , nStyle, "Xbase++" )
@@ -158,7 +158,7 @@ FUNCTION DynDlgProc( hDlg, nMsg, wParam, lParam )
WVG_MessageBox( hDlg, iif( lClicked, "Satisfied", "UnSatisfied" ), "CheckBoxStatus" )
case wParam == ID_RDO_XH
WVG_MessageBox( hDlg, "(x)Harbour", "Compiler" )
WVG_MessageBox( hDlg, "Harbour", "Compiler" )
case wParam == ID_RDO_CLIP
WVG_MessageBox( hDlg, "Clipper", "Compiler" )
@@ -200,35 +200,35 @@ FUNCTION DynDlgProc( hDlg, nMsg, wParam, lParam )
WVG_SetTextColor( wParam, RGB( 255,255,255 ) )
WVG_SetBkColor( wParam, RGB( 10,200,45 ) )
Return 1
ENDIF
EXIT
ENDIF
EXIT
CASE WM_CTLCOLORSTATIC
IF ( WVG_GetDlgItem( hDlg,ID_STA_TEXT ) == lParam )
WVG_SetTextColor( wParam, RGB( 255,255,255 ) )
Return 1
ENDIF
EXIT
ENDIF
EXIT
CASE WM_INITDIALOG
WVG_SetTimer( hDlg, 5001, 1000 ) // 1 sec
IF empty( aHFonts := SetFonts() )
IF ( hFont := Wvt_CreateFont( "Times New Roman", 18 ) ) != 0
SetFonts( hFont )
ENDIF
ENDIF
ENDIF
ENDIF
IF len( aHFonts ) > 0
WVG_SendMessage( WVG_GetDlgItem( hDlg, ID_MLE ), WM_SETFONT, ahFonts[ 1 ], 0 )
ENDIF
ENDIF
IF empty( SetIcons() )
SetIcons( WVG_LoadIcon( "vr_1.ico" ) )
ENDIF
ENDIF
IF !empty( SetIcons() )
WVG_SendMessage( WVG_GetDlgItem( hDlg, ID_ICO_VOUCH ), STM_SETIMAGE, IMAGE_ICON, SetIcons()[ 1 ] )
ENDIF
ENDIF
/*
if t_hImage == nil
@@ -243,7 +243,7 @@ FUNCTION DynDlgProc( hDlg, nMsg, wParam, lParam )
WVG_CheckRadioButton( hDlg, ID_RDO_XH, ID_RDO_XBASE, ID_RDO_XH )
Wvt_LBAddString( hDlg, ID_LST_LIST, "(x)Harbour" )
Wvt_LBAddString( hDlg, ID_LST_LIST, "Harbour" )
Wvt_LBAddString( hDlg, ID_LST_LIST, "Gtwvt" )
Wvt_LBAddString( hDlg, ID_LST_LIST, "Wvtgui" )
Wvt_LBAddString( hDlg, ID_LST_LIST, "Modeless" )
@@ -262,15 +262,15 @@ FUNCTION DynDlgProc( hDlg, nMsg, wParam, lParam )
WVG_InvalidateRect( hDlg )
EXIT
EXIT
CASE WM_DESTROY
// Do whatevert you want to do with cText
// Each box will retrieve its own text.
//
/* cText := */ WVG_GetDlgItemText( hDlg, ID_MLE )
EXIT
END
EXIT
END
RETURN 0
@@ -279,13 +279,13 @@ FUNCTION DynDlgProc( hDlg, nMsg, wParam, lParam )
STATIC FUNCTION GetEditText()
LOCAL cText := ""
cText += "Welcome in the Wonderful World of (x)Harbour!"
cText += "Welcome in the Wonderful World of Harbour!"
cText += CRLF + CRLF
cText += "When Peter Rees first published GTWVT, a Windows "
cText += "Terminal Driver, on 22 Dec 2003, everybody took it "
cText += "lightly, except for me, as I was aware that what "
cText += "wonderful contribution to (x)Harbour he has made, "
cText += "what immense possibilities he has opened for (x)Harbour "
cText += "wonderful contribution to Harbour he has made, "
cText += "what immense possibilities he has opened for Harbour "
cText += "developers, what limitations he has cleared for Clipper "
cText += "savvy user base."
cText += CRLF + CRLF
@@ -334,24 +334,24 @@ FUNCTION DlgSlideShowProc( hDlg, nMsg, wParam, lParam )
CASE WM_INITDIALOG
DrawSlide( hDlg, nSlide )
EXIT
EXIT
CASE WM_PAINT
DrawSlide( hDlg, nSlide )
EXIT
EXIT
CASE WM_TIMER
nSlide++
IF nSlide > len( t_aSlides )
nSlide := 1
ENDIF
ENDIF
DrawSlide( hDlg, nSlide )
EXIT
END
EXIT
END
RETURN 0
//-------------------------------------------------------------------//
FUNCTION DrawSlide( hDlg, nSlide )
@@ -367,5 +367,5 @@ FUNCTION DrawSlide( hDlg, nSlide )
WVG_ReleaseDC( hDlg,hDC )
Return NIL
//----------------------------------------------------------------------//

View File

@@ -112,7 +112,7 @@ STATIC FUNCTION MyDialogOne( oCrt )
oDlg:AddObject( oBox )
oText := WvtLabel():New( oDlg, 101, 4, oDlg:MaxCol()-40, 7,oDlg:MaxCol()-2 )
oText:Text := "(x)Harbour"
oText:Text := "Harbour"
oText:nFontHeight := 36
oText:nAlignHorz := 2
oText:nAlignVert := 2
@@ -135,7 +135,7 @@ STATIC FUNCTION MyDialogOne( oCrt )
oTBar:lFloating := .f.
oTBar:Tooltip := "Toolbar"
oTBar:AddButton( aImg_[ 1 ], {|| oImg:SetImage( aImg_[ 1 ] ) } , "Lock" )
oTBar:AddButton( aImg_[ 2 ], {|| oImg:SetImage( aImg_[ 2 ] ), oText:SetText( "(x)Harbour" ) } , "New" )
oTBar:AddButton( aImg_[ 2 ], {|| oImg:SetImage( aImg_[ 2 ] ), oText:SetText( "Harbour" ) } , "New" )
oTBar:AddButton( aImg_[ 3 ], {|| oImg:SetImage( aImg_[ 3 ] ) } , "Calculator" )
oTBar:AddButton()
oTBar:AddButton( aImg_[ 5 ], {|| oImg:SetImage( aImg_[ 5 ] ) } , "Restore" )
@@ -263,7 +263,7 @@ STATIC FUNCTION MyDialogOne( oCrt )
aGets_:= { pad("Pritpal",20 ), pad( "Bedi",20 ), pad( "60, New Professor Colony",30 ), ;
pad( "Ludhiana, INDIA",30 ),;
"PB", pad( "141004",10 ), ctod( "22/06/04" ), .t., 48, 17000, ;
pad( "Wvtgui is a classical example of (x)Harbour capabilities...",65 ) }
pad( "Wvtgui is a classical example of Harbour capabilities...",65 ) }
oGet1 := WvtGets():New( oDlg, , 4, 2, 37, 62 )
oGet1:AddGets( nGetRow+00, nGetCol, aGets_[ 1 ], "@ " , "N/W*,N/GR*" )

View File

@@ -16,7 +16,7 @@ PROCEDURE Main
hQUery := hb_Hash()
hb_hSetCaseMatch( hQuery, .F. )
hQuery["q"] := "xHarbour"
hQuery["q"] := "Harbour"
hQuery["hl"] := "en"
hQuery["btnG"] := "Google+Search"

View File

@@ -10,19 +10,16 @@
#include "common.ch"
#include "directry.ch"
FUNCTION MAIN( cMask )
PROCEDURE MAIN( cMask )
LOCAL lRet
? TRP20FTPEnv( cMask )
lRet := TRP20FTPEnv( cMask )
? lRet
RETURN nil
RETURN
/**********************************************************************
*
*
* Static Function TRP20FTPEnv()
*
*
**********************************************************************/
STATIC FUNCTION TRP20FTPEnv( cCarpeta )
@@ -63,7 +60,7 @@ STATIC FUNCTION TRP20FTPEnv( cCarpeta )
IF oFTP:Open( cUrl )
FOR EACH cFile IN afiles
? "arquivo : " + cFile[ F_NAME ]
IF !oFtp:UploadFile( cFile[ F_NAME ] )
IF ! oFtp:UploadFile( cFile[ F_NAME ] )
lRetorno := .F.
EXIT
ELSE

View File

@@ -1600,7 +1600,7 @@ FUNCTION THtmlIsValid( cTagName, cAttrName )
RETURN lRet
/*
HTML Tag data are adopted for xHarbour from Tidy.exe (www.sourceforge.net/tidy)
HTML Tag data are adopted for Harbour from Tidy.exe (www.sourceforge.net/tidy)
*/
STATIC PROCEDURE _Init_Html_TagTypes
s_hTagTypes := { => }
@@ -1733,7 +1733,7 @@ STATIC PROCEDURE _Init_Html_TagTypes
/*
HTML Tag attribute data are adopted for xHarbour from Tidy.exe (www.sourceforge.net/tidy)
HTML Tag attribute data are adopted for Harbour from Tidy.exe (www.sourceforge.net/tidy)
*/
STATIC PROCEDURE _Init_Html_Attributes
// attribute NAME TYPE

View File

@@ -714,19 +714,19 @@
* DLLs doing all the indexing. So to do progress meters
* you need to implement this.
* $EXAMPLES$
* FUNCTION Main()
* PROCEDURE Main()
* ...
* AdsRegCallBack( {|nPercent| outputstuff(nPercent)} )
* AdsRegCallBack( {| nPercent | outputstuff( nPercent ) } )
* /* The above codeblock will be called approximately
* every 2 seconds while indexing.
* The codeblock can return .T. to abort. */
* INDEX ON First+LAST+LABEL1+LABEL2 TAG First
* AdsClrCallBack()
* RETURN nil
* RETURN
*
* FUNCTION outputstuff(nPercent) /* The "callback" function */
* FUNCTION outputstuff( nPercent ) /* The "callback" function */
* ? "output stuff", nPercent
* RETURN inkey() == 27
* RETURN Inkey() == 27
* /* If press ESC, returns .T. to abort. */
* $STATUS$
* R
@@ -1219,7 +1219,7 @@
* AdsDDAddTable() adds a new table to an ADS data dictionary.
* To add the table you must be connected as ADSSYS user using the AdsConnect60() function
* $EXAMPLES$
* IF adsConnect60("xharbour.add", 7/* All types of connection*/, "ADSSYS", "",)
* IF adsConnect60( "harbour.add", 7/* All types of connection*/, "ADSSYS", "",)
* // Add one user
* AdsDDCreateUser(,"Luiz", "papael", "This is luiz User")
* // Add the tables
@@ -1228,7 +1228,7 @@
* $STATUS$
* R
* $COMPLIANCE$
* xHarbour extension
* Harbour extension
* $PLATFORMS$
* Windows 32-bit, Linux
* $FILES$
@@ -1258,7 +1258,7 @@
* $STATUS$
* R
* $COMPLIANCE$
* xHarbour extension
* Harbour extension
* $PLATFORMS$
* Windows 32-bit, Linux
* $FILES$
@@ -1290,7 +1290,7 @@
* Adsconnect60() makes the connection to an advantage database server.
* See ace.hlp for full details about the Advantage Database Server.
* $EXAMPLES$
* IF adsConnect60("xharbour.add", 7/* All types of connection*/, "ADSSYS", "",)
* IF adsConnect60( "harbour.add", 7/* All types of connection*/, "ADSSYS", "",)
* // Add one user
* AdsDDCreateUser(, "Luiz", "papael", "This is luiz User")
* ENDIF
@@ -1485,5 +1485,3 @@ ADSIsRecordEncrypted
ADSIsTableEncrypted
*/

View File

@@ -34,7 +34,7 @@
*
* You also need to include in your PRG file following lines:
*
* REQUEST _ADS </par>
* REQUEST ADS </par>
* rddRegister( "ADS", 1 ) </par>
* rddsetdefault( "ADS" ) </par>
*
@@ -62,61 +62,61 @@
* increase the setting for the TABLES configuration value in the Advantage
* Database Server configuration registry key using the Registry Editor.
* For NetWare, edit the configuration file ads.cfg.
*
* See ace.hlp under adslocal.cfg, or the Advantage Error Guide for
* error 7005.
*
* SPEED AND PERFORMANCE ISSUES
*
* If you have sluggish browsers, one issue could be the scrollbar.
* If it's fast with the scrollbar disabled, the browse/scrolling logic
* may not be as optimized as it could be. Scrollbars should always use
* ADSGetRelKeyPos() and ADSSetRelKeyPos() instead of key counting functions.
*
* If filtered data seems slower than expected, check these things:
* First, optimization is not on by default, so at the top of the app
* call
* set(_SET_OPTIMIZE, .t.)
*
* Set( _SET_OPTIMIZE, .T. )
*
* or its command equivalent. RDDADS will use an AOF whenever
* dbSetFilter is called *if it can*.
*
* Second, make sure the filter is one ADS can understand. UDFs are out,
* as are references to public or private variables. It's also best to
* remove field aliases from the string. ADS cannot reference aliases for other
* related tables, so they're superfluous.
* You can call
*
* ? AdsIsExprValid( cFilter )
*
* to check. If this returns False, neither the Local Server nor the
* Remote Server can process it, so optimization will never occur (but
* the Harbour RDD will process the filtering locally by eval'ing the
* codeblock and testing each record). The only way to speed it up is to
* fix the filter so ADS understands it.
*
* You can also use dbOrderInfo(DBOI_OPTLEVEL) to see if the current
* filter is optimized or not. COMIX users can use:
*
* func rlOptLevel()
* return dbOrderInfo(DBOI_OPTLEVEL)
* FUNCTION rlOptLevel()
* RETURN dbOrderInfo(DBOI_OPTLEVEL)
*
* This returns the Clipper/COMIX values (not ADS-defined values) because
* this is an RDD call, not just a wrapper to the ADS call, which uses different numbers).
*
* $COMPLIANCE$
* Every attempt has been made to make the RDD compliant with the
* standard dbfcdx RDD at the .prg level.
* One important difference is the handling of structural indexes.
* ACE will <b>always</b> automatically open an index with the same
* name as the data file. There is no way to turn this feature off.
*
* You can use the Set() function call as well as the equivalent
* commands for SET DEFAULT TO, DATEFORMAT, DELETE, and EPOCH.
* Harbour automatically makes the call to ADS to change its internal
* setting to match Harbour's.
*
* INDEXING and Progress Displays:
* ace32.dll does not support the EVAL/EVERY clauses. Remember, there
* is an external process doing the indexing that knows nothing of
@@ -128,19 +128,19 @@
* codeblock by the ADS server.
*
* <table>
* FUNCTION Main()
* PROCEDURE Main()
* ...
* AdsRegCallBack( {|nPercent| outputstuff(nPercent)} )
* AdsRegCallBack( {| nPercent | outputstuff( nPercent ) } )
* /* The above codeblock will be called approximately
* every 2 seconds while indexing.
* The codeblock can return .T. to abort. */
* INDEX ON First+LAST+LABEL1+LABEL2 TAG First
* AdsClrCallBack()
* RETURN nil
* RETURN
*
* FUNCTION outputstuff(nPercent) /* The "callback" function */
* FUNCTION outputstuff( nPercent ) /* The "callback" function */
* ? "output stuff", nPercent
* RETURN inkey() == 27
* RETURN Inkey() == 27
* /* If press ESC, returns .T. to abort. */
* </table>
*
@@ -151,7 +151,7 @@
* 1) In ACE, skipping backwards to BOF goes to the phantom record and
* sets the record number to 0. In RDDADS, the record pointer stays at
* the Top record and only the BOF flag is set to True.
*
* 2) In RDDADS, a filter expression can be used that may not be
* valid on the server (because of references to public variables or
* User-Defined Functions).
@@ -159,15 +159,14 @@
* but will be filtered by the application running on the client.
* These situations lose the benefits of having a data server and should
* be avoided, but they will function as they would in a Clipper program.
*
* One problem with this scenario is that index key counting
* functions that are supposed to give an accurate count respecting
* the filter (e.g. dbOrderInfo(DBOI_KEYCOUNT) will return the values the
* Server knows about, so the counts may be inaccurate.
*
* 3) When setting a relation, the expression must be one that can be
* evaluated by the Advantage Expression Engine. UDFs will fail.
*
* $END$
*/

View File

@@ -14,14 +14,15 @@ REQUEST ADS
# include "rddads.hbx"
#endif
FUNCTION MAIN
local n
local cErr, cStr
local aStru := {{ "ID", "A", 1, 0}, {"Name", "C", 50, 0}, {"address", "C", 50, 0}, {"city", "C", 30, 0}, {"Age", "n", 3, 0}}
local hConnection1
PROCEDURE MAIN()
LOCAL n
LOCAL cErr, cStr
LOCAL aStru := { { "ID", "A", 1, 0 }, { "Name", "C", 50, 0 }, { "address", "C", 50, 0 }, { "city", "C", 30, 0 }, { "Age", "n", 3, 0 } }
LOCAL hConnection1
#if defined( __HBDYNLOAD__RDDADS__ )
local l := hb_libLoad( hb_libName( "rddads" ) )
LOCAL l := hb_libLoad( hb_libName( "rddads" ) )
hb_rddadsRegister()
@@ -30,47 +31,49 @@ FUNCTION MAIN
CLS
RddSetDefault( "ADSADT" )
AdsSetServerType ( 7 )
rddSetDefault( "ADSADT" )
AdsSetServerType( 7 )
SET FILETYPE TO ADT
? "Default connection is 0:", adsConnection()
fErase("harbour.add")
fErase("harbour.ai")
fErase("harbour.am")
fErase("Table1.adt")
fErase("Table1.adi")
fErase("Table2.adt")
fErase("Table2.adi")
FErase( "harbour.add" )
FErase( "harbour.ai" )
FErase( "harbour.am" )
FErase( "Table1.adt" )
FErase( "Table1.adi" )
FErase( "Table2.adt" )
FErase( "Table2.adi" )
// now Create a Data dictionary and the files if not exist
IF !File("harbour.add")
ADSDDCREATE("harbour.add",, "(x)Harbour ADS demo for data dictionary")
IF ! hb_FileExists( "harbour.add" )
ADSDDCREATE( "harbour.add", , "Harbour ADS demo for data dictionary" )
// This also creates an Administrative Handle that is set as the default
? "Default connection is now this admin handle:", adsConnection()
AdsDisconnect() // disconnect current default.
// if you wanted to retain this connection for later, you could use
// hAdminCon := adsConnection(0)
// This get/set call would return the current connection, then set it to 0
// if you wanted to retain this connection for later, you could use
// hAdminCon := adsConnection(0)
// This get/set call would return the current connection, then set it to 0
? "Default connection is now this handle (zero):", adsConnection()
// now create two free tables with same structure
DbCreate("Table1", aStru)
DbCreate("Table2", aStru)
dbCreate( "Table1", aStru )
dbCreate( "Table2", aStru )
//now create an index
USE table1 new
INDEX ON FIELD->id TAG codigo
USE table1 NEW
INDEX ON FIELD -> id TAG codigo
USE
USE table2 new
INDEX ON FIELD->id TAG codigo
USE table2 NEW
INDEX ON FIELD -> id TAG codigo
USE
ENDIF
// now the magic
IF adsConnect60("harbour.add", 7/* All types of connection*/, "ADSSYS", "", , @hConnection1 )
IF adsConnect60( "harbour.add", 7; /* All types of connection*/
, "ADSSYS", "", , @hConnection1 )
// The connection handle to harbour.add is now stored in hConnection1,
// and this is now the default connection
@@ -79,10 +82,10 @@ FUNCTION MAIN
? " ADS_SYS_ADMIN_CONNECTION=7):", AdsGetHandleType()
// Add one user
AdsDDCreateUser(, "Luiz", "papael", "This is user Luiz")
AdsDDCreateUser( , "Luiz", "papael", "This is user Luiz" )
IF adsddGetUserProperty("Luiz", ADS_DD_COMMENT, @cStr, hConnection1)
IF adsddGetUserProperty( "Luiz", ADS_DD_COMMENT, @cStr, hConnection1 )
? "User comment:", cStr
ELSE
? "Error retrieving User comment"
@@ -90,35 +93,35 @@ FUNCTION MAIN
? "Add the tables"
AdsDDaddTable("Table1", "table1.adt", "table1.adi")
AdsDDaddTable( "Table1", "table1.adt", "table1.adi" )
?
IF ! AdsDDaddTable("Customer Data", "table2.adt", "table2.adi")
IF ! AdsDDaddTable( "Customer Data", "table2.adt", "table2.adi" )
// notice the "long table name" for file Table2.adt. Later open it with "Customer Data" as the table name
? "Error adding table:", adsGetLastError(@cErr), cErr
? "Error adding table:", adsGetLastError( @cErr ), cErr
ENDIF
? "Set new admin pword on default connection:", AdsDDSetDatabaseProperty( ADS_DD_ADMIN_PASSWORD, "newPWord" )
? "Set new admin pword on explicit connection:", AdsDDSetDatabaseProperty( ADS_DD_ADMIN_PASSWORD, "newPWord", hConnection1 )
? "Clear admin pword:", AdsDDSetDatabaseProperty( ADS_DD_ADMIN_PASSWORD, "" )
ELSE
? "Error connecting to harbour.add!"
ENDIF
AdsDisconnect(hConnection1)
hConnection1 := nil // you should always reset a variable holding a handle that is no longer valid
AdsDisconnect( hConnection1 )
hConnection1 := NIL // you should always reset a variable holding a handle that is no longer valid
? "Default connection is back to 0:", adsConnection()
? "Is a Data Dict connection? (AE_INVALID_HANDLE = 5018):", AdsGetHandleType()
// now open the tables and put some data
IF AdsConnect60("harbour.add", 7/* All types of connection*/, "Luiz", "papael", , @hConnection1)
IF AdsConnect60( "harbour.add", 7; /* All types of connection*/
, "Luiz", "papael", , @hConnection1 )
? "Default connection is now this handle:", adsConnection()
? "Connection type?", AdsGetHandleType()
FOR n := 1 TO 100
IF AdsCreateSqlStatement("Data2", 3)
IF !AdsExecuteSqlDirect(" insert into Table1( name,address,city,age) VALUES( '" + strzero(n)+"','"+strzero(n)+"','"+strzero(n)+"'," +str(n)+ ")" )
IF AdsCreateSqlStatement( "Data2", 3 )
IF ! AdsExecuteSqlDirect( " insert into Table1( name,address,city,age) VALUES( '" + StrZero( n ) + "','" + StrZero( n ) + "','" + StrZero( n ) + "'," + Str( n ) + ")" )
ShowAdsError()
ENDIF
USE
@@ -126,8 +129,8 @@ FUNCTION MAIN
NEXT
FOR n := 1 TO 100
IF AdsCreateSqlStatement("Data1", 3)
IF !AdsExecuteSqlDirect(" insert into " +'"Customer Data"'+"( name,address,city,age) VALUES( '"+ strzero(n)+"','"+strzero(n)+"','"+strzero(n)+"'," +str(n)+")" )
IF AdsCreateSqlStatement( "Data1", 3 )
IF ! AdsExecuteSqlDirect( " insert into " + '"Customer Data"' + "( name,address,city,age) VALUES( '" + StrZero( n ) + "','" + StrZero( n ) + "','" + StrZero( n ) + "'," + Str( n ) + ")" )
ShowAdsError()
ENDIF
USE
@@ -138,22 +141,22 @@ FUNCTION MAIN
// AdsUseDictionary(.t.) this function no longer is needed; the system knows if it's using a Data Dictionary connection
// Open the "long table name" for Table2
DbUseArea(.t.,, "Customer Data", "custom", .t., .f.)
? "Press a key to browse", alias()
inkey(0)
dbUseArea( .T. , , "Customer Data", "custom", .T. , .F. )
? "Press a key to browse", Alias()
Inkey( 0 )
Browse()
USE
USE table1 new
USE table1 NEW
Browse()
USE
ENDIF
AdsDisconnect(hConnection1)
@ 24, 0 say ""
AdsDisconnect( hConnection1 )
RETURN NIL
RETURN
PROCEDURE ShowAdsError()
PROC ShowAdsError()
LOCAL cMsg
AdsGetLastError( @cMsg )

View File

@@ -60,20 +60,20 @@ REQUEST ADS
# include "rddads.hbx"
#endif
function Main()
PROCEDURE Main()
local i
local aRay
LOCAL i
LOCAL aRay
#if defined( __HBDYNLOAD__RDDADS__ )
local l := hb_libLoad( hb_libName( "rddads" ) )
LOCAL l := hb_libLoad( hb_libName( "rddads" ) )
hb_rddadsRegister()
HB_SYMBOL_UNUSED( l )
#endif
rddsetdefault( "ADS" )
rddSetDefault( "ADS" )
SET SERVER LOCAL // REMOTE
// use test // make this available to get some stats on open tables below
@@ -87,7 +87,7 @@ function Main()
?
aRay := AdsMgGetInstallInfo()
IF len(aRay) > 7
IF Len( aRay ) > 7
? "Install info:"
? aRay[1]
? aRay[2]
@@ -100,72 +100,72 @@ function Main()
?
ENDIF
? "Activity info:"
? AdsMgGetActivityInfo(1)
? AdsMgGetActivityInfo(2)
? "Activity info:"
? AdsMgGetActivityInfo( 1 )
? AdsMgGetActivityInfo( 2 )
aRay := AdsMgGetActivityInfo(3)
IF len(aRay) > 3
aRay := AdsMgGetActivityInfo( 3 )
IF Len( aRay ) > 3
? "Up Time:", aRay[1], aRay[2], aRay[3], aRay[4]
?
ENDIF
? " Item In Use MaxUsed Rejected"
aRay := AdsMgGetActivityInfo(4)
IF len(aRay) > 2
aRay := AdsMgGetActivityInfo( 4 )
IF Len( aRay ) > 2
? "Users: ", aRay[1], aRay[2], aRay[3]
ENDIF
aRay := AdsMgGetActivityInfo(5)
IF len(aRay) > 2
aRay := AdsMgGetActivityInfo( 5 )
IF Len( aRay ) > 2
? "Connections: ", aRay[1], aRay[2], aRay[3]
ENDIF
aRay := AdsMgGetActivityInfo(6)
IF len(aRay) > 2
aRay := AdsMgGetActivityInfo( 6 )
IF Len( aRay ) > 2
? "WorkAreas: ", aRay[1], aRay[2], aRay[3]
ENDIF
aRay := AdsMgGetActivityInfo(7)
IF len(aRay) > 2
aRay := AdsMgGetActivityInfo( 7 )
IF Len( aRay ) > 2
? "Tables: ", aRay[1], aRay[2], aRay[3]
ENDIF
aRay := AdsMgGetActivityInfo(8)
IF len(aRay) > 2
aRay := AdsMgGetActivityInfo( 8 )
IF Len( aRay ) > 2
? "Indexes: ", aRay[1], aRay[2], aRay[3]
ENDIF
aRay := AdsMgGetActivityInfo(9)
IF len(aRay) > 2
aRay := AdsMgGetActivityInfo( 9 )
IF Len( aRay ) > 2
? "Locks: ", aRay[1], aRay[2], aRay[3]
ENDIF
aRay := AdsMgGetActivityInfo(10)
IF len(aRay) > 2
aRay := AdsMgGetActivityInfo( 10 )
IF Len( aRay ) > 2
? "TpsHeaderElems:", aRay[1], aRay[2], aRay[3]
ENDIF
aRay := AdsMgGetActivityInfo(11)
IF len(aRay) > 2
aRay := AdsMgGetActivityInfo( 11 )
IF Len( aRay ) > 2
? "TpsVisElems: ", aRay[1], aRay[2], aRay[3]
ENDIF
aRay := AdsMgGetActivityInfo(12)
IF len(aRay) > 2
aRay := AdsMgGetActivityInfo( 12 )
IF Len( aRay ) > 2
? "TpsMemoElems: ", aRay[1], aRay[2], aRay[3]
ENDIF
aRay := AdsMgGetActivityInfo(13)
IF len(aRay) > 2
aRay := AdsMgGetActivityInfo( 13 )
IF Len( aRay ) > 2
? "WorkerThreads: ", aRay[1], aRay[2], aRay[3]
ENDIF
wait
WAIT
?
aRay := AdsMgGetCommStats()
IF len(aRay) > 10
IF Len( aRay ) > 10
? aRay[1] , "% of pkts with checksum failures "
? aRay[2] , "Total packets received "
? aRay[3] , "Receive packets out of sequence "
@@ -179,11 +179,11 @@ function Main()
? aRay[11], "SendTo failed (NT only) "
ENDIF
wait
WAIT
?
aRay := AdsMgGetConfigInfo(0)
IF len(aRay) > 24
aRay := AdsMgGetConfigInfo( 0 )
IF Len( aRay ) > 24
? aRay[1] , " number connections "
? aRay[2] , " number work areas "
? aRay[3] , " number tables "
@@ -212,11 +212,11 @@ function Main()
// ? aRay[26], " reserved "
ENDIF
wait
WAIT
?
aRay := AdsMgGetConfigInfo(1)
IF len(aRay) > 12
aRay := AdsMgGetConfigInfo( 1 )
IF Len( aRay ) > 12
? aRay[1] , " Total mem taken by cfg params "
? aRay[2] , " memory taken by connections "
? aRay[3] , " memory taken by work areas "
@@ -238,9 +238,9 @@ function Main()
// Second arg: Max # of users (required for memory allocation, default is 100)
aRay := AdsMgGetUserNames()
IF aRay != NIL
? "Number of connected users: ", len(aRay)
FOR i := 1 TO len(aRay)
? aRay[i]
? "Number of connected users: ", Len( aRay )
FOR i := 1 TO Len( aRay )
? aRay[ i ]
NEXT
ENDIF
@@ -250,4 +250,5 @@ function Main()
? "end"
?
return nil
RETURN

View File

@@ -19,7 +19,7 @@
#endif
#ifdef __HARBOUR__ // Harbour and xHarbour
#ifdef __HARBOUR__
#include "hbclass.ch"
#endif

View File

@@ -1217,7 +1217,7 @@ HB_FUNC( ORDCONDSET )
lpdbOrdCondInfo->fUseCurrent = hb_parl( 14 );
lpdbOrdCondInfo->fCustom = hb_parl( 15 );
lpdbOrdCondInfo->fNoOptimize = hb_parl( 16 );
/* 18th parameter in[x]Harbour is MEMORY flag added by Alexander for
/* 18th parameter in [x]Harbour is MEMORY flag added by Alexander for
DBFNTX, so far it was served in hacked way inside SELF_ORDSETCOND()
so it was working only if this method was called from ORDCONDSET()
function. I also do not like the idea that it was called MEMORY.

View File

@@ -3,7 +3,7 @@
*/
/*
* [x]Harbour Project source code:
* Harbour Project source code:
* XWindow Console
* Copyright 2003 - Giancarlo Niccolai <antispam /at/ niccolai.ws>
* Copyright 2004/2006 - Przemyslaw Czerpak <druzus /at/ priv.onet.pl>

View File

@@ -3,7 +3,7 @@
*/
/*
* [x]Harbour Project source code:
* Harbour Project source code:
* XWindow Console
* Copyright 2003 - Giancarlo Niccolai <antispam /at/ niccolai.ws>
* Copyright 2004/2006 - Przemyslaw Czerpak <druzus /at/ priv.onet.pl>

View File

@@ -56,7 +56,7 @@
*/
/*
MD5 digest (based on RFC 1321 only). [x]Harbour implementation
MD5 digest (based on RFC 1321 only). Harbour implementation
PRG functions:

View File

@@ -3,7 +3,7 @@
*/
***************************************************
* X harbour Inet demo server program
* Harbour Inet demo server program
*
* Giancarlo Niccolai
*
@@ -11,7 +11,7 @@
* to demonstrate how to use timeout sockets.
*
Procedure Main( cPort )
PROCEDURE Main( cPort )
LOCAL Socket, s
LOCAL nResponse, cResponse
LOCAL nTurn := 0, nTurn1 := 0
@@ -26,8 +26,8 @@ Procedure Main( cPort )
hb_InetInit()
@ 1, 15 SAY "X H A R B O U R - Inet Api Server Demo"
@ 2, 5 SAY "Contact this server using telnet or the xHarbour Inet Client demo"
@ 1, 15 SAY "H A R B O U R - Inet Api Server Demo"
@ 2, 5 SAY "Contact this server using telnet or the Harbour Inet Client demo"
@ 3, 5 SAY "Press a [KEY] to terminate the program"
@ 5, 5 SAY "Server listening on port " + cPort + "..."
Socket := hb_InetServer( Val( cPort ) )
@@ -108,7 +108,7 @@ Procedure Main( cPort )
hb_InetCleanup()
RETURN
RETURN
PROCEDURE Progress( nProgress, nDrow, nDcol )
@@ -136,4 +136,4 @@ PROCEDURE Progress( nProgress, nDrow, nDcol )
@ nRow, nCol
RETURN
RETURN