Method not working while pasted code does

  1. 2 weeks ago

    I am on my first day with Xojo and so far it has been very intuitive. However, I have a problem I cannot figure out. For my first program I am making an address book that writes text fields and popups (eg a list of states AL, AK, CA, etc) to a mySQL community server on another PC.

    I have window with the fields and such and an add button with a click event that writes the text field contents to the database. If I have the database connection code in the click event and properties set to private under that window (per the tutorials), it works fine. BUT

    If I create a method with that connection code and then just call the method from the click event, the method executes, but any references to my database "db" returns nilobjectexceptions as if there is nothing "in" the db object (even if I change properties to public). To make sure the method runs, I added a message box at the end of the method that just says method executed. And that works, so the click event is running the method, but my db object is "nothing".

    I have tried all the obvious stuff I could find. I tried putting the method and properties under App, making them public, made sure to refer to it as App.db.DatabaseName etc, same nilobjectexception problem. I also tried putting the method and properties in a global module and still nilobjectexceptions.

    After reading the tutorials, it seems to me this should be working.

    Here is what is in my Connectdb method

    --------
    Dim db As New MySQLCommunityServer
    db.Host = "server ip"
    db.Port = 3306
    db.Databasename = "the name the database"
    db.UserName = "username"
    db.Password = "a really nice password"

    If db.Connect Then
    IsConnected = True
    MsgBox("Method Executed")
    Else
    MsgBox("Database connection error. ") + db.ErrorMessage
    End If

    -------

    For the properties

    db As MySQLCommunityServer
    IsConnected As Boolean

    To make an easy test, in the click event I run the Connectdb method and then try to display the database name. Should be simple, right?

    Connectdb
    MsgBox(db.DatabaseName)

    This throws the nilobjectexception, but before throwing that exception I do get the "Method Executed" message box.

    If I stick the actual method code in place of Connectdb it works fine.

    Left scratching my head wondering what stupid thing am I doing wrong.

    @ChristopherOliphant Dim db As New MySQLCommunityServer

    @ChristopherOliphant For the properties
    db As MySQLCommunityServer

    These are 2 separate and distinct variables. The first is local to the method and is destroyed later. The second is more global and what you are expecting to use in the rest of your code. Simply remove the Dim statement in your Connectdb method so it uses the global property instead.

    Actually change it to

    db = New MySQLCommunityServer

    as you will need to create the object before you use it.

  2. Dave S

    Dec 1 San Diego, California USA

    you have TWO instances of DB... one that is being connected to then destroyed (when the method goes out of scope) and the other that is never connected to (or so it seems)

    FYI... in the future.. .enclose you code snipped using the code tags and replace square brackets with angles

  3. Tim H

    Dec 1 Pre-Release Testers Answer Portland, OR USA
    Edited 2 weeks ago

    @ChristopherOliphant Dim db As New MySQLCommunityServer

    @ChristopherOliphant For the properties
    db As MySQLCommunityServer

    These are 2 separate and distinct variables. The first is local to the method and is destroyed later. The second is more global and what you are expecting to use in the rest of your code. Simply remove the Dim statement in your Connectdb method so it uses the global property instead.

    Actually change it to

    db = New MySQLCommunityServer

    as you will need to create the object before you use it.

or Sign Up to reply!