powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Массовая замена данных \ Access
11 сообщений из 11, страница 1 из 1
Массовая замена данных \ Access
    #38906896
majhool001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Получаю ошибку что есть элементы выходящие за границу индекса.
Переменная k = количеству записей в таблице
Так счет идет не от 1, а от 0 то соответственно если записей 16,то перебираться должны элементы с 0 по 15 включительно.

Суть: В БД есть таблица с полями:
Resurs, GrpPwd,LP,,Group,Alfavit
В ней 16 запсией
При нажатии на кнопку нужно изменить значение поля GrpPwd у всех записей в таблице на сгенерированный пароль
Подскажите,есть ли ошибки в коде и если есть более лучший вариант для этого, то какой?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
If DataGridView1.CurrentRow.Cells(3).Value = "да" Then ' если в поле Group значение "да", то
nres = DataGridView1.CurrentRow.Cells(0).Value ' nres переменная которая хранит название ресурса т.е значение поля Resurs
nalf = DataGridView1.CurrentRow.Cells(6).Value 'nalf хранит список букв из которых генерируется пароль т.е значение поля Alfavit
nsym = DataGridView1.CurrentRow.Cells(1).Value ' nsym хранит цифровое значение, обозначающее максимальную длину пароля
Dim parol1 As String
Dim pwd As String = pass99(nsym, nsym) 'генерируется пароль, от x до y символов длиной
parol1 = pwd
Dim cmd As New OleDbCommand()
Dim Conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.oledb.12.0; Data source=" + bpath) ' Переменная для подключения базы
cmd.Connection = conn 
Conn.open
For i As Integer = 0 To k-1
  'добавляем запрос
  cmd.CommandText &= String.Format("UPDATE Resurses SET GrpPwd = @GrpPwd1{0} WHERE Resurs = @Resurs1{0};", i)
  'добавляем параметры запроса
  cmd.Parameters.Add(String.Format("@GrpPwd1{0}", i), OleDbType.WChar).Value = parol1
  cmd.Parameters.Add(String.Format("@Resurs1{0}", i), OleDbType.Integer).Value = nres
Next
'код выполнения запроса
cmd.ExecuteNonQuery()
Conn.close



Генератор паролей:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public Function pass99(ByVal minLength As Integer, ByVal maxLength As Integer) As String
        Dim charset As String = nalf
        Dim r As New Random()
        Dim lenPass As Integer = r.Next(minLength, maxLength)
        Dim str As String = String.Empty
        For i As Integer = 0 To lenPass - 1
            str += charset(r.Next(0, charset.Length))
        Next
        Return str
    End Function
...
Рейтинг: 0 / 0
Массовая замена данных \ Access
    #38907021
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
majhool001,
Курсовая?
...
Рейтинг: 0 / 0
Массовая замена данных \ Access
    #38907031
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю да, потому что снова та же история в духе 'варим кашу из топора'...
...
Рейтинг: 0 / 0
Массовая замена данных \ Access
    #38907074
majhool001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Axeleron,

Нет, не курсовая.
Пытаюсь научиться работать с аксесс.
Если точнее, выполнять различные запросы на выборку данных\удаление\добавление и т.д
Но не очень понимаю теорию.
Но пока получается только варить "кашу из топора".
...
Рейтинг: 0 / 0
Массовая замена данных \ Access
    #38907088
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
majhool001,
Ну ошибок вообще море не сосчитать. Об оптимальном коде тут вообще пока рано задумываться...
...
Рейтинг: 0 / 0
Массовая замена данных \ Access
    #38907099
majhool001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Axeleron,

Само собой.
А где конкретно ошибка?
В запросе к БД?
...
Рейтинг: 0 / 0
Массовая замена данных \ Access
    #38907124
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
majhool001,

забыто:
Код: c#
1.
cmd.CommandType = System.Data.CommandType.Text;



@GrpPwd1{0} в тексте команды не в кавычках

parol1 будет у всех записей изменен на одинаковый.

nres - название ресурса (т.е. string), не приведен к типу Int, и одно и то же занчение во всем цикле.

Зачем-то i используется - он там бессмысленн в данном контексте.

В общем бред полный.
...
Рейтинг: 0 / 0
Массовая замена данных \ Access
    #38907134
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, и еще - объявление переменной Conn одна, а открывается непонятная conn... Это две разные переменные.
...
Рейтинг: 0 / 0
Массовая замена данных \ Access
    #38907139
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще больше похоже на задачку типа 'Найди в 5 строках кода 30 ошибок'...
...
Рейтинг: 0 / 0
Массовая замена данных \ Access
    #38907152
majhool001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Axeleron,

))))
Понял, буду исправлять.
...
Рейтинг: 0 / 0
Массовая замена данных \ Access
    #38907833
majhool001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Axeleron,

Так правильно?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
If DataGridView1.CurrentRow.Cells(3).Value = "да"
nres = DataGridView1.CurrentRow.Cells(0).Value '
nalf = DataGridView1.CurrentRow.Cells(6).Value 
nsym = DataGridView1.CurrentRow.Cells(1).Value 
Dim parol1 As String
Dim pwd As String = pass99(nsym, nsym) 'генерируется пароль, от x до y символов длиной
parol1 = pwd
Dim cmd As New OleDbCommand()
cmd.CommandText = ""
Dim Conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.oledb.12.0; Data source=" + bpath) ' Переменная для подключения базы
cmd.Connection = conn 
Conn.open
For i As Integer = 0 To k-1 'с такой логикой, это бесполезный цикл
  'добавляем запрос
  cmd.CommandText &= String.Format("UPDATE Resurses SET GrpPwd = @GrpPwd1{0} WHERE Resurs = @Resurs1{0};", i)
  'добавляем параметры запроса
  cmd.Parameters.Add(String.Format("@GrpPwd1{0}", i), OleDbType.WChar).Value = DataGridView1CurrentRow.Cells(0).Value
  cmd.Parameters.Add(String.Format("@Resurs1{0}", i), OleDbType.Integer).Value = DataGridView1CurrentRow.Cells(0).Value
Next
cmd.ExecuteNonQuery()
Conn.close
end if
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Массовая замена данных \ Access
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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