Re: [Gambas-user] MoveFirst MoveNext etc

2009-04-09 Thread Ron_1st
On Thursday 09 April 2009, Jeff wrote:
 What is the thinking behind a Result.MoveFirst() and MoveNext()
 returning a false if a record is there?
 
 So, to read round a result set I end up using a Boolean with a double
 negative:
 
 noMoreRows = myResult.MoveFirst()
 WHILE NOT noMoreRows
   PRINT myResult!id
   noMoreRows = myResult.MoveNext()
 WEND 
 
 I would have expected the MoveFirst() and MoveNext() return true if a
 record found, so I'm wondering why it's that way round.
 Or, is there a better loop structure to use so that it reads better?
 
 

The only logic I see is the way it is done in C/C++

If result returned is 0 means OK else the value other then
0 means the error code for the occured error.
-1 means i.e. syntax
-2 means i.e. invalid something

In C/C++ the IF THEN use a value instead the Basic boolean True/False
Symbolic 0 equals to False, other value to True 

Just in good old practice for Basic a question in IF ... THEN 
was/is always true.
So your way the next code is right
  IF myResults.MoveNext() then
' ok the movenext was OK
  ELSE
' oops a error
  ENDIF

For gambas in relation to the MoveXXX() this is reversed by Benoit.
It means with false ( equals to 0) there was no error

  IF myResults.MoveNext() then 
' returned not 0 (zero) 
' oops a error
  ELSE
' ok the movenext was OK
' return was 0 (zero)
  ENDIF

So you can use: 

Const NOERROR as boolean=false

  IF myResults.MoveNext() = NOERROR THEN 
' ok the movenext was OK
' return was 0 (zero)
  ENDIF

  

Personal I do not like the Gambas way, IMHO the myReult.MoveNext() 
should return TRUE if succes and FALSE when error occured.

I use now the method with NOERRO to get a clean Basic readable code.
NOERROR makes more sence then False here.


Best regards,

Ron_1st


--
This SF.net email is sponsored by:
High Quality Requirements in a Collaborative Environment.
Download a free trial of Rational Requirements Composer Now!
http://p.sf.net/sfu/www-ibm-com
___
Gambas-user mailing list
Gambas-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gambas-user


Re: [Gambas-user] MoveFirst MoveNext etc

2009-04-09 Thread Doriano Blengino
Ron_1st ha scritto:
 On Thursday 09 April 2009, Jeff wrote:
   
 What is the thinking behind a Result.MoveFirst() and MoveNext()
 returning a false if a record is there?

 So, to read round a result set I end up using a Boolean with a double
 negative:

 noMoreRows = myResult.MoveFirst()
 WHILE NOT noMoreRows
   PRINT myResult!id
   noMoreRows = myResult.MoveNext()
 WEND 

 I would have expected the MoveFirst() and MoveNext() return true if a
 record found, so I'm wondering why it's that way round.
 Or, is there a better loop structure to use so that it reads better?


 

 The only logic I see is the way it is done in C/C++
   
I think it could be pretty the same, but I like it this way; I think 
that the normal flow of code is when normal things happen, and when 
something exceptional happens, branches are taken. So, the code above 
could be written:

if myResult.MoveFirst() then
  print No records
  return
endif

repeat
  print myresult!id
until myresult.MoveNext()

...no NOT used. I agree that if MoveNext() could signify if 
MoveNext succeeded, but if the functions worked this way, one should write:

if not movefirst then
  ...
endif

print myresult.id
while movenext
  printd ...!id
wend

or, even worse,

if movefirst then
  print ..!id
  while ...
  wend
else
  print no records
endif

It is a matter of taste.

Regards,

-- 
Doriano Blengino

Listen twice before you speak.
This is why we have two ears, but only one mouth.


--
This SF.net email is sponsored by:
High Quality Requirements in a Collaborative Environment.
Download a free trial of Rational Requirements Composer Now!
http://p.sf.net/sfu/www-ibm-com
___
Gambas-user mailing list
Gambas-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gambas-user


Re: [Gambas-user] MoveFirst MoveNext etc

2009-04-09 Thread Benoît Minisini
 On Thursday 09 April 2009, Jeff wrote:
  What is the thinking behind a Result.MoveFirst() and MoveNext()
  returning a false if a record is there?
 
  So, to read round a result set I end up using a Boolean with a double
  negative:
 
  noMoreRows = myResult.MoveFirst()
  WHILE NOT noMoreRows
PRINT myResult!id
noMoreRows = myResult.MoveNext()
  WEND
 
  I would have expected the MoveFirst() and MoveNext() return true if a
  record found, so I'm wondering why it's that way round.
  Or, is there a better loop structure to use so that it reads better?

 The only logic I see is the way it is done in C/C++

 If result returned is 0 means OK else the value other then
 0 means the error code for the occured error.
 -1 means i.e. syntax
 -2 means i.e. invalid something

 In C/C++ the IF THEN use a value instead the Basic boolean True/False
 Symbolic 0 equals to False, other value to True

 Just in good old practice for Basic a question in IF ... THEN
 was/is always true.
 So your way the next code is right
   IF myResults.MoveNext() then
 ' ok the movenext was OK
   ELSE
 ' oops a error
   ENDIF

 For gambas in relation to the MoveXXX() this is reversed by Benoit.
 It means with false ( equals to 0) there was no error

   IF myResults.MoveNext() then
 ' returned not 0 (zero)
 ' oops a error
   ELSE
 ' ok the movenext was OK
 ' return was 0 (zero)
   ENDIF

 So you can use:

 Const NOERROR as boolean=false

   IF myResults.MoveNext() = NOERROR THEN
 ' ok the movenext was OK
 ' return was 0 (zero)
   ENDIF



 Personal I do not like the Gambas way, IMHO the myReult.MoveNext()
 should return TRUE if succes and FALSE when error occured.

 I use now the method with NOERRO to get a clean Basic readable code.
 NOERROR makes more sence then False here.


 Best regards,

 Ron_1st


Usually, languages and libraries use TRUE to mean success and FALSE to mean 
error.

But during the long years now I have written programs :-) I found that we most 
often test for errors than success. So using TRUE for errors leads to less 
lines of code.

It is just a matter of habit. And changing habits is a good thing, it keeps 
you young. :-)

You can write your loop this way:

MyResult.MoveFirst()
WHILE MyResult.Available
  ...
  myResult.MoveNext()
WEND

Regards,

-- 
Benoît

--
This SF.net email is sponsored by:
High Quality Requirements in a Collaborative Environment.
Download a free trial of Rational Requirements Composer Now!
http://p.sf.net/sfu/www-ibm-com
___
Gambas-user mailing list
Gambas-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gambas-user


Re: [Gambas-user] MoveFirst MoveNext etc

2009-04-09 Thread Jeff

 But during the long years now I have written programs :-) I found that we 
 most 
 often test for errors than success. So using TRUE for errors leads to less 
 lines of code.
 
 It is just a matter of habit. And changing habits is a good thing, it keeps 
 you young. :-)
 

I need something to keep me young :-)

 You can write your loop this way:
 
 MyResult.MoveFirst()
 WHILE MyResult.Available
   ...
   myResult.MoveNext()
 WEND
 
Aaaahh - the available property. Yes that's what I was looking for.
Obvious now. Thanks.


--
This SF.net email is sponsored by:
High Quality Requirements in a Collaborative Environment.
Download a free trial of Rational Requirements Composer Now!
http://p.sf.net/sfu/www-ibm-com
___
Gambas-user mailing list
Gambas-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gambas-user