powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как INSERT несколько записей из DataGrid в mdb разом
14 сообщений из 14, страница 1 из 1
Как INSERT несколько записей из DataGrid в mdb разом
    #32733181
Чайник_Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По одной записи получается, а все добавленные пользователем в DataGrid перенести в базу данных не получается. Помогите если сможете.
...
Рейтинг: 0 / 0
Как INSERT несколько записей из DataGrid в mdb разом
    #32733193
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По одной записи получается, а все добавленные пользователем в DataGrid перенести в базу данных не получается. Помогите если сможете.

А код свой покажите
...
Рейтинг: 0 / 0
Как INSERT несколько записей из DataGrid в mdb разом
    #32733276
Чайник_Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Private Sub btnIns_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIns.Click
Dim oRD As OleDb.OleDbDataReader
Dim x As Integer
oRD = oApp.DB.ExecCommandReader("SELECT ID FROM ActionPlanFact ORDER BY ID;")
Do While oRD.Read()
x = oRD.GetInt32(0)
Loop
oRD.Close()
Dim dtitem0 As Double = Convert.ToDouble(dt.Rows(dgData.CurrentRowIndex).Item(5))
Dim dtitem1 As Double = Convert.ToDouble(dt.Rows(dgData.CurrentRowIndex).Item(6))
Dim dtitem2 As Double = Convert.ToDouble(dt.Rows(dgData.CurrentRowIndex).Item(7))
Dim dtitem3 As Double = Convert.ToDouble(dt.Rows(dgData.CurrentRowIndex).Item(8))
Dim dtitem4 As Integer = Convert.ToInt32(dt.Rows(dgData.CurrentRowIndex).Item(9))
Dim dtitem5 As Integer = Convert.ToInt32(dt.Rows(dgData.CurrentRowIndex).Item(10))
Dim dtitem6 As Integer = Convert.ToInt32(dt.Rows(dgData.CurrentRowIndex).Item(0))
Dim dtitem7 As Integer = Convert.ToInt32(dt.Rows(dgData.CurrentRowIndex).Item(1))
Dim dtitem8 As Integer = Convert.ToInt32(dt.Rows(dgData.CurrentRowIndex).Item(2))
Dim dtitem9 As Integer = Convert.ToInt32(dt.Rows(dgData.CurrentRowIndex).Item(3))
Dim dtitem10 As Integer = Convert.ToInt32(dt.Rows(dgData.CurrentRowIndex).Item(4))
strSQL = "INSERT into ActionPlanFact values (" & x + 1 & ", @dt0, @dt1, @dt2, @dt3, " & dtitem4 & ", " & dtitem5 & ", " & dtitem6 & ", " & dtitem7 & ", " & dtitem8 & ", " & dtitem9 & ", " & dtitem10 & "); "
Try
If oApp.DB.ExecCommand(strSQL, New Object() {"@dt0", dtitem0, "@dt1", dtitem1, "@dt2", dtitem2, "@dt3", dtitem3}) > 0 Then
dt.Rows(dgData.CurrentRowIndex).Item(11) = x + 1
dt.AcceptChanges()
dgData.DataSource = dt
dgData.Refresh()
tbRec.Text = CStr(dt.Rows.Count)
End If
Catch ex As Exception
MsgBox("ошибка обновления базы данных")
End Try
End Sub
...
Рейтинг: 0 / 0
Как INSERT несколько записей из DataGrid в mdb разом
    #32733329
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока не понял смысла этой процедуры :-(
Покажите текст oApp.DB.ExecCommand.
Если эта процедура в цикле формирует sql-текст команды insert, то там ли у вас стоит Loop ???
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
Private Sub btnIns_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIns.Click
	Dim oRD As OleDb.OleDbDataReader
	Dim x As Integer
	oRD = oApp.DB.ExecCommandReader("SELECT ID FROM ActionPlanFact ORDER BY ID;")
	Do While oRD.Read()
		x = oRD.GetInt32( 0 )
	Loop  '  
	oRD.Close()
	Dim dtitem0 As Double = Convert.ToDouble(dt.Rows(dgData.CurrentRowIndex).Item( 5 ))
	Dim dtitem1 As Double = Convert.ToDouble(dt.Rows(dgData.CurrentRowIndex).Item( 6 ))
	Dim dtitem2 As Double = Convert.ToDouble(dt.Rows(dgData.CurrentRowIndex).Item( 7 ))
	Dim dtitem3 As Double = Convert.ToDouble(dt.Rows(dgData.CurrentRowIndex).Item( 8 ))
	Dim dtitem4 As Integer = Convert.ToInt32(dt.Rows(dgData.CurrentRowIndex).Item( 9 ))
	Dim dtitem5 As Integer = Convert.ToInt32(dt.Rows(dgData.CurrentRowIndex).Item( 10 ))
	Dim dtitem6 As Integer = Convert.ToInt32(dt.Rows(dgData.CurrentRowIndex).Item( 0 ))
	Dim dtitem7 As Integer = Convert.ToInt32(dt.Rows(dgData.CurrentRowIndex).Item( 1 ))
	Dim dtitem8 As Integer = Convert.ToInt32(dt.Rows(dgData.CurrentRowIndex).Item( 2 ))
	Dim dtitem9 As Integer = Convert.ToInt32(dt.Rows(dgData.CurrentRowIndex).Item( 3 ))
	Dim dtitem10 As Integer = Convert.ToInt32(dt.Rows(dgData.CurrentRowIndex).Item( 4 ))
	strSQL = "INSERT into ActionPlanFact values ("& x +  1  & ", @dt0, @dt1, @dt2, @dt3, " & dtitem4 & ", " & dtitem5 & ", " & dtitem6 & ", " & dtitem7 & ", " & dtitem8 & ", " & dtitem9 & ", " & dtitem10 & "); "
	Try
	If oApp.DB.ExecCommand(strSQL, New Object() {"@dt0", dtitem0, "@dt1", dtitem1, "@dt2", dtitem2, "@dt3", dtitem3}) >  0  Then
		dt.Rows(dgData.CurrentRowIndex).Item( 11 ) = x +  1 
		dt.AcceptChanges()
		dgData.DataSource = dt
		dgData.Refresh()
		tbRec.Text = CStr(dt.Rows.Count)
	End If
	Catch ex As Exception
	MsgBox("ошибка обновления базы данных")
	End Try
End Sub
...
Рейтинг: 0 / 0
Как INSERT несколько записей из DataGrid в mdb разом
    #32733351
Чайник_Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Этим я подсчитываю идентификационный номер последней записи в базе данных, другого способа я не нашла. Автоматически этот номер не вставлялся в базе.
Dim oRD As OleDb.OleDbDataReader
Dim x As Integer
oRD = oApp.DB.ExecCommandReader("SELECT ID FROM ActionPlanFact ORDER BY ID;")
Do While oRD.Read()
x = oRD.GetInt32(0)
Loop '
oRD.Close()
Я вычисляю последний номер и присваиваю записи из DataGrid следующий, х+1. Одна запись вставляется безошибочно. А разом несколько не знаю как.
...
Рейтинг: 0 / 0
Как INSERT несколько записей из DataGrid в mdb разом
    #32733402
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вычисляю последний номер и присваиваю записи из DataGrid следующий, х+1. Одна запись вставляется безошибочно. А разом несколько не знаю как.

Используя уже написанный код
Вынесите определение нового ID, в отдельную процедуру, примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public function GetLastID() as integer
	Dim oRD As OleDb.OleDbDataReader
	Dim x As Integer
	oRD = oApp.DB.ExecCommandReader("SELECT ID FROM ActionPlanFact ORDER BY ID;")
	Do While oRD.Read()
	x = oRD.GetInt32( 0 )
	Loop  '  
	oRD.Close()
	return x
end function

Код: plaintext
1.
dgData.CurrentRowIndex
Вообще не используйте.
Делаем через CurrencyManager.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
Private Sub btnIns_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIns.Click

 '	Dim dtitem0 As Double = Convert.ToDouble(dt.Rows(dgData.CurrentRowIndex).Item(5)) 'rem by Sa 
 '	Dim dtitem1 As Double = Convert.ToDouble(dt.Rows(dgData.CurrentRowIndex).Item(6)) 'rem by Sa 
 '	Dim dtitem2 As Double = Convert.ToDouble(dt.Rows(dgData.CurrentRowIndex).Item(7)) 'rem by Sa 
 '	Dim dtitem3 As Double = Convert.ToDouble(dt.Rows(dgData.CurrentRowIndex).Item(8)) 'rem by Sa 
 '	Dim dtitem4 As Integer = Convert.ToInt32(dt.Rows(dgData.CurrentRowIndex).Item(9)) 'rem by Sa 
 '	Dim dtitem5 As Integer = Convert.ToInt32(dt.Rows(dgData.CurrentRowIndex).Item(10)) 'rem by Sa 
 '	Dim dtitem6 As Integer = Convert.ToInt32(dt.Rows(dgData.CurrentRowIndex).Item(0)) 'rem by Sa 
 '	Dim dtitem7 As Integer = Convert.ToInt32(dt.Rows(dgData.CurrentRowIndex).Item(1)) 'rem by Sa 
 '	Dim dtitem8 As Integer = Convert.ToInt32(dt.Rows(dgData.CurrentRowIndex).Item(2)) 'rem by Sa 
 '	Dim dtitem9 As Integer = Convert.ToInt32(dt.Rows(dgData.CurrentRowIndex).Item(3)) 'rem by Sa 
 '	Dim dtitem10 As Integer = Convert.ToInt32(dt.Rows(dgData.CurrentRowIndex).Item(4)) 'rem by Sa 
    Dim myDataGrid as DataGrid = dgData
    Dim cm As CurrencyManager = Me.BindingContext(Me.myDataGrid.DataSource, Me.myDataGrid.DataMember)
    Dim dv As DataView = CType(cm.List, DataView)
    Dim i As Integer
    For i =  0  To dv.Count -  1 
		Dim dtitem0  as integer = CType(dv(i)( 5 ), integer)  ' Вместо индекса нагляднее использовать название столбца, например CType(dv("column1_name") 
		Dim dtitem1 as integer = CType(dv(i)( 6 ), integer)
		Dim dtitem2 as integer = CType(dv(i)( 7 ), integer)
		Dim dtitem3 as integer = CType(dv(i)( 8 ), integer)
		Dim dtitem4 as integer = CType(dv(i)( 9 ), integer)
		Dim dtitem5 as integer = CType(dv(i)( 10 ), integer)
		Dim dtitem6 as integer = CType(dv(i)( 0 ), integer)
		Dim dtitem7 as integer = CType(dv(i)( 1 ), integer)
		Dim dtitem8 as integer = CType(dv(i)( 2 ), integer)
		Dim dtitem9 as integer = CType(dv(i)( 4 ), integer)
		Dim dtitem10 as integer = CType(dv(i)( 4 ), integer)

		Dim x as Integer = GetLastID();  'added by Sa  

		strSQL = "INSERT into ActionPlanFact values ("& x +  1  & ", @dt0, @dt1, @dt2, @dt3, " & dtitem4 & ", " & dtitem5 & ", " & dtitem6 & ", " & dtitem7 & ", " & dtitem8 & ", " & dtitem9 & ", " & dtitem10 & "); "
		Try
		If oApp.DB.ExecCommand(strSQL, New Object() {"@dt0", dtitem0, "@dt1", dtitem1, "@dt2", dtitem2, "@dt3", dtitem3}) >  0  Then
 '			dt.Rows(dgData.CurrentRowIndex).Item(11) = x + 1 ' rem by Sa 
			dv(i)( 11 ) = x +  1   ' added by Sa 
			dt.AcceptChanges()
			dgData.DataSource = dt
			dgData.Refresh()
			tbRec.Text = CStr(dt.Rows.Count)
		End If
		Catch ex As Exception
		MsgBox("ошибка обновления базы данных")
		End Try
    Next i
End Sub

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Как INSERT несколько записей из DataGrid в mdb разом
    #32733409
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка:
Код: plaintext
1.
2.
Dim dtitem9 as integer = CType(dv(i)( 4 ), integer)
Dim dtitem10 as integer = CType(dv(i)( 4 ), integer)
Поправка:
Код: plaintext
1.
2.
Dim dtitem9 as integer = CType(dv(i)( 3 ), integer)
Dim dtitem10 as integer = CType(dv(i)( 4 ), integer)

Думаю идея понятна



Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Как INSERT несколько записей из DataGrid в mdb разом
    #32733518
Чайник_Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, попробую, но завтра. У нас конец рабочего дня
...
Рейтинг: 0 / 0
Как INSERT несколько записей из DataGrid в mdb разом
    #32733692
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я заметил, что попутно речь шла о проблеме автономера в БД (вероятно БД - SQL 2000 или подобная)... Сам сталкивался с этой траблой - просто когда создаём таблицу с полем ID (DtaType = int, соответственно), потом присваиваем ему ключик, а в финале правой кнопочкой (если таблицу делаем в VS.NET) лезем в Property Page и на закладочке Tables в строке Table Identity Column выставляем ID... Теперь это поле будет автоматически при бавлять +1 и о нём в коде проги заботиться вообще будет не нужно...
P.S. Извините за Offtop...
...
Рейтинг: 0 / 0
Как INSERT несколько записей из DataGrid в mdb разом
    #32735196
Чайник_Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vladgrid спасибо за дополнение, учту ваши знания, но речь идет о БД Access. Поле вроде бы и ключевое, но никак не удавалось прибавить номер записи автоматически. Я понимаю, что моя программа выглядит коряво, но ... как умеем.
...
Рейтинг: 0 / 0
Как INSERT несколько записей из DataGrid в mdb разом
    #32735225
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но речь идет о БД Access. Поле вроде бы и ключевое, но никак не удавалось прибавить номер записи автоматически. Я понимаю, что моя программа выглядит коряво, но ... как умеем.

В Access - это называется "Счетчик".
Но для начала я бы попробовал так как написано выше, а потом можно и полностью пересмотреть использование DataReader и DataTable, в пользу DataAdapter и DataSet - все таки это полегче будет, с меньшими трудозатратами, да и получится красивее.

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Как INSERT несколько записей из DataGrid в mdb разом
    #32735337
Чайник_Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я попробовала, как вы предложили и появилась новая засада:
ID в программе присутствует в виде
dt.Columns.Add(New DataColumn("ID", GetType(Integer))) 'идентификатор записи
dt.Columns("ID").Unique = True
dt.Columns("ID").ColumnMapping = MappingType.Hidden
т.е. пользовательего не может видеть и вводить ID, но грид не дает вводить следующую запись, пока есть незаполненные поля в этой. ID в гриде мне нужен для реализации функции удаления записи из грида и БД. Запись в БД и в гриде связываются только по ID. Мне уже кажется, что у меня в корне неправильный подход к DataGrid. Неужели нужно отслеживать отдельно Insert, Update, Delete, как это делаю я. Это не удобно для юзеров. Про DataAdapter и DataSet я знаю еще меньше, чем про DataTable и DataReader.
...
Рейтинг: 0 / 0
Как INSERT несколько записей из DataGrid в mdb разом
    #32735384
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про DataAdapter и DataSet я знаю еще меньше, чем про DataTable и DataReader.

Придется почитать про это, ИМХО DataSet - это центральный класс в ADO.NET.
Связка DataAdapter + DataSet - намного легче для восприятия. Плюс если у вас VS.NET то при помощи DataWizard'а вы можете посмотреть как примерно следует работать с этими объектами.

По поводу проблемы с ID.
Можно организовать у себя в приложении генерирование суррогатных ключей при добавлении записи, а затем при добавлении данных уже в базу данных заменять суррогатные на те которые применяются в БД.
...
Рейтинг: 0 / 0
Как INSERT несколько записей из DataGrid в mdb разом
    #32735397
Чайник_Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, я так и сделаю. Как приятно, когда тебя понимают.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как INSERT несколько записей из DataGrid в mdb разом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]