How HMG works with SQL server express ?

General Help regarding HMG, Compilation, Linking, Samples

Moderator: Rathinagiri

huangchenmin
Posts: 157
Joined: Mon Jun 07, 2010 2:24 am

Re: How HMG works with SQL server express ?

Post by huangchenmin »

mol wrote:I've integrated MS SQL Express with HMG via ODBC. I Put my code, if you are interested...

Code: Select all

.......
Dear mol:
I select workarea to switch between multiple DBF. And it might be a little redundant if connect to database whenever I like to manipulate those data. Otherwise I connect to SQL server without specific databse?
what is your way to switch between multiple SQL database ?
Best regards
chen min
User avatar
mol
Posts: 3718
Joined: Thu Sep 11, 2008 5:31 am
Location: Myszków, Poland
Contact:

Re: How HMG works with SQL server express ?

Post by mol »

In DBF system - one file is a database. And this file is equivalent to table.
In SQL base - one database is a collection of tables - not alone table like .dbf file.
When you connect to sql database - you have access to all tables, eq:

select * from one_of_table

or you can select from few tables in the same time:
select * from first_table, second_table

I'm not too familiar with SQL to write here more examples...

Regards, Marek

PS.
Sorry for my late answer.
I spent a weekend in mountains riding on snowboard to clarify my mind :lol:
huangchenmin
Posts: 157
Joined: Mon Jun 07, 2010 2:24 am

Re: How HMG works with SQL server express ?

Post by huangchenmin »

mol wrote:In DBF system - one file is a database. And this file is equivalent to table.
In SQL base - one database is a collection of tables - not alone table like .dbf file.
......

PS.
Sorry for my late answer.
I spent a weekend in mountains riding on snowboard to clarify my mind :lol:
Dear mol:
There is no late answer at all.
I deal those problen after jogging. exercises is a magic drug to mind and soul.
Best regards
chen min
huangchenmin
Posts: 157
Joined: Mon Jun 07, 2010 2:24 am

Re: How HMG works with SQL server express ?

Post by huangchenmin »

mol wrote:In DBF system - one file is a database. And this file is equivalent to table....
:lol:
Dear mol: :lol:
Following are things you might already know.
According to what I tried this afternoon.
1.Once connect to SQL server with database specified. such as
cConStr:="Driver={SQL Server};Server=.\SQLEXPRESS;Trusted_Connection=yes;Uid=sa;Pwd=1234;"
RDDINFO( RDDI_CONNECT, { "ODBC", cConStr },'SQLMIX')
we could select any table from any database as following sample code.
m_sqlste:='select * from DatabaseName..TableName;'
DBUSEAREA( .T.,,m_sqlste, "tempDBF1" )
......
close tempDBF1
The 2 dots between database name and table name are must required.
2.It is allowed to insert record continously one by one as following sample code.
m_sqlste:='INSERT INTO testdb..testdb_tb1 VALUES(24,'+"'"+'R4C2_testdb_tb1'+"',"+;
+"'"+'R5C3_testdb_tb1'+"'"+');'
DBUSEAREA(.T.,,m_sqlste,"tempDBF3")
m_sqlste:='INSERT INTO testdb..testdb_tb1 VALUES(25,'+"'"+'R5C2_testdb_tb1'+"',"+;
+"'"+'R5C3_testdb_tb1'+"'"+');'
DBUSEAREA(.F.,,m_sqlste,"tempDBF3")
CLOSE TEMPDBF3
As you see the 1th parameter of 2nd RDDINFO() is flase.
That is what I did this afternoon all about.
Best Regards :lol:
chen min
Attachments
SQLtest.zip
(976 Bytes) Downloaded 344 times
User avatar
gcarrizo
Posts: 43
Joined: Fri Oct 07, 2016 1:20 pm
DBs Used: DBF
Location: Argentina

Re: How HMG works with SQL server express ?

Post by gcarrizo »

I have troubles compiling your "SQLtest.zip" with version 3.4.4


HMG Errorlog File :
------------------------------------
Date:2017-07-28 Time: 09:17:55
Error BASE/1070 Argument error: ==
Called from MAIN(14)

------------------------------------

But compiling with version 3.4.3 all is ok.
Have another report from this error ? Any Idea ?

Best Regards



------------------------------------------------------------------------------------------------------------

huangchenmin wrote: Tue Mar 13, 2012 10:20 am
mol wrote:In DBF system - one file is a database. And this file is equivalent to table....
:lol:
Dear mol: :lol:
Following are things you might already know.
According to what I tried this afternoon.
1.Once connect to SQL server with database specified. such as
cConStr:="Driver={SQL Server};Server=.\SQLEXPRESS;Trusted_Connection=yes;Uid=sa;Pwd=1234;"
RDDINFO( RDDI_CONNECT, { "ODBC", cConStr },'SQLMIX')
we could select any table from any database as following sample code.
m_sqlste:='select * from DatabaseName..TableName;'
DBUSEAREA( .T.,,m_sqlste, "tempDBF1" )
......
close tempDBF1
The 2 dots between database name and table name are must required.
2.It is allowed to insert record continously one by one as following sample code.
m_sqlste:='INSERT INTO testdb..testdb_tb1 VALUES(24,'+"'"+'R4C2_testdb_tb1'+"',"+;
+"'"+'R5C3_testdb_tb1'+"'"+');'
DBUSEAREA(.T.,,m_sqlste,"tempDBF3")
m_sqlste:='INSERT INTO testdb..testdb_tb1 VALUES(25,'+"'"+'R5C2_testdb_tb1'+"',"+;
+"'"+'R5C3_testdb_tb1'+"'"+');'
DBUSEAREA(.F.,,m_sqlste,"tempDBF3")
CLOSE TEMPDBF3
As you see the 1th parameter of 2nd RDDINFO() is flase.
That is what I did this afternoon all about.
Best Regards :lol:
chen min
GodkarPS
Posts: 40
Joined: Wed Nov 06, 2013 10:12 am
DBs Used: DBF
hmg with SQL SERVER
Location: INDIA
Contact:

