Page 35 of 70

Re: ADO RDD xHarbour

PostPosted: Sun May 10, 2015 9:41 am
by AHF
Lucas,

Ok I see it. Im using xHarbour Set 2008.

How can we call it correctly?

Re: ADO RDD xHarbour

PostPosted: Sun May 10, 2015 9:47 am
by AHF
Done!

Code: Select all  Expand view

oRecordSet:Fields( aWAData[WA_FIELDRECNO] ):Properties():Item("Optimize"):Value := 1
 

Re: ADO RDD xHarbour

PostPosted: Sun May 10, 2015 11:13 am
by lucasdebeltran
Antonio,

Dbcreate() should take the database from SET ADO DEFAULT DATABASE TO command, so only needs to indicate table name, as current dbcreate() from DBFCDX.

So, I would plan dbcreate() as follows.

To keep compatibility with DBFCDX, fist parameter should be table name.

Also, if you want, you can indicate separated by ; the rest of the parameters:

STATIC FUNCTION ADO_CREATE( nWA, aOpenInfo )

LOCAL aWAData := USRRDD_AREADATA( nWA )
LOCAL cTable := hb_tokenGet( aOpenInfo[ UR_OI_NAME ], 1, ";" )
LOCAL cDataBase := hb_tokenGet( aOpenInfo[ UR_OI_NAME ], 2, ";" )
LOCAL cDbEngine := hb_tokenGet( aOpenInfo[ UR_OI_NAME ], 3, ";" )
LOCAL cServer := hb_tokenGet( aOpenInfo[ UR_OI_NAME ], 4, ";" )
LOCAL cUserName := hb_tokenGet( aOpenInfo[ UR_OI_NAME ], 5, ";" )
LOCAL cPassword := hb_tokenGet( aOpenInfo[ UR_OI_NAME ], 6, ";" )


I discovered a new bug: creating an empty Access database and table, I can´t add records. I get MsgAlert() ADO ERROR UNKNOWN at function ADO_APPEND().

If I edit the Access and I add with Access a new record, I can APPEND new records with ADORDD.

Thank you.

Re: ADO RDD xHarbour

PostPosted: Sun May 10, 2015 2:01 pm
by Enrico Maria Giordano
Antonio,

AHF wrote:Im using xHarbour Set 2008.


A version 7 years old! Time to update! :-)

EMG

Re: ADO RDD xHarbour

PostPosted: Mon May 11, 2015 7:35 am
by AHF
lucasdebeltran wrote:Antonio,

Dbcreate() should take the database from SET ADO DEFAULT DATABASE TO command, so only needs to indicate table name, as current dbcreate() from DBFCDX.

So, I would plan dbcreate() as follows.

To keep compatibility with DBFCDX, fist parameter should be table name.

Also, if you want, you can indicate separated by ; the rest of the parameters:

STATIC FUNCTION ADO_CREATE( nWA, aOpenInfo )

LOCAL aWAData := USRRDD_AREADATA( nWA )
LOCAL cTable := hb_tokenGet( aOpenInfo[ UR_OI_NAME ], 1, ";" )
LOCAL cDataBase := hb_tokenGet( aOpenInfo[ UR_OI_NAME ], 2, ";" )
LOCAL cDbEngine := hb_tokenGet( aOpenInfo[ UR_OI_NAME ], 3, ";" )
LOCAL cServer := hb_tokenGet( aOpenInfo[ UR_OI_NAME ], 4, ";" )
LOCAL cUserName := hb_tokenGet( aOpenInfo[ UR_OI_NAME ], 5, ";" )
LOCAL cPassword := hb_tokenGet( aOpenInfo[ UR_OI_NAME ], 6, ";" )


I agree. Changes will be made in the next post.

I discovered a new bug: creating an empty Access database and table, I can´t add records. I get MsgAlert() ADO ERROR UNKNOWN at function ADO_APPEND().

If I edit the Access and I add with Access a new record, I can APPEND new records with ADORDD.


Sorry I know that's due to our trials in ADO_LOCK because of concurrent access control.
We must be sure that we have the recordset with most recent table information (new and deleted records included).

Thanks for your support

Re: ADO RDD xHarbour

PostPosted: Tue May 12, 2015 7:32 am
by AHF
Antonio,

First trials on real world went very well.
Trials will continue during this week.
Still didn't change one line of code in the app. :D

The only problem found its concerning performance of DBEVAL that translates to ADO_EVALBLOCK.
It takes an "eternity" to run. Something is wrong.

Code: Select all  Expand view

STATIC FUNCTION ADO_EVALBLOCK( nArea, bBlock, uResult )

   LOCAL nCurrArea

   
   nCurrArea := Select()
   IF nCurrArea != nArea
      dbSelectArea( nArea )
   ELSE
      nCurrArea := 0
   ENDIF
   
   IF PROCNAME(1) <> "ADO_RELEVAL"
      // DONT KNOW WHY BUT DBEVAL ONLY WORK LIKE THIS
     //uResult := Eval( bBlock )
     
      UR_SUPER_EVALBLOCK( nArea, bBlock, uResult )
   ELSE   
      uResult := Eval( bBlock )
   ENDIF
   
   IF nCurrArea > 0
      dbSelectArea( nCurrArea )
   ENDIF
   
   
   RETURN HB_SUCCESS
 


I m passing to UR_SUPER_EVALBLOCK otherwise I loose bBlock value.
How can I get the rest of the parameters of this function ?

[<bForCondition>] , ;
[<bWhileCondition>], ;
[<nNextRecords>] , ;
[<nRecord>] , ;
[<lRest>]

There must be a function call by UR_SUPER_EVALBLOCK where all parameters are saved.

Re: ADO RDD xHarbour

PostPosted: Tue May 12, 2015 8:53 am
by Enrico Maria Giordano
Antonio,

AHF wrote:First trials on real world went very well.
Trials will continue during this week.
Still didn't change one line of code in the app. :D


Can we use something like this?

Code: Select all  Expand view
INDEX ON MYFUNC1( myparams ) TO MYINDEX FOR MYFUNC2( myparams )


EMG

Re: ADO RDD xHarbour

PostPosted: Tue May 12, 2015 9:18 am
by AHF
Enrico Maria Giordano wrote:Antonio,

AHF wrote:First trials on real world went very well.
Trials will continue during this week.
Still didn't change one line of code in the app. :D


Can we use something like this?

Code: Select all  Expand view
INDEX ON MYFUNC1( myparams ) TO MYINDEX FOR MYFUNC2( myparams )


EMG


Enrico,

As long as its evaluated before send it to adordd I would say yes.

Ex.
Code: Select all  Expand view

     cexpress1 := "field1 <> space(10)"
     cexpress2 := "field2+field3 ='"+ (wcod)+"'"
     index on field2+field3+str(val(field4),4,0) to (temporario);
            while &(cexpress2) for &(cexpress1);
 


Please note that this is the only exception where you need to change code.
Check readme at github.
Fortunately the app we are adapting was working already with ADS thus this has already been done in the past.

Re: ADO RDD xHarbour

PostPosted: Tue May 12, 2015 9:22 am
by Enrico Maria Giordano
Antonio,

AHF wrote:As long as its evaluated before send it to adordd I would say yes.


No, they can't be evaluated in advance. So ADORDD is of no use for me. :-(

EMG

Re: ADO RDD xHarbour

PostPosted: Tue May 12, 2015 10:06 am
by AHF
Enrico,

I regret :(

Cant you work also with ADS?

Cant you somehow translated to a SQL SELECT ?

Re: ADO RDD xHarbour

PostPosted: Tue May 12, 2015 10:18 am
by Enrico Maria Giordano
Antonio,

No, to all your questions. :-(

EMG

Re: ADO RDD xHarbour

PostPosted: Tue May 12, 2015 10:58 am
by lucasdebeltran
Antonio,

Have you been able to fix the APPEND bug?.

Thank you.

Re: ADO RDD xHarbour

PostPosted: Tue May 12, 2015 11:01 am
by AHF
Lucas,

Yes.

Ill try to post new version during today.

Re: ADO RDD xHarbour

PostPosted: Tue May 12, 2015 11:38 am
by AHF
Enrico Maria Giordano wrote:Antonio,

No, to all your questions. :-(

EMG


Enrico,

Can it work like this?

index on &( MyFunc( myparams ) ) TO TEMP1 FOR &( MyFunc2( myparams ) )

Re: ADO RDD xHarbour

PostPosted: Tue May 12, 2015 11:43 am
by lucasdebeltran
Antonio,

Thank you. Please ensure it works fine by deleting previously the database, and next create the database and its tables.

Also, I guess LOCATE FOR now works as DBFCDX:

Code: Select all  Expand view
LOCATE FOR FIELD->NAME == "Lucas"


In addition, SET ADO LOCK CONTROL SHAREPATH TO should asume by default HB_DIRBASE(). If the programmer does want to change the path, so it should call this command.

About the indexes, are SET ADO TABLES INDEX LIST TO and SET ADODBF TABLES INDEX LIST TO are both required?.

Thank you.