Access таблица ошибки вставки

Типовые ошибки и проблемы, возникающие при выполнении запросов на изменение

Во время выполнения
запроса на изменение Access различает
четыре категории ошибок:

1. Дубликаты
первичного ключа.

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

2. Ошибки
преобразования данных.

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

3. Заблокированные
записи.
Ошибки
этой категории возникают, когда при
выполнении запроса на удаление или на
обновление вы используете  таблицу,
к которой имеют доступ другие пользователи
сети. Access не может произвести обновление
записей, которые в это время обновляются
другими пользователями. Вам следует
подождать некоторое время и попытаться
снова выполнить обновление или удаление
в тот момент, когда данные записи больше
никто не использует.

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

    1. Основные этапы выполнения курсовой работы

    1. Определяем вариант
      по последней цифре. Выбираем тему.

Тема

Разработать
информационную подсистему «Зарплата»
для автоматизации начисления почасовой
заработной платы в бухгалтерии.

На
каждого работника хранятся следующие
данные:

  1. личный номер;

  2. фамилия, имя,
    отчество;

  3. отдел;

  4. должность;

  5. разряд;

  6. ставка
    (руб).

  7. месяц;

  8. количество
    дней, отработанных за месяц.

Создать
следующие запросы

1.
Количество отработанных дней одним
из подразделений за месяц

2. Средний
оклад работников

Создать
форму «
Табельный
учет». Поля,
выводимые на форму

Фамилия,
должность, ставка, количество дней
за месяц

Создать
диаграмму, указав в ней следующие
данные.

Количество
отработанных дней за месяц

Создать
отчет, предусмотрев в нем следующие
данные

Фамилия,

Должность,

Количество
отработанных дней за месяц

Предусмотреть
поле в конце отчета.

Общее
количество отработанных дней по всем
работникам.

В Access база данных
обозначает файл, содержащий набор
информации. База данных в Access может
содержать следующие типы объектов:
таблица, запрос, форма, отчёт, страница,
макрос, модуль.

Access может работать
одновременно только с одной базой
данных. Но одна БД Access может включать
множество таблиц, форм, запросов, отчётов,
макросов и модулей, которые хранятся в
одном файле с расширением mdb.

Основная информация
хранится в таблицах. Таблица – это
совокупность записей. Столбцы в таблице
называются полями, а строки – записями.
Количество записей ограничено объемом
жесткого диска, а допустимое количество
полей – 255. Таблиц в базе данных может
быть несколько. С таблицами можно
работать в режиме конструктора или с
помощью мастера. Для каждой таблицы в
Access можно определить первичный ключ и
один или несколько индексов с целью
увеличения скорости доступа к данным.

    1. Определяем
      количество таблиц. В данном случае
      достаточно трех таблиц.

Первую таблицу
назовем «Данные» в ней будут храниться
данные на работников, и она будет
содержать следующие поля:

  • личный номер
    (ключевое поле);

  • фамилия, имя,
    отчество;

  • отдел;

  • должность;

Вторую таблицу
назовем «Тариф» в ней будут храниться
данные относящиеся к тарифной сетке,
она будет содержать следующие поля:

  • должность (ключевое
    поле);

  • ставка (руб).

Третью таблицу
назовем «Табель» в ней будут храниться
данные относящиеся к работе, она будет
содержать следующие поля:

  • личный номер;

  • месяц;

  • количество часов,
    отработанных за месяц.

Рисунок 3.2 Таблица
«Данные»

Рисунок 3.3. Таблица
«Тариф»

Рисунок 3.4. Таблица
«Табель»

    1. После создания
      таблиц определяем связи между таблицами.

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

Рисунок 3.5. Схема
данных

После этого
происходит заполнение таблиц данными.

Рисунок 3.6.
Завполненные таблицы «Данные», «Тариф»,
«Табель»

    1. По заданию
      необходимо создать два запроса: с
      указанием количества отработанных
      дней одним из подразделений за месяц
      и средний оклад работников.

Запрос – это
инструмент для анализа, выбора и изменения
данных. С помощью запросов можно
просматривать, анализировать и изменять
данные из нескольких таблиц. Запросы
используются так же в качестве источника
данных для форм и отчетов. Запрос
содержит SQL
запроса, имеющий уникальное имя в
определенной базе данных.