Re: How HMG works with SQL server express ?

Post by GodkarPS »

I have not able to establish SQL Server ODBC Connection in HMG 3.4.4 and higher version but it ok upto HMG 3.4.3
Code as below. Any code i have to change or else.

#include <hmg.ch>
#xcommand TRY => BEGIN SEQUENCE WITH { |oErr| Break( oErr ) }
#xcommand CATCH [<!oErr!>] => RECOVER [USING <oErr>] <-oErr->

REQUEST SDDODBC, SQLMIX, DBFNTX
REQUEST HB_GT_WIN_DEFAULT

#define RDDI_CONNECT 1001
#define RDDI_DISCONNECT 1002
#define TRUE .T.
#define FALSE .F.


Function Main()
_ConString := [SERVER=ADMIN-PC\SQLEXPRESS;DATABASE=PAYROLL;Driver={SQL Native Client};UID=sa;Pwd=admin@951;]
SetMode(25,80)
SQLOpen([select name from sys.tables],[TEST])
Select TEST
Go Top
DbEdit()
Return NIL


Function SQLOpen(cStr,cAlias)
Local CurRDDSet
Local tConOk,tOk:=.T.
If Select(cAlias)<>0
Close (cAlias)
EndIf
CurRDDSet:=RDDSETDEFAULT( "SQLMIX" )
Do While TRUE
tConOk:=RDDINFO( RDDI_CONNECT, { "ODBC", _ConString },'SQLMIX')
If ValType(tConOk)='N'
If tConOk=0
If MsgYesNo( "Connection failed..Retry?", "Connection SQL" )
Loop
Else
tOk:=.F.
Exit
EndIf
EndIf
ElseIf ValType(tConOk)='L'
If !tConOk
If MsgYesNo( "Connection failed..Retry?", "Connection SQL" )
Loop
Else
tOk:=.F.
Exit
EndIf
EndIf
EndIf
Exit
EndDo
If tOk=.F.
RDDINFO( RDDI_DISCONNECT)
RDDSETDEFAULT(CurRDDSet)
Msgbox('Database connection not available....')
Return .F.
Else
TRY
DBUSEAREA( TRUE,, cStr, cAlias )
RDDINFO( RDDI_DISCONNECT)
RDDSETDEFAULT(CurRDDSet)
CATCH
MsgBox('Error while use table')
RDDINFO( RDDI_DISCONNECT)
RDDSETDEFAULT(CurRDDSet)
Return .F.
END
RDDINFO( RDDI_DISCONNECT)
RDDSETDEFAULT(CurRDDSet)
Return .T.
EndIf
User avatar
jairpinho
Posts: 420
Joined: Mon Jul 18, 2011 5:36 pm
Location: Rio Grande do Sul - Brasil
Contact:

Re: How HMG works with SQL server express ?

Post by jairpinho »

GodkarPS wrote: Fri Dec 11, 2020 3:40 pm I have not able to establish SQL Server ODBC Connection in HMG 3.4.4 and higher version but it ok upto HMG 3.4.3
Code as below. Any code i have to change or else.

#include <hmg.ch>
#xcommand TRY => BEGIN SEQUENCE WITH { |oErr| Break( oErr ) }
#xcommand CATCH [<!oErr!>] => RECOVER [USING <oErr>] <-oErr->

REQUEST SDDODBC, SQLMIX, DBFNTX
REQUEST HB_GT_WIN_DEFAULT

#define RDDI_CONNECT 1001
#define RDDI_DISCONNECT 1002
#define TRUE .T.
#define FALSE .F.


Function Main()
_ConString := [SERVER=ADMIN-PC\SQLEXPRESS;DATABASE=PAYROLL;Driver={SQL Native Client};UID=sa;Pwd=admin@951;]
SetMode(25,80)
SQLOpen([select name from sys.tables],[TEST])
Select TEST
Go Top
DbEdit()
Return NIL


Function SQLOpen(cStr,cAlias)
Local CurRDDSet
Local tConOk,tOk:=.T.
If Select(cAlias)<>0
Close (cAlias)
EndIf
CurRDDSet:=RDDSETDEFAULT( "SQLMIX" )
Do While TRUE
tConOk:=RDDINFO( RDDI_CONNECT, { "ODBC", _ConString },'SQLMIX')
If ValType(tConOk)='N'
If tConOk=0
If MsgYesNo( "Connection failed..Retry?", "Connection SQL" )
Loop
Else
tOk:=.F.
Exit
EndIf
EndIf
ElseIf ValType(tConOk)='L'
If !tConOk
If MsgYesNo( "Connection failed..Retry?", "Connection SQL" )
Loop
Else
tOk:=.F.
Exit
EndIf
EndIf
EndIf
Exit
EndDo
If tOk=.F.
RDDINFO( RDDI_DISCONNECT)
RDDSETDEFAULT(CurRDDSet)
Msgbox('Database connection not available....')
Return .F.
Else
TRY
DBUSEAREA( TRUE,, cStr, cAlias )
RDDINFO( RDDI_DISCONNECT)
RDDSETDEFAULT(CurRDDSet)
CATCH
MsgBox('Error while use table')
RDDINFO( RDDI_DISCONNECT)
RDDSETDEFAULT(CurRDDSet)
Return .F.
END
RDDINFO( RDDI_DISCONNECT)
RDDSETDEFAULT(CurRDDSet)
Return .T.
EndIf
hello, follow some codes and the pss.ch file if you need

