|
Глава 3. Работа с таблицей |
47 |
значения полей (сделана попытка вставить в текстовое поле слишком длинный текст) и т.д.
Невставленные данные Access помещает в специальную таблицу Ошибки вставки. После корректировки они могут быть позднее вставлены в таблицу-приемник.
Таблицу Ошибки вставки можно использовать для быстрого создания таблицы, содержащей нужную информацию. Например, чтобы создать таблицу, содержащую сведения о студентах группы 9701, достаточно скопировать в буфер обмена соответствующие записи таблицы Студенты, предварительно отсортировав ее по полю Группа. Затем нужно выполнить операцию их вставки в эту же таблицу. Из-за нарушения условия уникальности значений ключевого поля Код студента Access откажется выполнить эту операцию и поместит записи из буфера обмена в таблицу Ошибки вставки, которая будет иметь такую же структуру, как и таблица Студенты.
Буфер обмена можно использовать и при вставке в поля таблицы данных из других приложений Windows, например фрагмента таблицы Excel, текста, подготовленного в Word, или графического изображения.
3.4. Настройка внешнего вида таблицы
При работе с таблицей у различных пользователей базы данных могут возникнуть различные потребности, связанные с представлением содержащихся в них данных на экране. Например, разным пользователям может потребоваться различный порядок представления столбцов (полей таблицы), их ширина, представление данных в полях и т.д. Все эти элементы настройки (форматирования) таблицы находятся в руках пользователя. При изменении настроек сама структура таблицы не меняется, меняется лишь внешний вид ее представления на экране (макет). При желании новый макет таблицы может быть сохранен.
Наиболее часто встречающаяся операция при настройке внешнего вида таблиц — это выбор представления отдельных ее полей.
Что в основном меняет пользователь для отдельного поля:
•имя поля;
•представление данных в поле (в том числе тип поля);
•ширину поля;
•местонахождение (порядковый номер) поля.
Эти операции могут быть осуществлены различными способами. Имя поля и представление данных в поле лучше всего менять в конструкторе таблиц, тогда как ширину полей и порядок их следования— в режиме просмотра таблицы.
Рис. 3.5. Меню Формат
48 Работа в Microsoft Access
О задании имен полей и их характеристиках (типе данных, формате данных и др.) подробно говорилось в предыдущей главе, поэтому остановимся кратко на изменении ширины поля и порядке следования полей.
Для изменения ширины поля достаточно в режиме просмотра таблицы установить курсор мыши на правую границу имени поля, нажать левую клавишу мыши и переместить границу в заданном направлении для увеличения или уменьшения ширины поля. Можно также использовать соответствующую команду меню Формат (см. рис. 3.5).
Аналогичным образом может быть изменена высота строк таблицы. При этом меняется высота сразу всех строк таблицы.
Для изменения порядка следования полей необходимо сначала выделить поле, щелкнув мышью на имени поля. Поле (весь столбец) окажется выделенным. После этого надо «ухватиться» мышью за имя поля и перетащить поле на новое место, удерживая нажатой левую клавишу мыши. Можно также с помощью клавиш Ctrl+F8 включить режим Сдвиг и затем для перемещения поля использовать клавиши ↓ и ↑ . Для выключения этого режима нужно нажать на клавишу Esc.
В режиме просмотра таблицы можно также скрыть показ отдельных столбцов. Для этого достаточно выбрать столбец (столбцы), щелкнуть
правой клавишей мыши и из контекстного меню выбрать опцию Скрыть столбцы. Можно также использовать команды Формат/Скрыть столбцы. Для показа скрытых столбцов нужно использовать команды
Формат/Отобразить столбцы.
Иногда при просмотре данных может понадобиться, чтобы при прокрутке содержимого таблицы вправо или влево один или несколько столбцов оставались на экране. Например, при просмотре сведений о студентах удобно, чтобы столбец с фамилией студента не исчезал с экрана. Для этого нужно выделить один или несколько (смежных) фиксируемых столбцов и выполнить команды Формат/Закрепить столбцы. Для отмены фиксации столбцов следует выполнить команды Формат/Освободить все
столбцы.
|
Глава 3. Работа с таблицей |
49 |
3.5. Поиск и замена данных
В Access существует множество способов отобрать только требуемые данные при выполнении поиска конкретного значения, одной записи или группы записей.
•С помощью диалогового окна Поиск легко найти конкретные записи или определенные значения в полях. При обнаружении каждого вхождения требуемого элемента выполняется перемещение по записям. Если нужно заменить конкретные обнаруженные при поиске значения, следует воспользоваться диалоговым окном Замена.
•Фильтры позволяют временно выбрать и просмотреть конкретный набор записей в режиме таблицы.
•Запросы дают возможность работать с конкретным набором записей, которые удовлетворяют условиям, заданным для одной или нескольких таблиц базы данных. При выполнении запроса становится возможной независимая работа с этим набором записей в конкретной форме или в объекте в режиме таблицы.
Озапросах будет подробно сказано в главе 5. В этой главе мы сосредоточимся на выполнении операций поиска и замены данных, а также на построении фильтров.
Для нахождения (поиска) данных служит специальное диалоговое окно поиска (см. рис. 3.6), открыть которое можно с помощью команд меню Правка/Найти или нажатия комбинации клавиш Ctrl + A (F).
Рис. 3.6. Окно поиска
При этом можно найти конкретное вхождение образца в поле, а также возможность найти сразу все вхождения образца в поле или искать каждое вхождение по отдельности. Если не требуется выполнять поиск по всем полям, в режиме таблицы требуется выбрать поле (столбец) для поиска. значения, которое требуется найти. Само значение вводится в поле
Образец.
Если точное значение неизвестно, можно задать образец поиска с помощью обычных знаков подстановки.
|
50 |
Работа в Microsoft Access |
Чтобы найти первое вхождение указанного значения, необходимо нажать кнопку Найти. Для поиска следующих вхождений этого значения нажимается кнопка Найти далее.
Для замены данных служит диалоговое окно замены (см. рис. 3.7), открыть которое можно с помощью элемента головного меню Правка/Заменить или нажатия комбинации клавиш Ctrl + Р (Н).
Для замены найденного значения (значений) требуется задать информацию в поле Заменить на.
Существует возможность сразу заменить все вхождения образца в поле или заменять каждое вхождение по отдельности. Однако поиск пустых значений и пустых строк необходимо выполнять в диалоговом окне Поиск с последующей заменой этих значений вручную.
Для того чтобы выполнять замену каждого вхождения по отдельности, нужно нажимать Найти далее, а затем кнопку Заменить. Для пропуска текущего вхождения и поиска следующего нажимается кнопка Найти далее.
Рис. 3.7. Окно замены
Быстрее выполнить замену большого количества данных или произвести вычисления с данными (например, повысить все оклады сотрудникам) можно с помощью запроса на обновление (см. главу о запросах), а не с помощью диалогового окна Замена. Однако при этом невозможно выполнять замену отдельных вхождений с подтверждением. Кроме того, запрос на обновление при выполнении поиска и замены данных в нескольких полях становится достаточно громоздким.
Кроме поиска по образцам данных существуют и другие возможности поиска, например, записи по ее номеру.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
Как я могу вставить данные в таблицу 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
- 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
-
Marked as answer by
- 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
-
Marked as answer by
|
Поделитесь этой записью или добавьте в закладки |
Полезные публикации
|
When importing data into an MS Access Database, sometimes there are errors in the formatting of the data source.
As I recall, when this happens, MS Access will put the offending row into a separate table called <something>.
What is this table’s proper name?
asked Nov 29, 2010 at 20:56
Import Errors is the name of the table, followed by an integer if you have had previous failed imports. (Access 2003: http://office.microsoft.com/en-us/access-help/import-or-link-data-and-objects-HP005187610.aspx?CTT=1)
Access will create a table called Paste Errors for pasted data.
I notice that in Access 2010, the file is called <name of import file>_ImportErrors, for example, importing try.txt would give try_ImportErrors:
Error Field Row
Null value in an auto-number field id 2
answered Nov 29, 2010 at 21:18
FionnualaFionnuala
89.9k7 gold badges110 silver badges148 bronze badges
9