Рисунок 3.7 Запрос
«Количество отработанных дней
Администрацией за май» выполненный на
языке SQL.

Рисунок 3.8 Запрос
«Средняя ставка работников»

    1. Следующим этапом
      работы с базой данных было создание
      формы.

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

    1. Задание
      предусматривало создание диаграммы,
      с указанием в ней общего количество
      отработанных дней в мае и июне.

    1. Создание отчета.
      По заданию необходимо в конце отчета
      указать общее количество отработанных
      дней каждым работником.

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

Таблица 1

Таблица 2

Таблица 3

База данных

Соседние файлы в папке 2 семестр

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • Remove From My Forums
  • Question

  • HI,

    I was uploading the excel data into specific table through import option. Actually im getting the below error message;

    Microsoft Access was unable to append all the data to the table.

    The contents of fields in <number> record(s) were deleted, and 0 record(s) were lost due to key violations.

        If data was deleted, the data you pasted or imported doesn’t match the field data types or the FieldSize property in the destination table.
        If records were lost either the records you pasted contain primary key values that already exist in the destination table, or they violate referential integrity rules for a relationship defined between tables.
        Do you want to continue anyway?

    I know the cause of this issue. that is because there is a new value in the data i uploaded but its not available in the linked table.

    For example: I have A and B tables, both these A and B are linked to each other. Now im uploading data into table A but that value is not available because its a new value.

    So my question is if the data is not imported why it is not pasting the error data in to paste errors table.

    Guys anybody have idea about this.


    Vinoth S

Answers

  • Hi Vinoth,

    A good approach is importing the Excel file in a Table with all Fields are formatted as Text.

    Then from there you can create a Query to convert the fields to the right Type and append to the right table.

    Would that work for you?


    Daniel van den Berg | Washington, USA | «Anticipate the difficult by managing the easy»

    • Marked as answer by

      Friday, December 9, 2011 4:20 PM

    • Unmarked as answer by
      vinwin1985
      Friday, December 9, 2011 4:20 PM
    • Marked as answer by
      vinwin1985
      Friday, December 9, 2011 4:20 PM

Как я могу вставить данные в таблицу MS Access? Когда я пытаюсь, я получаю ошибку.

Код:

If TextBox1.Text = Nothing And TextBox2.Text = Nothing Then
    MsgBox("No Username and Password inserted")
    TextBox1.Focus()

Else

    If Not con.State = ConnectionState.Open Then
        'open connection if it is not yet open
    End If

    cmd.Connection = con
    'add data to table
    cmd.CommandText = "insert into loginTable(username, password, typeofuser) values ('" & Me.TextBox1.Text & "', '" & Me.TextBox2.Text & "', '" & Me.ComboBox1.Text & "')"

    cmd.ExecuteNonQuery()

    'refresh data in list

    'close connection
    con.Close()
End If

2 ответа

Лучший ответ

Во-первых, вы не открываете соединение:

con.Open()

Далее password является зарезервированное слово в MS Access. Вам нужно заключить password в квадратные скобки:

[password]

Вы объединяете строки вместо использования параметров:

cmd.Parameters.Add("@username", OleDbType.VarChar).Value = txtUsername.Text
cmd.Parameters.Add("@password", OleDbType.VarChar).Value = txtPassword.Text
cmd.Parameters.Add("@typeofuser", OleDbType.VarChar).Value = cmbTypeOfUser.Text

Обратите внимание на правильное имя для TextBox и ComboBox элементов управления вместо использования TextBox1, TextBox2 и ComboBox1. Это помогает правильно идентифицировать каждый элемент управления:

txtUsername
txtPassword
cmbTypeOfUser

Отойдите от использования MsgBox и используйте MessageBox.Show. MsgBox существует для VB6 и в любом случае заканчивается делегированием MessageBox, поэтому имеет смысл использовать MessageBox.Show:

MessageBox.Show("No Username and Password inserted")

Наконец, я хотел бы рассмотреть возможность реализации использования, которое поможет закрыть и избавьтесь от ваших объектов SQL:

Using cmd As New OleDbCommand(command, connection)

End Using

В целом ваш код будет выглядеть примерно так:

If txtUsername.Text = Nothing And txtPassword.Text = Nothing Then

    MessageBox.Show("No Username and Password inserted")
    TextBox1.Focus()