Code: Select all

#include <hmg.ch>
#include "common.ch"


#include "simpleio.ch" 
#INCLUDE <pss.ch>
#INCLUDE <ord.ch>
#INCLUDE <hbver.ch>
//#include "hbrddsql.ch"

 /*        
#define RDDI_CONNECT          1001
#define RDDI_EXECUTE          1003

#DEFINE SQL_HBODBC
#UNDEF SQL_SQLMIX

*#UNDEF SQL_HBODBC
*#DEFINE SQL_SQLMIX
*/
#define RDDI_CONNECT          1001
#define RDDI_EXECUTE          1003
REQUEST SDDODBC, SQLMIX
   
Function Main

        Load Window Main
        Main.Center
        Main.Activate

Return

function 	conn1()
	

	
	Local cSQLServer := "192.168.1.7\SQLEXPRESS"
	lOCAL cSQLDataBase := "MuOnline"
	Local cSQLUser := "muonline"
	Local cSQLPassword := "wgkamix401377"
	public SQL_Connection	
	cSql:= "CREATE DATABASE teste2"

	
	RDDSETDEFAULT( "SQLMIX" )
   SET( _SET_DATEFORMAT, "yyyy-mm-dd" ) 

//REQUEST SDDODBC, SQLMIX 

cConStr := "Driver={SQL Server};Server=" + cSQLServer + ";Database="+ cSQLDataBase + ";Trusted_Connection=yes;Uid=" + cSQLUser + ";Pwd="+ cSQLPassword +";"

nConnection := RDDINFO( 1001, { "ODBC", cConStr }, 'SQLMIX' )
  //MSGdebug("Connect:", RDDINFO( 1001, { "ODBC", "Driver={SQL Server};DSN=muonline;Server=192.168.1.7:1433;database=MuOnline;uid=muonline;pwd=wgkamix401377;" }) )
MSGdebug(nConnection)
//msgbox("Connect: "+str(nConnection))

RDDINFO(RDDI_EXECUTE, cSQL)
  // INKEY( 0 ) 
RETURN 

function conn2()

RDDSETDEFAULT( "SQLMIX" )
//RDDSETDEFAULT( "SDDODBC" )

SET( _SET_DATEFORMAT, "yyyy-mm-dd" )
// try also (local)SQLEXPRESS
//? "Connect:"
nConn :=  RDDINFO(RDDI_CONNECT,{"ODBC","Driver={SQL Server};Server=192.168.1.7.\SQLEXPRESS;database=MuOnline;Uid=muonline;pwd=wgkamix401377" } )
IF nConn == 0
Msginfo( "Não conectado ao servidor: " + str(RDDINFO(RDDI_ERRORNO )) + HB_EOL() + RDDINFO( RDDI_ERROR ) )
//RDDSETDEFAULT( cRdd )
RETURN
ENDIF

 //RDDINFO(RDDI_EXECUTE, "DROP TABLE test")
 RDDINFO(RDDI_EXECUTE, "CREATE TABLE test2 (CODE char(3), DESCR char(50), VALUE int(11))")
 RDDINFO(RDDI_EXECUTE, "INSERT INTO test2 values ('AA','Lithuania', 3369600), ('USA', 'United States of America', 305397000)")

return
*------------------------------


function conn3()

 Local nSQLConnection := 0 //SQL_ConnectDatabase( "192.168.1.7\SQLEXPRESS","MuOnline" ,"muonline" ,"wgkamix401377"  )


 nSQLConnection := SQL_ConnectDatabase( "192.168.1.7\SQLEXPRESS","MuOnline" ,"muonline" ,"wgkamix401377"  )

 msgdebug(nSQLConnection)
 If nSQLConnection == 0
    msgstop("Connection to server failed.")
 Else
    msginfo("Connected")
   // ShowButtons( .T. )
 EndIf
RETURN
return
Function SQL_ConnectDatabase( cServer, cDatabase, cUser, cPassword)
RETURN RDDINFO( RDDI_CONNECT, { "ODBC", "Driver={SQL Server};Server="+cServer+";Database="+cDatabase+";Uid="+cUser+";Pwd="+cPassword+";" },'SQLMIX' ) 

FUNCTION conn4()

Local aArray := {}
Local aArray2 := {}

   PUBLIC oConnectionDB := CreateObject("ADODB.Connection")
   PUBLIC oReadData := CreateObject("ADODB.Recordset")
   oConnectionDB:CursorLocation := adUseClient
   oConnectionDB:ConnectionTimeout := 5000000	

    GsServerPdw :=  "wgkamix401377"
    GsServerUsr := "muonline"
    GsServerDB := "MuOnline"
    // GsIPServer := "10.10.10.20" 
	 GsIPServer := "192.168.1.7" 


   IF EMPTY(GsServerDB)
      GsServerDB = "MASTER"
   ENDIF
   
   LsAccess2DB :=  "Provider=SQLOLEDB;Password=&GsServerPdw;"+;
                   "Persist Security Info=TRUE;USER ID=&GsServerUsr;"+;
                   "Initial CATALOG=&GsServerDB;DATA Source=&GsIPServer;"+;
                   "Use PROCEDURE FOR PREPARE=1;Auto TRANSLATE=TRUE;Packet SIZE=4096;"+;
                   "Use Encryption FOR DATA=False;Tag WITH COLUMN COLLATION WHEN "+;
                   "possible=False;CONNECTION TIMEOUT=600"
     // msginfo(ccConnector)
   oConnectionDB:open(LsAccess2DB)
   
		//Connect2SQL()
		GsQueryRead := "SELECT * FROM MEMB_INFO"
		//inputbox("","",GsQueryRead)
      oReadData:Open(GsQueryRead, oConnectionDB, adOpenDynamic, adLockReadOnly)

		IF oReadData:RecordCount = 0
			oReadData:Close()
			MsgInfo("Não arquivos na consulta")
		ELSE
        // Frm_Show_Customer.Grd_Customer.DeleteAllItems
		
         oReadData:MOVEFIRST()
         DO WHILE !oReadData:EOF()
 			Aadd( aArray ,  ALLTRIM(oReadData:Fields(1):Value) )
			Aadd( aArray2 ,  ALLTRIM(oReadData:Fields("mail_addr"):Value) )
            oReadData:MOVENEXT()
         ENDDO
		ENDIF
msgdebug(aArray )
msgdebug(aArray2 )

RETURN NIL

create pss.ch

Code: Select all

#DEFINE GsRutaDB 		"DataBase\"
#DEFINE GsRutaUpdate "Update\"
#DEFINE GsRutaSYS 	"Sys\"
#DEFINE GsRutaSheet 	"Sheet\"
#DEFINE GsRutaSheet 	"Backup\"
#DEFINE GbEnabled		.T.
#DEFINE GbDisabled 	.F.
#DEFINE GbSwitchOn	.T.
#DEFINE GbSwitchOff	.F.


// Para archivos del tipo xBase
#DEFINE GbShared     .T.
#DEFINE GbNoShared   .F.
#DEFINE GbWrite      .F.
#DEFINE GbNoWrite	   .T.
#DEFINE GbRead		   .F.
#DEFINE GbNoRead  	.T.
#DEFINE GbVisibleOn  .T.
#DEFINE GbVisibleOff .F.

* Tipos de letras
#DEFINE GsAncho60 CHR(14)
#DEFINE GsCond140 CHR(15)
#DEFINE GsNormal  CHR(18)+CHR(19)
#DEFINE GsCond120 CHR(16)
#DEFINE GsCond96  CHR(17)
#DEFINE GsCond160 CHR(20)
#DEFINE GsBold  CHR(19)
#DEFINE GsCancelBold CHR(19)+CHR(18)


// Tipos de datos para la creación de las archivos DBF
#DEFINE GEnId          	"N",	 25, 0
#DEFINE GEsId           "C",	 25, 0
#DEFINE GEsName        	"C",	100, 0
#DEFINE GEsAddress     	"C",	100, 0
#DEFINE GEsPostalCode   "C",	 10, 0
#DEFINE GEsCodeArea     "C",	 10, 0
#DEFINE GEsPhone      	"C",	 30, 0
#DEFINE GEsDescription	"C",	100, 0
#DEFINE GEsLogin     	"C",	 15, 0
#DEFINE GEsPassword     "C",	 15, 0
#DEFINE GEsProgName     "C",	100, 0
#DEFINE GEdEntryDate    "D",	  8, 0
#DEFINE GEsEntryTime    "C",	  8, 0
#DEFINE GEbBoolean      "L",	  1, 0
#DEFINE GEsComment      "M",	 10, 0
#DEFINE GEnAmount      	"N",	 15, 2
#DEFINE GEnPercentage   "N",    6, 3
#DEFINE GEsFiscalData   "C",   50, 3
#DEFINE GEsEmail		   "C",  100, 3
#DEFINE GEsWeb			   "C",  100, 3
#DEFINE GEsNote        	"C",	200, 0




/*
CHR(14)+'1234567890 modo ANCHO 60 CPL'
*? CHR(15)+'1234567890 MODO CONDENSADO 140 CPL'
*? 'vuelve y juega'
*? chr(18)+'1234567890 NORMAL'
*? CHR(16)+'1234567890 MODO CONDENSADO 120 CPL'
*? CHR(17)+'1234567890 MODO CONDENSADO 96 CPL'
*? CHR(20)+'1234567890 MODO CONDENSADO 160 CPL'
*? chr(18)+'1234567890 MODO NORMAL 80 CPL'
*? CHR(19)+'1234567890 MODO NORMAL NEGRITA'
*? chr(19)+chr(18)+'1234567890 NORMAL NUEVAMENTE'
*/

/* Las siguientes lineas son copia del archico ADOBIEL.ch
* ************************************************************************
 * Fichero: ado.ch
 * Descripci󮺠Fichero de cabecera con definiciones ADO
 * Recopilado : Biel Maim󠅁6DD	
*/


*** Constant Group: CursorTypeEnum
#DEFINE adOpenUnspecified -1
#DEFINE adOpenForwardOnly 0
#DEFINE adOpenKeyset 1
#DEFINE adOpenDynamic 2
#DEFINE adOpenStatic 3

*** Constant Group: CursorOptionEnum
#DEFINE adHoldRecords 256
#DEFINE adMovePrevious 512
#DEFINE adAddNew 16778240
#DEFINE adDelete 16779264
#DEFINE adUpdate 16809984
#DEFINE adBookmark 8192
#DEFINE adApproxPosition 16384
#DEFINE adUpdateBatch 65536
#DEFINE adResync 131072
#DEFINE adNotify 262144
#DEFINE adFind 524288
#DEFINE adSeek 4194304
#DEFINE adIndex 8388608

