Bound Access database update and fill problem

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • NormanB
    New Member
    • Feb 2011
    • 1

    Bound Access database update and fill problem

    I have a bound Access database which contains tables "Recipes", "Ingredient s" and "Units". A linked table "Recipe ingredients" holds id references to each of these tables.

    My problem occurs when importing a new recipe from a text file. I create the reipe first and call the adapter update for the recipes table and then refill it. Then I create an entry in the recipe_ingredie nts table which I also update and try to refill. However when I then call the recipe_ingredie ntsAdapter.Fill I get a "Object reference not set to an instance of an object" error which suggests a null value somewhere.

    I have checked that all the data is valid. Also if I use Access to open the modified database file after the updates it is perfectly happy - so is my own programme if I re-run it using the modified database.

    Any ideas where the error message may be coming from? Attached are code snippets from the relevant routines.

    Thanks

    Code:
        private int ImportRecipe(string rcp)
        {          
    
            {
            ....... Some text parsing of string rcp to extract the data values
                    and create an ArrayList (AllIngs) of Ingredient strings
            }
    
            // Create a new recipe row
            recipesDataSet.RecipesDataTable table = (recipesDataSet.RecipesDataTable)recipesDataSet.Tables["Recipes"];
            recipesDataSet.RecipesRow row = table.AddRecipesRow(title
                ,foodrow
                ,veggy
                ,Preptime
                ,nserve
                ,ncal
                ,nutrition
                ,instructions
                ,notes
                ,bookrow
                ,wheat
                ,dairy
                ,utensils
                ,page);
    
            recipesTableAdapter.Update(table);
            recipesTableAdapter.Fill(recipesDataSet.Recipes);
    
            // Now we have a new recipe id we can update other related table
            int newid = (int)table.Rows[table.Count - 1]["RecipeID"];
            UpdateRecipeIngredientsTable(ref AllIngs, newid);
            return newid;
        }
    
        private void UpdateRecipeIngredientsTable(ref ArrayList list, int recid)
        {
            recipesDataSet.Recipe_IngredientsDataTable table = (recipesDataSet.Recipe_IngredientsDataTable)recipesDataSet.Tables["Recipe Ingredients"];
            int id = 0;
            foreach (Ingredient ing in list) {
                recipesDataSet.Recipe_IngredientsRow drow = (recipesDataSet.Recipe_IngredientsRow)table.NewRow();
                drow["RecipeID"] = recid;
                drow["IngredientID"] = ing.ingID;
                drow["Quantity"] = ing.quantity.ToString();
                drow["UnitID"] = ing.unitID;
                drow["Order"] = ++id;
                table.AddRecipe_IngredientsRow(drow);
            }
            recipe_IngredientsTableAdapter.Update(table);
            try {
                recipe_IngredientsTableAdapter.Fill(recipesDataSet.Recipe_Ingredients);
            }
            catch (Exception ex) {
                MessageBox.Show(ex.Message);
            }
        }
Working...