powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / передача данных из БД в массив на VB
10 сообщений из 10, страница 1 из 1
передача данных из БД в массив на VB
    #36467996
Кайрат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у меня есть БД Access с числовыми данными. мне надо вытащить их в двумерный массив для дальнейшей обработки. как это реализовать. причём столбцов будет const=5, а количество строк меняется примерно от25 до 100 или более.
...
Рейтинг: 0 / 0
передача данных из БД в массив на VB
    #36468002
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вопрос в чем?

Как открыть соединение?
Как организовать цикл?
Каким доступом к данным воспользоваться?
Как определить массив произвольной размерности?
...
Рейтинг: 0 / 0
передача данных из БД в массив на VB
    #36468737
Кайрат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Я знаю как сделать перебор данных, например, для того, чтобы сверить их с каким-нибудь значением:
.........
Dim objReader As Data.OleDb.OleDbDataReader
.............
MyCommand.Connection.Open()
objReader = MyCommand.ExecuteReader()

While (objReader.Read())
If ((objReader.GetString(1) = UserNameTextBox.Text) And (objReader.GetValue(2) = CInt(UserPasswordTextBox.Text))) Then
Response.Redirect("reg.aspx")
Else : MessageLabel.Text = "Сначало зарегистрируйтесь"
RegistrationButton.Visible = True
EnterButton.Visible = False
End If
End While

MyCommand.Connection.Close()
..........
здесь идет проверка пароля и логина по БД. Цикл идёт до конца таблицы.

Как именно значения objReader.GetValue(2) строк и столбцов таблицы записать в двумерный массив??? каким образом надо реализовать цикл???
по столбцам можно разделить при помощи цикла for i=1 to 5,
а как по строкам это сделать.
...
Рейтинг: 0 / 0
передача данных из БД в массив на VB
    #36469022
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кайрат,

никогда не работал с базой через OleDbDataReader, попробуем....

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
'Определяете массив произвольной размерности
Dim MyData() As Int 'или Long или Currency или Double, вы не указали, какого типа у вас числовые данные
Dim i as Long, j as Integer

'Внутри цикла перебора таблицы:
i=Ubound(MyData)+ 1  'определяем новый размер массива
ReDim Preserve MyData( 5 , i) 'переопределяем размерность массива
'заполняем массив
For j= 1  To  5 
  MyData(j, i)=objReader.GetValue(j)
Next

как-то так....
...
Рейтинг: 0 / 0
передача данных из БД в массив на VB
    #36469043
Фотография Shamanus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кайрат,

судя из описания у Вас есть БД где хранятся некие параметры учетной записи
и при запуске вашего приложения необходима проверка существования пользователя и возможно пароля.

Это можно делать и без чтения содержимого БД в массив, например:

1.можно сделать запрос на содержимое записи в самой базе передавая текущие параметры учетки как ограничения запроса

2. А можно сделать проверку в самой таблице базы, читая сам рекордсет

3. уж самый крайний метод это прочитать сначала в массив, а потом рыскать по массиву и то если этот массив понадобится не раз.


и уж если речь идет о логине то такой метод с точки зрения безопасности слаб сам по себе, но это конечно Ваше дело.
...
Рейтинг: 0 / 0
передача данных из БД в массив на VB
    #36471139
Кайрат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shamanus,

Вы меня не правильно поняли. Реализовать проверку пароля и логина через БД я могу. Приведённый код просто для примера. У меня в БД имеются только числовые данные (тип double). Мне необходимо обработать эти данные по методу множественной регресии(но это уже другой вопрос). И чтоб мне их обработать я хочу переписать данные из таблицы БД в двумерный массив для дальнейшей обработки. Пока что мне необходимо реализовать именно это, а дальше видно будет.
...
Рейтинг: 0 / 0
передача данных из БД в массив на VB
    #36471662
Фотография Shamanus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КайратShamanus,

Вы меня не правильно поняли. Реализовать проверку пароля и логина через БД я могу. Приведённый код просто для примера. У меня в БД имеются только числовые данные (тип double). Мне необходимо обработать эти данные по методу множественной регресии(но это уже другой вопрос). И чтоб мне их обработать я хочу переписать данные из таблицы БД в двумерный массив для дальнейшей обработки. Пока что мне необходимо реализовать именно это, а дальше видно будет.


ну если Вы уверены что знаете то что Вам нужно то вот код функции

Код: 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.
'----------------------------------------------------------------------------------------------------------------------------
'Данная функция читает в массив содержимое запроса или таблицы в некой access базе
'размерность массива не имеет значения, функция удаляет массив и переобъявляет размерность в соответствии с размером базы
'Массив 2х мерный даже если размер второго измерения 1, начало массива 1(а не 0, как по умолчанию).
'Для использования функции должен быть объявлен массив куда писать, 2ая переменная типа текст - путь к базе,
'3я переменная название запроса
' в случае успешного выполнения функция принимает значение TRUE
'----------------------------------------------------------------------------------------------------------------------------
Public Function ReadInArray(ByRef InArr() As Variant, ByVal paTH, QueryName As String) As Boolean
Dim X As Long
Dim db As DAO.Database
Dim rs As DAO.Recordset
ReadInArray = False
On Error GoTo endt
'открываем рекордсет и базу данных
Set db = DAO.OpenDatabase(paTH, , yes)
Set rs = db.OpenRecordset(QueryName)
' стираем массив для записи запроса
Erase InArr
'считаем размер массива
' rs.RecordCount не работает для запросов, тольк для таблиц
'X = 0
'Do While Not rs.EOF
'X = X + 1
'rs.MoveNext
'Loop
' переобъявляем массив
ReDim InArr( 1  To rs.RecordCount,  1  To rs.Fields.Count) As Variant
' записываем массив
'rs.MoveFirst
X =  0 
Do While Not rs.EOF
X = X +  1 
    For I =  0  To rs.Fields.Count -  1 
     InArr(X, I +  1 ) = rs.Fields(I)
    Next I
rs.MoveNext
Loop
ReadInArray = True
'Закрываем рекордсет и базу данных
rs.Close
db.Close
'Освобождаем память
Set rs = Nothing
Set db = Nothing

endt:
End Function

важный момент, если чтение происходит не из таблицы, а из запроса то rs.RecordCount вернет 0. Тогда придется считать количество записей перебором. Эта часть кода сейчас неактивная.
строки с
X = 0 по Loop
и строка rs.MoveFirst

соответственно нужно будет изменить переобъявление размерности массива
с
Код: plaintext
ReDim InArr( 1  To rs.RecordCount,  1  To rs.Fields.Count) As Variant

на
Код: plaintext
ReDim InArr( 1  To X,  1  To rs.Fields.Count) As Variant


из этого кода нельзя узнать заголовки полей
заголовок возвращает функция rs.fielsds(i).Name
...
Рейтинг: 0 / 0
передача данных из БД в массив на VB
    #36471747
Фотография Shamanus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для пользования нужно подключить библиотеку DAO
...
Рейтинг: 0 / 0
передача данных из БД в массив на VB
    #36472171
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
Dim arr() as Variant
...
arr = rs.GetRows()

PS
rs - полученный рекордсет типа ASODB.Recordset
...
Рейтинг: 0 / 0
передача данных из БД в массив на VB
    #36472172
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A D ODB , конечно
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / передача данных из БД в массив на VB
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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