*** Constant Group: LockTypeEnum
#DEFINE adLockUnspecified -1
#DEFINE adLockReadOnly 1
#DEFINE adLockPessimistic 2
#DEFINE adLockOptimistic 3
#DEFINE adLockBatchOptimistic 4

*** Constant Group: ExecuteOptionEnum
#DEFINE adOptionUnspecified -1
#DEFINE adAsyncExecute 16
#DEFINE adAsyncFetch 32
#DEFINE adAsyncFetchNonBlocking 64
#DEFINE adExecuteNoRecords 128
#DEFINE adExecuteStream 1024
#DEFINE adExecuteRecord 2048

*** Constant Group: ConnectOptionEnum
#DEFINE adConnectUnspecified -1
#DEFINE adAsyncConnect 16

*** Constant Group: ObjectStateEnum
#DEFINE adStateClosed 0
#DEFINE adStateOpen 1
#DEFINE adStateConnecting 2
#DEFINE adStateExecuting 4
#DEFINE adStateFetching 8

*** Constant Group: CursorLocationEnum
#DEFINE adUseNone 1
#DEFINE adUseServer 2
#DEFINE adUseClient 3
#DEFINE adUseClientBatch 3

*** Constant Group: DataTypeEnum
#DEFINE adEmpty 0
#DEFINE adTinyInt 16
#DEFINE adSmallInt 2
#DEFINE adInteger 3
#DEFINE adBigInt 20
#DEFINE adUnsignedTinyInt 17
#DEFINE adUnsignedSmallInt 18
#DEFINE adUnsignedInt 19
#DEFINE adUnsignedBigInt 21
#DEFINE adSingle 4
#DEFINE adDouble 5
#DEFINE adCurrency 6
#DEFINE adDecimal 14
#DEFINE adNumeric 131
#DEFINE adBoolean 11
#DEFINE adError 10
#DEFINE adUserDefined 132
#DEFINE adVariant 12
#DEFINE adIDispatch 9
#DEFINE adIUnknown 13
#DEFINE adGUID 72
#DEFINE adDate 7
#DEFINE adDBDate 133
#DEFINE adDBTime 134
#DEFINE adDBTimeStamp 135
#DEFINE adBSTR 8
#DEFINE adChar 129
#DEFINE adVarChar 200
#DEFINE adLongVarChar 201
#DEFINE adWChar 130
#DEFINE adVarWChar 202
#DEFINE adLongVarWChar 203
#DEFINE adBinary 128
#DEFINE adVarBinary 204
#DEFINE adLongVarBinary 205
#DEFINE adChapter 136
#DEFINE adFileTime 64
#DEFINE adPropVariant 138
#DEFINE adVarNumeric 139
#DEFINE adArray 8192

*** Constant Group: FieldAttributeEnum
#DEFINE adFldUnspecified -1
#DEFINE adFldMayDefer 2
#DEFINE adFldUpdatable 4
#DEFINE adFldUnknownUpdatable 8
#DEFINE adFldFixed 16
#DEFINE adFldIsNullable 32
#DEFINE adFldMayBeNull 64
#DEFINE adFldLong 128
#DEFINE adFldRowID 256
#DEFINE adFldRowVersion 512
#DEFINE adFldCacheDeferred 4096
#DEFINE adFldIsChapter 8192
#DEFINE adFldNegativeScale 16384
#DEFINE adFldKeyColumn 32768
#DEFINE adFldIsRowURL 65536
#DEFINE adFldIsDefaultStream 131072
#DEFINE adFldIsCollection 262144

*** Constant Group: EditModeEnum
#DEFINE adEditNone 0
#DEFINE adEditInProgress 1
#DEFINE adEditAdd 2
#DEFINE adEditDelete 4

*** Constant Group: RecordStatusEnum
#DEFINE adRecOK 0
#DEFINE adRecNew 1
#DEFINE adRecModified 2
#DEFINE adRecDeleted 4
#DEFINE adRecUnmodified 8
#DEFINE adRecInvalid 16
#DEFINE adRecMultipleChanges 64
#DEFINE adRecPendingChanges 128
#DEFINE adRecCanceled 256
#DEFINE adRecCantRelease 1024
#DEFINE adRecConcurrencyViolation 2048
#DEFINE adRecIntegrityViolation 4096
#DEFINE adRecMaxChangesExceeded 8192
#DEFINE adRecObjectOpen 16384
#DEFINE adRecOutOfMemory 32768
#DEFINE adRecPermissionDenied 65536
#DEFINE adRecSchemaViolation 131072
#DEFINE adRecDBDeleted 262144

*** Constant Group: GetRowsOptionEnum
#DEFINE adGetRowsRest -1

*** Constant Group: PositionEnum
#DEFINE adPosUnknown -1
#DEFINE adPosBOF -2
#DEFINE adPosEOF -3

*** Constant Group: BookmarkEnum
#DEFINE adBookmarkCurrent 0
#DEFINE adBookmarkFirst 1
#DEFINE adBookmarkLast 2

*** Constant Group: MarshalOptionsEnum
#DEFINE adMarshalAll 0
#DEFINE adMarshalModifiedOnly 1

*** Constant Group: AffectEnum
#DEFINE adAffectCurrent 1
#DEFINE adAffectGroup 2
#DEFINE adAffectAll 3
#DEFINE adAffectAllChapters 4

*** Constant Group: ResyncEnum
#DEFINE adResyncUnderlyingValues 1
#DEFINE adResyncAllValues 2

*** Constant Group: CompareEnum
#DEFINE adCompareLessThan 0
#DEFINE adCompareEqual 1
#DEFINE adCompareGreaterThan 2
#DEFINE adCompareNotEqual 3
#DEFINE adCompareNotComparable 4

*** Constant Group: FilterGroupEnum
#DEFINE adFilterNone 0
#DEFINE adFilterPendingRecords 1
#DEFINE adFilterAffectedRecords 2
#DEFINE adFilterFetchedRecords 3
#DEFINE adFilterPredicate 4
#DEFINE adFilterConflictingRecords 5

*** Constant Group: SearchDirectionEnum
#DEFINE adSearchForward 1
#DEFINE adSearchBackward -1

*** Constant Group: SearchDirection
#DEFINE adSearchForward 1
#DEFINE adSearchBackward -1

*** Constant Group: PersistFormatEnum
#DEFINE adPersistADTG 0
#DEFINE adPersistXML 1

*** Constant Group: StringFormatEnum
#DEFINE adClipString 2

*** Constant Group: ConnectPromptEnum
#DEFINE adPromptAlways 1
#DEFINE adPromptComplete 2
#DEFINE adPromptCompleteRequired 3
#DEFINE adPromptNever 4

*** Constant Group: ConnectModeEnum
#DEFINE adModeUnknown 0
#DEFINE adModeRead 1
#DEFINE adModeWrite 2
#DEFINE adModeReadWrite 3
#DEFINE adModeShareDenyRead 4
#DEFINE adModeShareDenyWrite 8
#DEFINE adModeShareExclusive 12
#DEFINE adModeShareDenyNone 16
#DEFINE adModeRecursive 4194304

*** Constant Group: RecordCreateOptionsEnum
#DEFINE adCreateCollection 8192
#DEFINE adCreateStructDoc -2147483648
#DEFINE adCreateNonCollection 0
#DEFINE adOpenIfExists 33554432
#DEFINE adCreateOverwrite 67108864
#DEFINE adFailIfNotExists -1

*** Constant Group: RecordOpenOptionsEnum
#DEFINE adOpenRecordUnspecified -1
#DEFINE adOpenSource 8388608
#DEFINE adOpenOutput 8388608
#DEFINE adOpenAsync 4096
#DEFINE adDelayFetchStream 16384
#DEFINE adDelayFetchFields 32768
#DEFINE adOpenExecuteCommand 65536

*** Constant Group: IsolationLevelEnum
#DEFINE adXactUnspecified -1
#DEFINE adXactChaos 16
#DEFINE adXactReadUncommitted 256
#DEFINE adXactBrowse 256
#DEFINE adXactCursorStability 4096
#DEFINE adXactReadCommitted 4096
#DEFINE adXactRepeatableRead 65536
#DEFINE adXactSerializable 1048576
#DEFINE adXactIsolated 1048576

*** Constant Group: XactAttributeEnum
#DEFINE adXactCommitRetaining 131072
#DEFINE adXactAbortRetaining 262144
#DEFINE adXactAsyncPhaseOne 524288
#DEFINE adXactSyncPhaseOne 1048576

*** Constant Group: PropertyAttributesEnum
#DEFINE adPropNotSupported 0
#DEFINE adPropRequired 1
#DEFINE adPropOptional 2
#DEFINE adPropRead 512
#DEFINE adPropWrite 1024

*** Constant Group: ErrorValueEnum
#DEFINE adErrProviderFailed 3000
#DEFINE adErrInvalidArgument 3001
#DEFINE adErrOpeningFile 3002
#DEFINE adErrReadFile 3003
#DEFINE adErrWriteFile 3004
#DEFINE adErrNoCurrentRecord 3021
#DEFINE adErrIllegalOperation 3219
#DEFINE adErrCantChangeProvider 3220
#DEFINE adErrInTransaction 3246
#DEFINE adErrFeatureNotAvailable 3251
#DEFINE adErrItemNotFound 3265
#DEFINE adErrObjectInCollection 3367
#DEFINE adErrObjectNotSet 3420
#DEFINE adErrDataConversion 3421
#DEFINE adErrObjectClosed 3704
#DEFINE adErrObjectOpen 3705
#DEFINE adErrProviderNotFound 3706
#DEFINE adErrBoundToCommand 3707
#DEFINE adErrInvalidParamInfo 3708
#DEFINE adErrInvalidConnection 3709
#DEFINE adErrNotReentrant 3710
#DEFINE adErrStillExecuting 3711
#DEFINE adErrOperationCancelled 3712
#DEFINE adErrStillConnecting 3713
#DEFINE adErrInvalidTransaction 3714
#DEFINE adErrNotExecuting 3715
#DEFINE adErrUnsafeOperation 3716
#DEFINE adwrnSecurityDialog 3717
#DEFINE adwrnSecurityDialogHeader 3718
#DEFINE adErrIntegrityViolation 3719
#DEFINE adErrPermissionDenied 3720
#DEFINE adErrDataOverflow 3721
#DEFINE adErrSchemaViolation 3722
#DEFINE adErrSignMismatch 3723
#DEFINE adErrCantConvertvalue 3724
#DEFINE adErrCantCreate 3725
#DEFINE adErrColumnNotOnThisRow 3726
#DEFINE adErrURLDoesNotExist 3727
#DEFINE adErrTreePermissionDenied 3728
#DEFINE adErrInvalidURL 3729
#DEFINE adErrResourceLocked 3730
#DEFINE adErrResourceExists 3731
#DEFINE adErrCannotComplete 3732
#DEFINE adErrVolumeNotFound 3733
#DEFINE adErrOutOfSpace 3734
#DEFINE adErrResourceOutOfScope 3735
#DEFINE adErrUnavailable 3736
#DEFINE adErrURLNamedRowDoesNotExist 3737
#DEFINE adErrDelResOutOfScope 3738
#DEFINE adErrPropInvalidColumn 3739
#DEFINE adErrPropInvalidOption 3740
#DEFINE adErrPropInvalidValue 3741
#DEFINE adErrPropConflicting 3742
#DEFINE adErrPropNotAllSettable 3743
#DEFINE adErrPropNotSet 3744
#DEFINE adErrPropNotSettable 3745
#DEFINE adErrPropNotSupported 3746
#DEFINE adErrCatalogNotSet 3747
#DEFINE adErrCantChangeConnection 3748
#DEFINE adErrFieldsUpdateFailed 3749
#DEFINE adErrDenyNotSupported 3750
#DEFINE adErrDenyTypeNotSupported 3751

*** Constant Group: ParameterAttributesEnum
#DEFINE adParamSigned 16
#DEFINE adParamNullable 64
#DEFINE adParamLong 128

*** Constant Group: ParameterDirectionEnum
#DEFINE adParamUnknown 0
#DEFINE adParamInput 1
#DEFINE adParamOutput 2
#DEFINE adParamInputOutput 3
#DEFINE adParamReturnValue 4

*** Constant Group: CommandTypeEnum
#DEFINE adCmdUnspecified -1
#DEFINE adCmdUnknown 8
#DEFINE adCmdText 1
#DEFINE adCmdTable 2
#DEFINE adCmdStoredProc 4
#DEFINE adCmdFile 256
#DEFINE adCmdTableDirect 512

*** Constant Group: EventStatusEnum
#DEFINE adStatusOK 1
#DEFINE adStatusErrorsOccurred 2
#DEFINE adStatusCantDeny 3
#DEFINE adStatusCancel 4
#DEFINE adStatusUnwantedEvent 5

*** Constant Group: EventReasonEnum
#DEFINE adRsnAddNew 1
#DEFINE adRsnDelete 2
#DEFINE adRsnUpdate 3
#DEFINE adRsnUndoUpdate 4
#DEFINE adRsnUndoAddNew 5
#DEFINE adRsnUndoDelete 6
#DEFINE adRsnRequery 7
#DEFINE adRsnResynch 8
#DEFINE adRsnClose 9
#DEFINE adRsnMove 10
#DEFINE adRsnFirstChange 11
#DEFINE adRsnMoveFirst 12
#DEFINE adRsnMoveNext 13
#DEFINE adRsnMovePrevious 14
#DEFINE adRsnMoveLast 15

*** Constant Group: SchemaEnum
#DEFINE adSchemaProviderSpecific -1
#DEFINE adSchemaAsserts 0
#DEFINE adSchemaCatalogs 1
#DEFINE adSchemaCharacterSets 2
#DEFINE adSchemaCollations 3
#DEFINE adSchemaColumns 4
#DEFINE adSchemaCheckConstraints 5
#DEFINE adSchemaConstraintColumnUsage 6
#DEFINE adSchemaConstraintTableUsage 7
#DEFINE adSchemaKeyColumnUsage 8
#DEFINE adSchemaReferentialContraints 9
#DEFINE adSchemaReferentialConstraints 9
#DEFINE adSchemaTableConstraints 10
#DEFINE adSchemaColumnsDomainUsage 11
#DEFINE adSchemaIndexes 12
#DEFINE adSchemaColumnPrivileges 13
#DEFINE adSchemaTablePrivileges 14
#DEFINE adSchemaUsagePrivileges 15
#DEFINE adSchemaProcedures 16
#DEFINE adSchemaSchemata 17
#DEFINE adSchemaSQLLanguages 18
#DEFINE adSchemaStatistics 19
#DEFINE adSchemaTables 20
#DEFINE adSchemaTranslations 21
#DEFINE adSchemaProviderTypes 22
#DEFINE adSchemaViews 23
#DEFINE adSchemaViewColumnUsage 24
#DEFINE adSchemaViewTableUsage 25
#DEFINE adSchemaProcedureParameters 26
#DEFINE adSchemaForeignKeys 27
#DEFINE adSchemaPrimaryKeys 28
#DEFINE adSchemaProcedureColumns 29
#DEFINE adSchemaDBInfoKeywords 30
#DEFINE adSchemaDBInfoLiterals 31
#DEFINE adSchemaCubes 32
#DEFINE adSchemaDimensions 33
#DEFINE adSchemaHierarchies 34
#DEFINE adSchemaLevels 35
#DEFINE adSchemaMeasures 36
#DEFINE adSchemaProperties 37
#DEFINE adSchemaMembers 38
#DEFINE adSchemaTrustees 39
#DEFINE adSchemaFunctions 40
#DEFINE adSchemaActions 41
#DEFINE adSchemaCommands 42
#DEFINE adSchemaSets 43

*** Constant Group: FieldStatusEnum
#DEFINE adFieldOK 0
#DEFINE adFieldCantConvertValue 2
#DEFINE adFieldIsNull 3
#DEFINE adFieldTruncated 4
#DEFINE adFieldSignMismatch 5
#DEFINE adFieldDataOverflow 6
#DEFINE adFieldCantCreate 7
#DEFINE adFieldUnavailable 8
#DEFINE adFieldPermissionDenied 9
#DEFINE adFieldIntegrityViolation 10
#DEFINE adFieldSchemaViolation 11
#DEFINE adFieldBadStatus 12
#DEFINE adFieldDefault 13
#DEFINE adFieldIgnore 15
#DEFINE adFieldDoesNotExist 16
#DEFINE adFieldInvalidURL 17
#DEFINE adFieldResourceLocked 18
#DEFINE adFieldResourceExists 19
#DEFINE adFieldCannotComplete 20
#DEFINE adFieldVolumeNotFound 21
#DEFINE adFieldOutOfSpace 22
#DEFINE adFieldCannotDeleteSource 23
#DEFINE adFieldReadOnly 24
#DEFINE adFieldResourceOutOfScope 25
#DEFINE adFieldAlreadyExists 26
#DEFINE adFieldPendingInsert 65536
#DEFINE adFieldPendingDelete 131072
#DEFINE adFieldPendingChange 262144
#DEFINE adFieldPendingUnknown 524288
#DEFINE adFieldPendingUnknownDelete 1048576

