' Gambas module file ''' ' Name: ModuleDatabase ' Author: Timothy Marshal-Nichols ' eMail: timothy.marshal-nichols@ntlworld.com ' Version: 1.0 ' Version Date: April 2007 ' Version History: ' ''' ' Licence Information ' ' This program is free software; you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation; either version 2 of the License, or ' (at your option) any later version. ' ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY; without even the implied warranty of ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ' GNU General Public License for more details. ' ' You should have received a copy of the GNU General Public License ' along with this program; if not, write to the Free Software ' Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ' ' http://www.gnu.org/licenses/gpl.html ' ''' ' Description: ' ' Provides the interface to the pictures database. ' ''' ' Developed using Gambas2 Version ' ' Version: 1.9.48 ' ' Gambas Components Used: ' ' gb - Gambas internal native classes ' gb.db - Database access ' ' Look in the Project menu then Properties... and select ' the Components tab. Check that the listed components ' are in the project. ' ''' ' External Dependencies: ' ' The required type of database must exist. ' ''' ' Class Usage: ' ' Open the pictures database. If the database or table does not ' exist then they are created. ' ' Use somthing like this for a SQLite3 database ' ' ModuleDatabase.OpenDatabase("sqlite3", User.Home, Application.Name, "", "") ' ' Use somthing like this for a MySQL database ' ' ModuleDatabase.OpenDatabase("mysql", "localhost", Application.Name, "mysql", "password") ' ' Use somthing like this for a PostgreSQL database ' ' ModuleDatabase.OpenDatabase("postgresql", "localhost", Application.Name, "timothy", "password") ' ' Call the Select() method to update items and then use ResultPictures to access the data. ' ' ModuleDatabase.Select() ' ModuleDatabase.ResultPictures.MoveTo(Row) ' ' You can then use the Add(), Update() and Delete() methods to change the database. ' ' ModuleDatabase.Add(Path) ' ModuleDatabase.Update(Row, NewDescription) ' ModuleDatabase.Delete(Row) ' ' Call the CloseDatabase method before you quit your application ' ' ModuleDatabase.CloseDatabase() ' ''' Public Const ThumbSize As Integer = 36 Public ResultPictures As Result Private databaseConnection As New Connection Private tempFile As String Public Sub _init() tempFile = Temp() & ".png" End ' Opens the pictures database. If the database or table does not ' exist then they are created. Public Sub OpenDatabase(DBType As String, DBHost As String, DBName As String, UserName As String, UserPassword As String) Dim pictureTable As Table Dim errorMessageHeader As String ' If you wnat to see the commands sent to the ' database then uncommant this line ' DB.Debug = TRUE ' DBName = Lower(DBName) ' Open a connection (to the database server only) databaseConnection.Type = Lower(DBType) databaseConnection.Host = DBHost databaseConnection.Name = "" databaseConnection.Login = UserName databaseConnection.Password = UserPassword databaseConnection.Port = "" ' Open the connection Try databaseConnection.Open() If Error Then errorMessageHeader = "Could not open database connection " & DBHost Error.Raise(Error.Text) End If ' Check if the server connection has a database with the ' required database name. If Not databaseConnection.Databases.Exist(DBName) Then Print "Database not found. Creating new database" ' Create a new database databaseConnection.Databases.Add(DBName) ' I found I needed this with a SQLite database ' (but not with a MySQL database) Wait 0.5 End If ' Close the server connection databaseConnection.Close() ' Open a connection to the database databaseConnection.Host = DBHost databaseConnection.Name = DBName Try databaseConnection.Open() If Error Then errorMessageHeader = "Could not open database " & DBName & " on " & DBHost Error.Raise(Error.Text) End If ' Check if the database has a pictures table If Not databaseConnection.Tables.Exist("pictures") Then Print "Database tables not found. Creating new pictures table" ' Add a picture table to the database pictureTable = databaseConnection.Tables.Add("pictures") pictureTable.Fields.Add("id", db.Serial) ' id field as autoinc integer pictureTable.Fields.Add("thumb", db.Blob) ' thumb field as blob pictureTable.Fields.Add("image", db.Blob) ' ' image field as blob pictureTable.Fields.Add("description", db.String, 0) ' description field as unlimited string pictureTable.PrimaryKey = ["id"] pictureTable.Update() End If Catch If errorMessageHeader = "" Then errorMessageHeader = "Database connection error: " & DBName & " on " & DBHost End If Error.Raise("" & errorMessageHeader & "