ADO RDD xHarbour

AHF
Posts: 837
Joined: Fri Feb 10, 2006 12:14 pm

Re: ADO RDD xHarbour

Post by AHF »

Gunther,

Great! Im glad to know :D
A practice suggestion:
In ADOPREOPENTHRESHOLD() not only the size in records should work as a filter. Also a substring (or a array with substrings) of the tablename are interesting for filtering the DBs for pre-open! (ex. only "2015" -> DB2015 and Faw2015gt and Klima2015 and ......)
Note taken Ill see what can be done.

Could you share your experience ?

Time of conversion of the app
Any app code changed ? Why?

Db engine used
Database size
Average table size (nr of rows)
Biggest table size (nr of rows)
Lan and / or Wan
Nr of users
Concurrent use (new additions by others) and locking

Does app use ?
Relations
Scopes
Filters
Indexes with UDFs
Locks
Transactions

do you use ado or sql directly through for example adofuncs.prg or any class and does adordd catch well eventually new additions by those processes?

Overall performance compared to others rdds 1 to 5 (1 being the slowest)

Is it in production?

Thanks
Regards
Antonio H Ferreira
User avatar
byte-one
Posts: 1048
Joined: Mon Oct 24, 2005 9:54 am
Location: Austria
Contact:

Re: ADO RDD xHarbour

Post by byte-one »

Antonio, before i test my app with ca. 60 DBs with your ADORDD i must change some field-names (ex. CHECK or SCHEMA) as they are not allowed in SQL.
I use MSSQL. In my tests indices with UDFs should be avoided (>1000 records). The fastest way is to use only full fieldnames for indexkey. There are some DB-changes recommendable.
For future i will report you all my experiences!
Regards,
Günther
---------------------------------
office@byte-one.com
AHF
Posts: 837
Joined: Fri Feb 10, 2006 12:14 pm

Re: ADO RDD xHarbour

Post by AHF »

Gunther,

The tests Ive made with Mysql and reserved keywords as field name its working ok.

You cant use those keywords in triggers, procedures functions etc but should be ok as field names as they are special quoted in all expressions.

Please try it because I think you dont need to do anything.
I use MSSQL. In my tests indices with UDFs should be avoided (>1000 records)
I tried it in Mysql with 1000 and its slower but still ok.

Can you post some examples of such UDFs?
For future i will report you all my experiences!
Thanks.
Regards
Antonio H Ferreira
User avatar
byte-one
Posts: 1048
Joined: Mon Oct 24, 2005 9:54 am
Location: Austria
Contact:

Re: ADO RDD xHarbour

Post by byte-one »

MSSQL-Server native errors 102 or 156: Incorrect syntax near the keyword 'BIT', Incorrect syntax near the keyword 'SCHEMA'. I use SCHEMA and CHECK as fieldnames -> not allowed!
Regards,
Günther
---------------------------------
office@byte-one.com
AHF
Posts: 837
Joined: Fri Feb 10, 2006 12:14 pm

Re: ADO RDD xHarbour

Post by AHF »

Gunther,

I forgot to have it done to MSSQL.

Place this line in ADOQUOTEDCOLSQL in CASE dbEngine = "MSSQL"

cCol := "`" + cCol + "`"

if it doesnt work try

cCol := '[' + cCol + ']'

Should work now.
Regards
Antonio H Ferreira
User avatar
byte-one
Posts: 1048
Joined: Mon Oct 24, 2005 9:54 am
Location: Austria
Contact:

Re: ADO RDD xHarbour

Post by byte-one »

OK now []! Thanks.
Regards,
Günther
---------------------------------
office@byte-one.com
User avatar
byte-one
Posts: 1048
Joined: Mon Oct 24, 2005 9:54 am
Location: Austria
Contact:

Re: ADO RDD xHarbour

Post by byte-one »

Antonio, I found, that when the eof() reached no further operations in this table are possible! I must use GO TOP in this case and then the table is reachable again!
(MSSQL)
Regards,
Günther
---------------------------------
office@byte-one.com
AHF
Posts: 837
Joined: Fri Feb 10, 2006 12:14 pm

Re: ADO RDD xHarbour

Post by AHF »

Gunther,

Im not using MSSQL Im using MySql and its ok.

Can you post code example ?
Regards
Antonio H Ferreira
User avatar
byte-one
Posts: 1048
Joined: Mon Oct 24, 2005 9:54 am
Location: Austria
Contact:

Re: ADO RDD xHarbour

Post by byte-one »

After

Code: Select all

dbgoto(lastrec()+1))
is no dbseek() possible (records to found are present)! Or after a dbseek() with no result another dbseek() are not possible.
If the searched value is not found, DbSeek() positions the record pointer on the "ghost record" (Lastrec()+1) by default, and the function Found() returns .F. (false), while Eof() returns .T. (true).
I think this "ghost record" is the reason!?
Regards,
Günther
---------------------------------
office@byte-one.com
AHF
Posts: 837
Joined: Fri Feb 10, 2006 12:14 pm

Re: ADO RDD xHarbour

Post by AHF »

Gunther,

Here its ok.
My test:

Code: Select all

use table
set index to someindex
dbgoto(lastrec()+1) //record not found goes eof
seek "      1/99" //if recordset not empty goes first and find OK
browse()  
dbgobottom()
skip 1
msginfo(cvaltochar(eof())+" "+cvaltochar(recno()) )
skip -1
msginfo(cvaltochar(eof())+" "+cvaltochar(recno()) )
skip -1
msginfo(cvaltochar(eof())+" "+cvaltochar(recno()) )
 
Do you have any scopes and/or filters?
Regards
Antonio H Ferreira
AHF
Posts: 837
Joined: Fri Feb 10, 2006 12:14 pm

Re: ADO RDD xHarbour

Post by AHF »

Gunther,

The SELECT used in adoreccount if im not mistaken supplied by you its the only difference between MySql and MsSQL.

Try to change ti to SELECT MAX(... and check results.
Regards
Antonio H Ferreira
User avatar
byte-one
Posts: 1048
Joined: Mon Oct 24, 2005 9:54 am
Location: Austria
Contact:

Re: ADO RDD xHarbour

Post by byte-one »

Now i found out:
If i use TESTADISC->(dbsetorder(1)) and the indexkey of this order is UDF then the seek is not functioning! If i use after dbsetorder() a GO TOP then is functioning!

Code: Select all

SET ADODBF TABLES INDEX LIST TO { {"AW2015",{"REV",'REV2TO2(REDATUM)'},{"RR","bu_korrindex(redatum,ideingdat)"},{"EW",'REV2TO2(REDATUM)'} } }
SET ADO INDEX UDFS TO {"IF","&","SUBSTR","SUBS","==","REV2TO2","REVEING","BU_KORRINDEX"}

TESTADISC->(dbgoto(TESTADISC->(lastrec()+1)))    //damit keine anzeige
TESTADISC->(dbsetorder(1))
//  GO TOP
TESTADISC->(dbseek("0227"))
 Browse()
Regards,
Günther
---------------------------------
office@byte-one.com
AHF
Posts: 837
Joined: Fri Feb 10, 2006 12:14 pm

Re: ADO RDD xHarbour

Post by AHF »

Gunther,

Is this still true if you comment

Code: Select all

TESTADISC->(dbgoto(TESTADISC->(lastrec()+1)))    //damit keine anzeige
?
Regards
Antonio H Ferreira
AHF
Posts: 837
Joined: Fri Feb 10, 2006 12:14 pm

Re: ADO RDD xHarbour

Post by AHF »

Gunther,

I think Ive got it.

Change the line in ado_seek.

Code: Select all

  ELSE //WITH :FILTER OR MOE THAN ONE FIELD
      IF !EMPTY( oRecordSet:Filter )
         IF lSoftSeek
            nPos := ASCAN( aWAData[ WA_ABOOKMARKS ][aWAData[WA_INDEXACTIVE]],;
                     {|x|  IF( VALTYPE( x[ 2 ] )= "C",SUBSTR( x[ 2 ], 1, LEN( cKey ) ) = cKey ,;
                                x[ 2 ] = cKey   )} )

            IF nPos = 0 // oRs:Eof() //!lFindLast     <========
 
Is it working ?
Regards
Antonio H Ferreira
User avatar
byte-one
Posts: 1048
Joined: Mon Oct 24, 2005 9:54 am
Location: Austria
Contact:

Re: ADO RDD xHarbour

Post by byte-one »

Antonio, no working! This is only for softseek!?
Regards,
Günther
---------------------------------
office@byte-one.com
Post Reply