Ahh, I see the problem. Change this line of code in your application:
DBBindColChar (stmt, 2, 256, data, &status, "");
to
DBBindColChar (stmt, 1, 256, data, &status, "");
The reason you set the column number to 1 instead of 2 is that if you recall, you actually bind columns of the returned recordset, not the actual table. So, when you call DBActivateSQL with the query "SELECT LOCATION FROM SHOPPINGLIST", you are getting back a recordset of 1 column (LOCATION), and X rows. This means that you can only bind 1 column, which will be indexed as column 1 of the recordset. If you changed your query to be "SELECT * FROM SHOPPINGLIST", then you are returning a recordset of all columns in the table (ITEM, LOCATION, and STORAGE) and X rows. Then, you can bind column 2 (LOCATION) and essentially get the same as above. Hope this helps!!
Jeremy L.
National Instruments