Else

    Using con As New OleDbConnection(connectionString),
          cmd As New OleDbCommand("INSERT INTO [loginTable] ([username], [password], [typeofuser]) VALUES (@username, @password, @typeofuser)", con)

        con.Open()

        cmd.Parameters.Add("@username", OleDbType.VarChar).Value = txtUsername.Text
        cmd.Parameters.Add("@password", OleDbType.VarChar).Value = txtPassword.Text
        cmd.Parameters.Add("@typeofuser", OleDbType.VarChar).Value = cmbTypeOfUser.Text

        cmd.ExecuteNonQuery()

    End Using

End If

Это выходит за рамки этого вопроса, но я бы также посмотрел на шифрование паролей. Хранить их в виде простого текста — плохая практика. Посмотрите на вопрос SO; Лучший способ хранения пароля в базе данных, который может дать вам некоторые идеи о том, как лучше всего это сделать.


1

Bugs
25 Апр 2017 в 08:27

Есть (по крайней мере) несколько способов сделать это. Итак, попробуйте это. , ,

Imports System.Data.OleDb

Public Class Form1

    Private ConnectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:UsersExcelDesktopCodingMicrosoft AccessNorthwind.mdb;"
    Private NewIdentifer As Integer = 0
    Private InsertStatement As String = "INSERT INTO Employee (LName) Values(@LName)"
    Private IdentifierStatement As String = "Select @@Identity"

    'Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Using cn As New OleDbConnection(ConnectionString)
            Using cmd As New OleDbCommand("SELECT * FROM Employee", cn)
                Dim dt As New DataTable
                cn.Open()
                Dim Reader As OleDbDataReader = cmd.ExecuteReader()
                dt.Load(Reader)
                Dim dv = dt.DefaultView
                DataGridView1.DataSource = dv
            End Using
        End Using
    End Sub

    'End Sub

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

        If Not String.IsNullOrEmpty(txtLastName.Text) Then
            Using cn As New OleDbConnection(ConnectionString)
                Using cmd As New OleDbCommand(InsertStatement, cn)
                    cmd.Parameters.AddWithValue("@LName", txtLastName.Text)
                    cn.Open()
                    cmd.ExecuteNonQuery()
                    cmd.CommandText = IdentifierStatement
                    NewIdentifer = CInt(cmd.ExecuteScalar())
                    Dim Row As DataRowView = CType(DataGridView1.DataSource, DataView).AddNew
                    Row("Fname") = NewIdentifer
                    Row("LName") = txtLastName.Text
                    Row.EndEdit()
                    DataGridView1.CurrentCell = DataGridView1(0, DataGridView1.RowCount - 1)
                    txtLastName.Text = ""
                End Using
            End Using
        Else
            MsgBox("Please enter a name")
        End If

    End Sub
End Class

Также попробуйте. . .

Imports System.Data.OleDb

Public Class Form1



    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

        ' Requires: Imports System.Data.OleDb

        ' ensures the connection is closed and disposed
        Using connection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=""C:UsersRyanDesktopCodingDOT.NETSamples VBInsert Into MS Access Table from TextboxWindowsApplication1binInsertInto.mdb"";" & _
            "Persist Security Info=False")
            ' open connection
            connection.Open()

            ' Create command
            Dim insertCommand As New OleDbCommand( _
                "INSERT INTO Table1([inputOne] , [inputTwo] , [inputThree]) " & _
                "VALUES (@inputOne, @inputTwo, @inputThree);", _
                connection)
            ' Add the parameters with value
            insertCommand.Parameters.AddWithValue("@inputOne", TextBox1.Text)
            insertCommand.Parameters.AddWithValue("@inputTwo", TextBox2.Text)
            insertCommand.Parameters.AddWithValue("@inputThree", TextBox3.Text)
            ' you should always use parameterized queries to avoid SQL Injection
            ' execute the command
            insertCommand.ExecuteNonQuery()

            MessageBox.Show("Insert is done!!")

        End Using

    End Sub
End Class

Понравилась статья? Поделить с друзьями:

Не пропустите эти материалы по теме:

  • Яндекс еда ошибка привязки карты
  • Access ошибка ввода вывода при чтении диска
  • Access номер ошибки 2001
  • Access ошибка transform
  • Access код ошибки 32004

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии