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

Как открыть соединение?
Как организовать цикл?
Каким доступом к данным воспользоваться?
Как определить массив произвольной размерности?
...
Рейтинг: 0 / 0
14.02.2010, 22:07
    #36468737
Кайрат
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача данных из БД в массив на VB
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
15.02.2010, 09:50
    #36469022
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача данных из БД в массив на VB
Кайрат,

никогда не работал с базой через 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
15.02.2010, 09:58
    #36469043
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача данных из БД в массив на VB
Кайрат,

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

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

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

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

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


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

Вы меня не правильно поняли. Реализовать проверку пароля и логина через БД я могу. Приведённый код просто для примера. У меня в БД имеются только числовые данные (тип double). Мне необходимо обработать эти данные по методу множественной регресии(но это уже другой вопрос). И чтоб мне их обработать я хочу переписать данные из таблицы БД в двумерный массив для дальнейшей обработки. Пока что мне необходимо реализовать именно это, а дальше видно будет.
...
Рейтинг: 0 / 0
16.02.2010, 09:26
    #36471662
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача данных из БД в массив на VB
Кайрат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
16.02.2010, 09:55
    #36471747
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача данных из БД в массив на VB
для пользования нужно подключить библиотеку DAO
...
Рейтинг: 0 / 0
16.02.2010, 12:31
    #36472171
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача данных из БД в массив на VB
Код: plaintext
1.
2.
Dim arr() as Variant
...
arr = rs.GetRows()

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


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