2015-09-15 3 views
0

Я недавно начал возвращаться к программированию базы данных в vb, и я использую базу данных Northwind для тестирования.Идентификационный номер продукта при добавлении продолжает меняться при перезагрузке формы

В моей программе я добавляю, редактирую и удаляю функциональность для Продуктов. Когда я добавляю новый продукт в таблицу с помощью Windows Forms, идентификатор продукта увеличивается (если последний идентификатор продукта равен 70, новому продукту будет 71), а затем я обновляю базу данных.

Однако проблема заключается в том, что когда я снова отлаживаю свою форму и перехожу к последнему продукту, который я только что ввел, идентификатор изменился с 71 до 84, и я не уверен, почему он это сделал. Вот код, который я для функции добавления, если вам нужен, чтобы увидеть другие части моего кода, то дайте мне знать, и спасибо за помощь :)

Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click 

    newProduct = NorthwindDataSet1.Products.NewProductsRow() 
    newProduct("ProductName") = txtProdName.Text 
    newProduct("UnitPrice") = txtUnitPrice.Text 
    newProduct("Discontinued") = cbxDiscontinued.CheckState 
    newProduct("ProductID") = NewProdID 
    Try 
     NorthwindDataSet1.Products.Rows.Add(newProduct) 
     Try 
      Me.Validate() 
      Me.ProductsTableAdapter.Update(Me.NorthwindDataSet1.Products) 
      MsgBox("Update successful") 

     Catch ex As Exception 
      MsgBox("Update failed") 
     End Try 
    Catch x As Exception 
     MsgBox("This does not work") 
    End Try 

    btnAdd.Visible = False 
    btnDelete.Enabled = True 
    btnCancel.Enabled = True 
    btnFirst.Enabled = True 
    btnLast.Enabled = True 
    btnPrevious.Enabled = True 
    btnNext.Enabled = True 
    btnNew.Enabled = True 
    lblProdID.Visible = True 

    ProductsBindingSource.ResumeBinding() 
    lblLastPos.Text = ProductsBindingSource.Count 
End Sub 
+0

Является ли идентификатор продукта IDENTIY или Autonumber в вашей базе данных? Если да, то у вас нет контроля над его значением, но вы получаете то, что возвращает сервер базы данных. – Steve

+0

ProductID - это номер автономера в качестве первичного ключа. Последний продукт имеет идентификатор 77, но новые продукты будут добавлены в 80-е годы, так как я считаю, что он рассчитывает на тестовые продукты, которые я добавил и удалил. – Weeksy

+1

Расширяясь от того, что было указано, автоответчики не предназначены для потребления человеком , Да, когда начинается новая запись, новое значение автонабора «используется». Даже если вы никогда не сохраняете запись или сохраняете, а затем удаляете ее. Если важно не иметь пробелов в нумерации, вам нужно использовать только длинное целое поле и увеличивать его самостоятельно. – AVG

ответ

0

Независимо, если ваша вставка запрос идет завершен или нет , каждая попытка вставки в таблицу базы данных Access увеличит поле автоматического номера.

Это обычное явление, поля с пронумерованными номерами будут создавать промежутки от удаленных записей или неудачных вставок. Вы можете поддерживать непрерывную нумерацию только в том случае, если ваша таблица никогда не выполняет действие удаления или если у вас есть пользовательское поле идентификатора и сброс счетчика при удалении записей. Для этого также потребуется вручную увеличить свой пользовательский идентификатор.

Лучший способ просто игнорировать пробелы .. :)

Смежные вопросы