With help I’ve created an address book type of application. The user inputs the information for the address book, adds it into the database, and displays it in the listbox. All is well. Now I want to have it so that the user can select the name they’ve put into the database from the listbox and click the Add Address button. This will prompt Window2 (AddAddyWindow) to open full of necessary address info (street, city, etc). Multiple addresses can be added for one person. The addresses will be displayed in the listbox2 (Supaddresslistbox) in Window1, below listbox1(suplistbox) containing the peoples’ names. So you can simply click the names in listbox1 and they display the addresses in listbox2, below.
Here’s my method. Create a database with two tables, Addressbook & SupAddresses. I put this code in the Open Event for Window1 and Window2, respectively. Have them both connected to the same database (C_S_DB). For some reason I can add information into the people database, but not the address database, which is attached to the people. I keep getting “Unable to prepare statement.”. Here’s some of the code with the actual file at the end.
I have somethings commented out because I’ve been doing a lot of trial and error from Window1’s code.
Window2 Open Event code:
[code] // SET THE PATH TO THE FOLDER WHICH WILL CONTAIN THE DATABASE FILE
fi = SpecialFolder.ApplicationData.Child(“Addressbook Data”)
// CHECK TO SEE IF THE FOLDER EXISTS - IF NOT - CREATE IT
If Not fi.Exists Then
fi.CreateAsFolder
End If
// SET THE NAME AND PATH OF THE ACTUAL DATABASE FILE
fi = fi.Child(“AddressBook Information.db”)
C_S_DB = New SQLiteDatabase
C_S_DB.DatabaseFile = fi
// IF THE DATABASE FILE DOES NOT EXIST - CREATE IT AND DEFINE THE SCHEMA
If Not fi.Exists Then
If C_S_DB.CreateDatabaseFile Then
C_S_DB.SQLExecute(“CREATE TABLE supaddresses(NRef INTEGER PRIMARY KEY, id TEXT, company TEXT)”)
// ERROR EXECUTING THE DATABASE SQL, SO DISPLAY AN ERROR MSGBOX
If C_S_DB.Error Then
MsgBox("Error: " + Str(C_S_DB.ErrorCode) + " - " + C_S_DB.ErrorMessage)
'Else
'// ALL OK - SO POPULATE THE LISTBOX
'PopulateSupAddy()
'End If
// DATABASE COULD NOT BE CREATED - DISPLAY ERROR MSGBOX, AND THEN QUIT
Else
MsgBox("The addressbook database could not be created. This application will now need to close.")
Quit
End If
'Else
''// THE DATABASE FILE ALREADY EXISTS, SO POPULATE THE LISTBOX
''PopulateSupAddy()
End If
End If
'// RETRIEVE THE DATA FROM THE DATABASE TO DISPLAY IN TEXT FIELDS
'If Window1.Suplistbox.ListIndex <> -1 Then
’
'If C_S_DB.connect Then
'Dim ps As SQLitePreparedStatement = C_S_DB.Prepare(“SELECT * FROM supaddresses WHERE street1 = ? AND street2 = ? AND city = ? AND state = ? AND country = ? AND postcode = ?”)
'ps.BindType(0, SQLitePreparedStatement.SQLITE_TEXT)
'ps.BindType(1, SQLitePreparedStatement.SQLITE_TEXT)
'ps.BindType(2, SQLitePreparedStatement.SQLITE_TEXT)
'ps.BindType(3, SQLitePreparedStatement.SQLITE_TEXT)
'ps.BindType(4, SQLitePreparedStatement.SQLITE_TEXT)
'ps.BindType(5, SQLitePreparedStatement.SQLITE_TEXT)
'ps.Bind(0, AddAddyWindow.streetfield1.Text)
'ps.Bind(1, AddAddyWindow.streetfield2.Text)
'ps.Bind(2, AddAddyWindow.cityfield.Text)
'ps.Bind(3, AddAddyWindow.countryfield.Text)
'ps.Bind(4, AddAddyWindow.postcodefield.Text)
'ps.Bind(5, AddAddyWindow.statebox.Text)
'ps.SQLExecute
'// DATABASE ERROR
'If C_S_DB.Error Then
'MsgBox("Error: " + Str(C_S_DB.ErrorCode) + " - " + C_S_DB.ErrorMessage)
’
'Else
'// NO MATCHING RECORDS FOUND, SO DISPLAY AN ERROR MSGBOX
'If rs.eof Then
'MsgBox “No data found.”
’
'Else
'// RECORDS FOUND, SO DISPLAY THEM
'streetfield1.Text = rs.field(“street1”).StringValue
'streetfield2.Text = rs.field(“street2”).StringValue
'cityfield.Text = rs.field(“city”).StringValue
'countryfield.Text = rs.field(“country”).StringValue
'postcodefield.Text = rs.field(“postcode”).StringValue
'statebox.Text = rs.field(“state”).StringValue
'End If
'End If
'End If
'End If
[/code]
Window2 AddButton Action event:
[code] // NAME FIELD OR EMAIL FIELD CONTAINS TEXT, SO CONTINUE
If streetfield1.Text <> ""OR streetfield2.Text <> “” OR cityfield.Text <> ""OR countryfield.Text <> “” OR postcodefield.Text <> “” OR statebox.Text <> “” Then
//CONNECT TO DATABASE AND INSERT THE NEW VALUES
If C_S_DB.connect Then
Dim ps As SQLitePreparedStatement = C_S_DB.Prepare("INSERT INTO supaddresses(street1, street2, city, country, postcode, state) VALUES (?,?,?);")
ps.BindType(0, SQLitePreparedStatement.SQLITE_TEXT)
ps.BindType(1, SQLitePreparedStatement.SQLITE_TEXT)
ps.BindType(2, SQLitePreparedStatement.SQLITE_TEXT)
ps.BindType(3, SQLitePreparedStatement.SQLITE_TEXT)
ps.BindType(4, SQLitePreparedStatement.SQLITE_TEXT)
ps.BindType(5, SQLitePreparedStatement.SQLITE_TEXT)
ps.Bind(0, AddAddyWindow.streetfield1.Text)
ps.Bind(1, AddAddyWindow.streetfield2.Text)
ps.Bind(2, AddAddyWindow.cityfield.Text)
ps.Bind(3, AddAddyWindow.countryfield.Text)
ps.Bind(4, AddAddyWindow.postcodefield.Text)
ps.Bind(5, AddAddyWindow.statebox.Text)
ps.SQLExecute
// DATABASE WRITE ERROR, SO DISPLAY THE ERROR MSGBOX
If C_S_DB.Error Then
MsgBox("Error: " + Str(C_S_DB.ErrorCode) + " - " + C_S_DB.ErrorMessage)
Return
'Else
'// POPULATE THE LISTBOX WITH THE NEW VALUES
'PopulateSupAddy()
'// EMPTY THE NAME, EMAIL AND SUPPLIER INFO TEXT FIELDS
'streetfield1.text = ""
'streetfield2.text = ""
'cityfield.text = ""
'countryfield.text = ""
'postcodefield.text = ""
'statebox.text = ""
End If
// ERROR CONNECTING TO DATABASE, SO DISPLAY THE ERROR MSGBOX
Else
MsgBox("Could not connect to the database - new values not saved!")
End If
End If
[/code]
PopulateSupAddy Method:
[code] If C_S_DB.Connect Then
// SET THE DEFAULT sql QUERY
sql = "SELECT NRef, id FROM supaddresses"
'// CHECK IF SearchField IS EMPTY - IF NOT - CHANGE THE sql QUERY
'If Window1.SupplierSearch.Text <> "" Then
'sql = sql + " WHERE LOWER(id) LIKE LOWER('%" + SQLify(Window1.SupplierSearch.Text) + "%')"+ " OR LOWER(company) LIKE LOWER('%" + SQLify(Window1.SupplierSearch.Text) + "%')"+ " OR LOWER(contactname) LIKE LOWER('%" + SQLify(Window1.SupplierSearch.Text) + "%')"+ " ORDER BY id"
'End If
// RETRIEVE THE RECORDSET RESULTS
rs = C_S_DB.SQLSelect(sql)
// IF RECORDSET RETURNS RESULTS - DELETE ALL ROWS AND REPOPULATE WITH THE RECORDSET RESULTS
If rs <> Nil Then
Window1.Supaddresslistbox.DeleteAllRows
While Not rs.EOF
Window1.Supaddresslistbox.AddRow(rs.Field("street1").StringValue)
Window1.Supaddresslistbox.Cell(Window1.Supaddresslistbox.LastIndex,1) = rs.Field("street2").StringValue
Window1.Supaddresslistbox.Cell(Window1.Supaddresslistbox.LastIndex,2) = rs.Field("city").StringValue
Window1.Supaddresslistbox.Cell(Window1.Supaddresslistbox.LastIndex,3) = rs.Field("state").StringValue
Window1.Supaddresslistbox.Cell(Window1.Supaddresslistbox.LastIndex,4) = rs.Field("country").StringValue
Window1.Supaddresslistbox.Cell(Window1.Supaddresslistbox.LastIndex,5) = rs.Field("postcode").StringValue
Window1.Supaddresslistbox.RowTag(Window1.Supaddresslistbox.LastIndex) = rs.Field("NRef").StringValue
rs.MoveNext
Wend
End If
Else
MsgBox(“Could not connect to the addressbook database”)
End If
[/code]
Here’s the file link.
Thanks in advance for any advice!