Доступ к данным Access

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
fizik_leha
Обычный пользователь
Обычный пользователь
 
Сообщения: 76
Зарегистрирован: 02.09.2004 (Чт) 14:08

Доступ к данным Access

Сообщение fizik_leha » 18.10.2004 (Пн) 9:21

Необходимо из БД Access содержащей 4 столбца
достать эти данные и поместить в 4 массива для последующего анализа...
Каким образом это осущестивить.
Буду очень благодарен за фрагмент работающего кода...

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 18.10.2004 (Пн) 9:32

Вот, что-то типа этого
Код: Выделить всё
Private DB As DAO.Database
Private RS As DAO.Recordset
Private sqlk as String
  Set DB = DAO.OpenDatabase(Name_Base)
'  sqlk = "SELECT * FROM [таблица] WHERE [поле1] = '" + значение2 + "' AND [поле2] = '" + значение2 + "' ;"
'твой запрос
  Set RS = DB.OpenRecordset(sqlk)
  Do Until RS.EOF
      твой массив1() = RS.Fields("поле1")
      твой массив2() = RS.Fields("поле2")
      твой массив3() = RS.Fields("поле3")
      твой массив4() = RS.Fields("поле4")
    RS.MoveNext
  Loop


Не звбудь сделать ссылку на Microsoft DAO 3.6 Object Library

fizik_leha
Обычный пользователь
Обычный пользователь
 
Сообщения: 76
Зарегистрирован: 02.09.2004 (Чт) 14:08

Сообщение fizik_leha » 18.10.2004 (Пн) 10:11

а почему sqlk заремлен?
Насколько я понял тут описывается таблица с двумя полями...
У меня все учебники используют ADO... Какая разница между адо и дао?

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 18.10.2004 (Пн) 10:30

1. sqkl - протто так :lol:
2. да нет, сколько угодно. я для примера дал 2 поля.
3. Разницы я не знаю, спроси у Знатоков

fizik_leha
Обычный пользователь
Обычный пользователь
 
Сообщения: 76
Зарегистрирован: 02.09.2004 (Чт) 14:08

Сообщение fizik_leha » 18.10.2004 (Пн) 11:12

cmd = "provider=microsoft.jet.OLEDB.3.51'" & _
"Data sourse=" & _
"C:\Documents and Settings\All Users\Документы\Japan Cars.mdb"


Ругается на данную строчку ... говорит не может поставщика найти...
у меня подозрение что не может найти данную версию джета...
Где поспотреть список провайдеров?

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 18.10.2004 (Пн) 11:25

Может проблемма в том, что в пути не должно быть пробелов (если конечно проблемма только в этом)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 18.10.2004 (Пн) 11:33

Параметры с пробелами афаик нужно заключать в фигурные скобки {}
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 18.10.2004 (Пн) 11:34

Не, там разделителями считаются только ; и =. Так что действительно нет такого провайдера :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

fizik_leha
Обычный пользователь
Обычный пользователь
 
Сообщения: 76
Зарегистрирован: 02.09.2004 (Чт) 14:08

Сообщение fizik_leha » 18.10.2004 (Пн) 11:58

Так что у меня vb Кривой?
Или там эти провайдеры еще как то подключать надо?

fizik_leha
Обычный пользователь
Обычный пользователь
 
Сообщения: 76
Зарегистрирован: 02.09.2004 (Чт) 14:08

Сообщение fizik_leha » 18.10.2004 (Пн) 12:10

Вылечилось зпменой ' на ;

Теперь ругается на не интсалированный ISAM...

А это еще что за зверь и с чем его едят... в смысле где его достать...

ta_gena
Бывалый
Бывалый
 
Сообщения: 264
Зарегистрирован: 30.10.2002 (Ср) 12:18
Откуда: Russia

Сообщение ta_gena » 18.10.2004 (Пн) 12:18

Если используется Access 2000 и выше, то нужно утановить
Service pack 5 Для Visual Studion 6.0.
А лучше скачать с www.microsoft.com Service Pack 6 и ADO 2.8.

Считать всю таблицу в массив можно так:
Код: Выделить всё
Dim aRecords() As Variant
aRecords = rs.GetRows()

fizik_leha
Обычный пользователь
Обычный пользователь
 
Сообщения: 76
Зарегистрирован: 02.09.2004 (Чт) 14:08

Сообщение fizik_leha » 18.10.2004 (Пн) 18:01

Обновил до SP6. Те же грабли...
короче кидаю код...

Private cn As ADODB.Connection
Private rs As ADODB.Recordset

Private Sub Adodc1_WillMove(ByVal adReason As ADODB.EventReasonEnum, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)

End Sub

Private Sub Form_Load()
Dim cmd As String
Dim sql As String

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

cmd = "Provider=microsoft.jet.OLEDB.3.51;" & _
"Data sourse=" & _
"C:\Documents and Settings\All Users\Документы\Japan Cars.mdb"
'Provider=Microsoft.Jet.OLEDB.3.51;Password=""
Set cn = New ADODB.Connection
With cn
.ConnectionString = cmd
.Open
ВОТ ЗДЕСЬ РУГАЕТСЯ...
End With

sql = "select * Kod"

Set rs = New ADODB.Recordset
With rs
.Open sql, cn, adOpenForwardOnly, adLockReadOnly
Do While Not rs.EOF
LstCOD.AddItem rs("Kod")
rs.MoveNext
Loop
.Close
End With
Set rs = Nothing
cn.Close
Set cn = Nothing

End Sub

ta_gena
Бывалый
Бывалый
 
Сообщения: 264
Зарегистрирован: 30.10.2002 (Ср) 12:18
Откуда: Russia

Сообщение ta_gena » 19.10.2004 (Вт) 11:07

Попробуй лечше так:

Код: Выделить всё
Private Sub Form_Load()
  Dim sql As String
  Dim rs As New ADODB.Recordset

  sql = "SELECT Kod FROM TableName"
  With rs
    .Open sql, _
          GetConnection("C:\Documents and Settings\All Users\Äîêóìåíòû\Japan Cars.mdb"), _
          adOpenForwardOnly, _
          adLockReadOnly

    Do Until .EOF
      LstCOD.AddItem rs("Kod")
      .MoveNext
    Loop
    .Close
  End With
  Set rs = Nothing
End Sub

Private Function GetConnection(sFileName As String) As ADODB.Connection
  Dim db As New ADODB.Connection
  With db
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .ConnectionString = sFileName
    .Open
  End With
  Set GetConnection = db
  Set db = Nothing
End Function

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 19.10.2004 (Вт) 11:25

Код: Выделить всё
cmd = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data source=C:\Documents and Settings\All Users\Документы\Japan Cars.mdb;User ID=Admin;Password=;"

fizik_leha
Обычный пользователь
Обычный пользователь
 
Сообщения: 76
Зарегистрирован: 02.09.2004 (Чт) 14:08

Сообщение fizik_leha » 19.10.2004 (Вт) 13:29

to Konst_One: Спасибо помогло!

Теперь ругается на запрос
sql = "select * japan_cars"
Говорит, что пропущен оператор...
и еще что в sql ставить надо? имя таблицы или имя поля таблицы?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 19.10.2004 (Вт) 13:33

Если japan_cars - название поля, то ты пропустил запятую. А если название таблицы, то пропущено FROM.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 19.10.2004 (Вт) 13:37

Код: Выделить всё
select * from japan_cars


учите SQL

fizik_leha
Обычный пользователь
Обычный пользователь
 
Сообщения: 76
Зарегистрирован: 02.09.2004 (Чт) 14:08

Сообщение fizik_leha » 19.10.2004 (Вт) 13:54

Ураа заработала!!!! Всем БОЛЬШОЕ спасибо.

Подскажите пожалуйста где достать хелп по VB 6.0, а то у меня кривая версия без хелпа...

fizik_leha
Обычный пользователь
Обычный пользователь
 
Сообщения: 76
Зарегистрирован: 02.09.2004 (Чт) 14:08

Сообщение fizik_leha » 19.10.2004 (Вт) 16:21

Народ никто не знает почему listcount выдает отрицательное количество записей?



Private Sub Form_Load()
Dim cmd As String
Dim sql As String

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

'cmd = "Provider=microsoft.jet.OLEDB.4.0;" & _
' "Data sourse=" & _
' "C:\Documents and Settings\All Users\Документы\Japan_Cars.mdb"
'Provider=Microsoft.Jet.OLEDB.3.51;Password=""
cmd = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data source=C:\Documents and Settings\All Users\Документы\Japan Cars.mdb;User ID=Admin;Password=;"
Set cn = New ADODB.Connection
With cn
.ConnectionString = cmd
.Open
End With

sql = "select * from japan_cars"

Set rs = New ADODB.Recordset
With rs
.Open sql, cn, adOpenForwardOnly, adLockReadOnly
Do While Not rs.EOF
LstCOD.AddItem rs("Kod")
rs.MoveNext
Loop
.Close
End With
Set rs = Nothing
cn.Close
Set cn = Nothing
Text1.Text = LstCOD.ListCount
End Sub


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 8

    TopList