*** Constant Group: SeekEnum
#DEFINE adSeekFirstEQ 1
#DEFINE adSeekLastEQ 2
#DEFINE adSeekAfterEQ 4
#DEFINE adSeekAfter 8
#DEFINE adSeekBeforeEQ 16
#DEFINE adSeekBefore 32

*** Constant Group: ADCPROP_UPDATECRITERIA_ENUM
#DEFINE adCriteriaKey 0
#DEFINE adCriteriaAllCols 1
#DEFINE adCriteriaUpdCols 2
#DEFINE adCriteriaTimeStamp 3

*** Constant Group: ADCPROP_ASYNCTHREADPRIORITY_ENUM
#DEFINE adPriorityLowest 1
#DEFINE adPriorityBelowNormal 2
#DEFINE adPriorityNormal 3
#DEFINE adPriorityAboveNormal 4
#DEFINE adPriorityHighest 5

*** Constant Group: ADCPROP_AUTORECALC_ENUM
#DEFINE adRecalcUpFront 0
#DEFINE adRecalcAlways 1

*** Constant Group: ADCPROP_UPDATERESYNC_ENUM
#DEFINE adResyncNone 0
#DEFINE adResyncAutoIncrement 1
#DEFINE adResyncConflicts 2
#DEFINE adResyncUpdates 4
#DEFINE adResyncInserts 8
#DEFINE adResyncAll 15

*** Constant Group: MoveRecordOptionsEnum
#DEFINE adMoveUnspecified -1
#DEFINE adMoveOverWrite 1
#DEFINE adMoveDontUpdateLinks 2
#DEFINE adMoveAllowEmulation 4

*** Constant Group: CopyRecordOptionsEnum
#DEFINE adCopyUnspecified -1
#DEFINE adCopyOverWrite 1
#DEFINE adCopyAllowEmulation 4
#DEFINE adCopyNonRecursive 2

*** Constant Group: StreamTypeEnum
#DEFINE adTypeBinary 1
#DEFINE adTypeText 2

*** Constant Group: LineSeparatorEnum
#DEFINE adLF 10
#DEFINE adCR 13
#DEFINE adCRLF -1

*** Constant Group: StreamOpenOptionsEnum
#DEFINE adOpenStreamUnspecified -1
#DEFINE adOpenStreamAsync 1
#DEFINE adOpenStreamFromRecord 4

*** Constant Group: StreamWriteEnum
#DEFINE adWriteChar 0
#DEFINE adWriteLine 1
#DEFINE stWriteChar 0
#DEFINE stWriteLine 1

*** Constant Group: SaveOptionsEnum
#DEFINE adSaveCreateNotExist 1
#DEFINE adSaveCreateOverWrite 2

*** Constant Group: FieldEnum
#DEFINE adDefaultStream -1
#DEFINE adRecordURL -2

*** Constant Group: StreamReadEnum
#DEFINE adReadAll -1
#DEFINE adReadLine -2

*** Constant Group: RecordTypeEnum
#DEFINE adSimpleRecord 0
#DEFINE adCollectionRecord 1
#DEFINE adStructDoc 2

*** Column Attributes
#DEFINE adColNullAble 2

*** Key Type Enum
#DEFINE adKeyPrimary  1
#DEFINE adKeyForeign  2
#DEFINE adKeyUnique   3

Jair Pinho
HMG ALTA REVOLUÇÃO xBASE
HMG xBASE REVOLUTION HIGH
http://www.hmgforum.com.br
GodkarPS
Posts: 40
Joined: Wed Nov 06, 2013 10:12 am
DBs Used: DBF
hmg with SQL SERVER
Location: INDIA
Contact:

Re: How HMG works with SQL server express ?

Post by GodkarPS »

Thanks Sir jairpinho. I will check.
GodkarPS
Posts: 40
Joined: Wed Nov 06, 2013 10:12 am
DBs Used: DBF
hmg with SQL SERVER
Location: INDIA
Contact:

Re: How HMG works with SQL server express ?

Post by GodkarPS »

I have tried but not work in Hmg.3.4.4 and higher, But code working in HMG.3.4.3
User avatar
jairpinho
Posts: 420
Joined: Mon Jul 18, 2011 5:36 pm
Location: Rio Grande do Sul - Brasil
Contact:

Re: How HMG works with SQL server express ?

Post by jairpinho »

GodkarPS wrote: Fri Jan 15, 2021 9:45 am I have tried but not work in Hmg.3.4.4 and higher, But code working in HMG.3.4.3
hello follows pss.ch file to add to your main project:

#INCLUDE <hmg.ch>
#INCLUDE <hbver.ch>
#INCLUDE <ord.ch>
#INCLUDE <pss.ch>


pss.ch
pss.zip
(4.71 KiB) Downloaded 131 times
Jair Pinho
HMG ALTA REVOLUÇÃO xBASE
HMG xBASE REVOLUTION HIGH
http://www.hmgforum.com.br
Post Reply