Looking for a database program to record information about a collection (i.e. hobby)

I used to work with databases quite a bit before I retired, so I understand the basics of data relationships and report writing. My collection, if it matters, is fountain pens. I am certainly willing to pay for the right program, but I am not a business so I don’t need something industrial strength.

My functional priorities are:

  • Easy to learn/easy to use/adequate documentation available
  • Either fully relational, or has the ability to create drop-down lists and other choice options within the data entry form(s)
  • Customizable reporting
  • Must support photo fields
  • Some order entry coding possibility would be nice to have, i.e. automated steps, basing one field on another field, etc.

I have tried two so far, and neither is what I really want. Ragic is free and online, but it is too limited, and there is very little customization possible, especially in reports. For example, I can sort the records, but I can’t select a subset of records based on field contents. I have also tried LibreOffice Base, but it is difficult to learn and there is very little up-to-date documentation available. I’m not sure if it can do what I want, and I have had some discouraging peculiarities show up so far.

Standalone program or online program is fine, I don’t need a whole office suite (but if that’s the only way to get it, okay). Also, once I get the database framework developed, I would like to be able to offer it, without data, to other collectors in the same hobby, for them to use without buying the actual software. I’m not sure what that entails, I’ve never done that before, so it’s not a deal-breaker if it can’t be done.

Why not MySQL? It’s free, easy to use, a zillion front ends and tools are available, and you can redeploy it as an app if you want to sell your database.

Thank you for the suggestion. Can you recommend a front end or two?

Front end for what? Development? End user interface?

Development in MySQL can be done with almost anything. It comes with a bunch of tools and editors, as I recall. You can work with it with most any IDE, or just access it programmatically from anything that can include the mySQL libraries. It’s been a few years since I used it, but it was pretty simple then.

What’s your skill level? Have you worked with databases from a programming level? Can you construct an SQL query? Write simple code? Web dev?

My skill level is faded somewhat from before I retired. I believe I could, with some refreshing, recall what I knew about constructing an SQL query, and writing simple code. I have no experience with web development, but as far as I know that is not part of what I want to do.

Airtable is nice, not sure if it would accomplish your last goal of being able to offer it to others though.

Back in my working days, we used Excel as a front end for some of our MySQL databases. I believe there was a ‘hook’ you needed to install in Excel, but it worked pretty well.

On first examination, this looks quite expensive, and I don’t understand all the acronyms to be able to tell what I should be looking for. Is there an “amateur” version? Or a cheap clone? I seem to remember something of the kind, but it’s been too long.

eta: never mind, I found the Community edition.

…consider Notion or Coda.

Just beware that they are “fully relational” in only an abstract sense. They have a primary key but they are hidden, so you end up having to rely on table names to relate them to each other, and this can dodgy if you are using lots of tables. I found it frustrating until I developed a workflow that ultimately worked for me. Coda probably is the better database IMHO but the free plan is limited, however I personally use Notion as I’ve set things up to be more like a wiki than an actual database.

If you’ve got the budget, then a single-licence version of FileMaker. That would be perfect for what you want to do, but it isn’t cheap.

They are looking at creating a “freemium” version soon, though. You might want to hold out for that to see what it can do.

https://content.claris.com/claris-freemium-signup-reg-website?utm_source=www&utm_medium=referral&utm_content=freemium&utm_campaign=Awareness%257CClaris%2520Platform%2520Trial%2520Sign-up%257Cclaris%257CX%257CX%257CWebsite%257CFree%2520Trial%257CInbound%257C20221026

It is unclear as to exactly what you are going to do with this database but if you are planning to make it available to other collectors the obvious and easy way to do that is with a web toolkit and interface where people can create their own databases either on a hosted server or locally hosted. @Sam_Stone is correct that for general relational databases MySQL is the default standard and there are hundreds if not thousands of interface toolkits for it that don’t require that you have a detailed understanding of SQL queries. Anything other than MySQL, i.e. some kind of proprietary database, is generally going to cost money or have deficient documentation.

If what you are looking for is just an inventory system, using Excel with PivotTables probably meets al of your needs other than “photo fields” (and you can insert or link to image files but…you shouldn’t). If you need more, I think you need to clarify what it is you are going to be doing with the system.

Stranger

I’m don’t know about the photo field, but otherwise Microsoft Access meets all your criteria. Extensive documentation, easy to learn (& lots of tutorials available), good interface, easy to customize (including coding if you want to go that far), robust, etc. Unless your collection includes many thousands of pens, it will do everything you need.

Yeah, I was about to say (O great and terrible IT Gods, forgive me!) that Access sounds about perfect for what he’s looking to do.

Photos are generally extremely terrible to store in a database; you’re better off with a URL or something like that to the photo itself, which would be stored on a hard drive or somewhere else. Otherwise you’re just blowing up the size of the database with data that can’t be queried or related, and is better off on regular storage.

But in general Access does everything else you’re looking for. The only question I’d have is the number of records you’re looking at having. That might have a bearing on what you end up getting.

Also, Access is extremely common- it’s most likely the easiest one to distribute to other hobbyists.

(in other news, I got myself a new Pilot Metropolitan yesterday, to go with my Jinhao x750 and my old-ass Parker 88 in Gray Laque)

Have heard of, or tried, Fountain Pen Companion?

I found it through Organizing A Pen Collection: Pulling It All Together

BTW, You might want to check out ChatGPT for help with all this. it’s pretty good at writing simple code like SQl queries or front ends.

For example, I just asked it this:

“Can you write a java program that connects to a mySQL instance called “penbase”, and creates a table with rows that include the pen name, color, age, price, and pen type from an enumerated list containing “Fountain”, “ballpoint”, and “pencil”. I want the table created if it does 't already exist.”

ChatGPT responded with, “Sure! Here you go” Then gave me this code:

import java.sql.*;

public class CreateTable {
  static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
  static final String DB_URL = "jdbc:mysql://localhost/penbase";

  static final String USER = "username";
  static final String PASS = "password";

  public static void main(String[] args) {
    Connection conn = null;
    Statement stmt = null;
    try {
      // Register JDBC driver
      Class.forName(JDBC_DRIVER);

      // Open a connection
      System.out.println("Connecting to database...");
      conn = DriverManager.getConnection(DB_URL, USER, PASS);

      // Execute a query to create table
      System.out.println("Creating table in given database...");
      stmt = conn.createStatement();

      String sql = "CREATE TABLE IF NOT EXISTS Pens " +
                   "(name VARCHAR(255), " +
                   " color VARCHAR(255), " +
                   " age INTEGER, " +
                   " price DECIMAL, " +
                   " type ENUM('Fountain', 'ballpoint', 'pencil'))";

      stmt.executeUpdate(sql);
      System.out.println("Created table in given database...");

      // Clean-up environment
      stmt.close();
      conn.close();
    } catch(SQLException se) {
      // Handle errors for JDBC
      se.printStackTrace();
    } catch(Exception e) {
      // Handle errors for Class.forName
      e.printStackTrace();
    } finally {
      // finally block used to close resources
      try {
        if(stmt!=null) stmt.close();
      } catch(SQLException se2) {
      } // nothing we can do
      try {
        if(conn!=null) conn.close();
      } catch(SQLException se) {
        se.printStackTrace();
      } // end finally try
    } // end try
    System.out.println("Goodbye!");
  }
}

I could then ask it to make another froht end for end users that allows them to query the database by whatever, add pens, delete pens, view pens, etc. It will also create an app front end using React or any other web front end tool you like, or build the code for a standalone app. It’ll probably write the install scripts for you too.

Oh, I forgot you wanted an image field. Since ChatGPT remembers the context of our conversation, I just asked it, “Oh, I forgot I need an image field for storing a picture of the pen. can you add that?” And it did.

import java.sql.*;

public class CreateTable {
  static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
  static final String DB_URL = "jdbc:mysql://localhost/penbase";

  static final String USER = "username";
  static final String PASS = "password";

  public static void main(String[] args) {
    Connection conn = null;
    Statement stmt = null;
    try {
      // Register JDBC driver
      Class.forName(JDBC_DRIVER);

      // Open a connection
      System.out.println("Connecting to database...");
      conn = DriverManager.getConnection(DB_URL, USER, PASS);

      // Execute a query to create table
      System.out.println("Creating table in given database...");
      stmt = conn.createStatement();

      String sql = "CREATE TABLE IF NOT EXISTS Pens " +
                   "(name VARCHAR(255), " +
                   " color VARCHAR(255), " +
                   " age INTEGER, " +
                   " price DECIMAL, " +
                   " type ENUM('Fountain', 'ballpoint', 'pencil'), " +
                   " image BLOB)";

      stmt.executeUpdate(sql);
      System.out.println("Created table in given database...");

      // Clean-up environment
      stmt.close();
      conn.close();
    } catch(SQLException se) {
      // Handle errors for JDBC
      se.printStackTrace();
    } catch(Exception e) {
      // Handle errors for Class.forName
      e.printStackTrace();
    } finally {
      // finally block used to close resources
      try {
        if(stmt!=null) stmt.close();
      } catch(SQLException se2) {
      } // nothing we can do
      try {
        if(conn!=null) conn.close();
      } catch(SQLException se) {
        se.printStackTrace();
      } // end finally try
    } // end try
    System.out.println("Goodbye!");
  }
}

You could try asking it for front ends, or even ask it for advice on how to build an app you can distribute.

For all of us ancient code writers that were proficient in C or another high-level language, this tool just isn’t fair!

I remember saying, probably back in the 80s or so, that programming was one job that would never be replaced by software, because specifying a task clearly enough for a program to write code for it would just be writing code in another language. Apparently I was wrong.

For yucks I wondered how ChatGPT would answer a question about this. So I asked it:

“I want to make an app to store pens for hobbyists, and I want to distribute it as a standalone install. What would you recommend?”

ChatGPT:

I have never used JavaFX, somI asked about it:

ChatGPT:

Me: “Is it free?”
ChatGPT:

So that sounds promising. I’ll bet it will also help build the front end for you if you spec it out, and help you get it installed and built.

No kidding! Also, for people like me who have worked with so many technologies and languages that I can’t always remember exact syntax for something I haven’t used in a while, this is a huge time saver. It’s going to wildly accelerate programming, especially for junior programmers.

Yeah. Notice how much I left out of my description, typos in the description, ambiguous phrasing around the enumeration, and I didn’t give it a table name. It still did everything right, and decided to use ‘Pens’ as a table name.

We are living in the future. Programmers who don’t use ChatGPT to set up mundane but tedioys stuff will be left behind.

You can get older versions on ebay cheaply though. And any version past version 8 willl be more than enough tool for everyday use and it’s almost ridiculously easy to do things that would eat your entire day trying to implement in Access.

…huh. Never realized that you could resell the old licence. I don’t use Ebay here in NZ (nobody here really does) , how reputable are those sellers?

I’ve got Filemaker 15 which is all I probably ever will need, however I always wished I had waited a few months and gotten Filemaker 16 which added Cards, which was a feature I had been waiting on but just missed out on :frowning: