[Gambas-user] MoveFirst MoveNext etc

Benoît Minisini gambas at ...1...
Thu Apr 9 22:40:18 CEST 2009


> 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




More information about the User mailing list