Cвязь с базой данных MS Access

Программирование на Visual Basic for Applications
Boomer_00
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 01.11.2006 (Ср) 18:39

Cвязь с базой данных MS Access

Сообщение Boomer_00 » 03.11.2006 (Пт) 2:42

Есть уже готовая база данных(файл MS Access) необходимо связаться с ней с помощью оператора SQL(SELECT).
Из этой базы необходима строка указанная пользователем.
Эта строка состоит из ячеек(по столбцам), содержимое каждой ячейки необходимо присвоить каким-то переменным.

Если кто-нибудь с этим сталкивался, пожалуйста, напишите как это будет выглядеть на VBA.

Boomer_00
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 01.11.2006 (Ср) 18:39

Сообщение Boomer_00 » 07.11.2006 (Вт) 11:38

Для начала попытался запустить код:

Option Explicit
Dim base As Database
Dim rs As Recordset
Dim SQL1 As String

Private Sub UserForm_Initialize()
Set base = OpenDatabase("C:\db1.mdb")
SQL1 = "SELECT * FROM Shveller - U WHERE Namber = '5U'"
Set rs = base.OpenRecordset(SQL1, dbOpenDynaset)
End Sub

Public Sub ReadRow()
Label1.Caption = rs.Fields(4)
End Sub
Private Sub CommandButton1_Click()
ReadRow
End Sub

Он выдает ошибку:
Неправильный синтаксис в предложении FROM.

Не понимаю, что ему не нравится???

В идеале этот код должен:
связаться с базой данных db1.mdb при нажатии на CommandBatton1;
выбрать из таблицы Shveller - U строку с содержимым 5U в столбце Namber;
отобразить в поле Label1 содержимое ячейки 4-го столбца.

HELP!!!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 07.11.2006 (Вт) 12:12

Пробелы в именах объектов недопустимы. Заключай в квадратные скобки, [Shveller - U].
Lasciate ogni speranza, voi ch'entrate.

Boomer_00
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 01.11.2006 (Ср) 18:39

Сообщение Boomer_00 » 07.11.2006 (Вт) 18:32

Большое спасибо, прога заработала!!!

Далее по заданию необходимо изменить программу так чтобы в SQL – запросе параметр команды Where выбирал пользователь в поле ListBox.

Написал код:

Dim base As Database
Dim rs As Recordset
Dim SQL1 As String
Dim vibor As Variant

Private Sub UserForm_Initialize()

ListBox1.AddItem "5U"
ListBox1.AddItem "6.5U"
ListBox1.AddItem "8U"
ListBox1.AddItem "10U"
ListBox1.AddItem "12U"
ListBox1.AddItem "14U"
ListBox1.AddItem "16U"
ListBox1.AddItem "16aU"
ListBox1.AddItem "18U"
ListBox1.AddItem "18aU"
ListBox1.AddItem "20U"
ListBox1.AddItem "22U"
ListBox1.AddItem "24U"
ListBox1.AddItem "26U"
ListBox1.AddItem "27U"
ListBox1.AddItem "30U"
ListBox1.AddItem "33U"
ListBox1.AddItem "36U"
ListBox1.AddItem "40U"
vibor = ListBox1.Text
Set base = OpenDatabase("C:\db1.mdb")
SQL1 = "SELECT * FROM [Shveller - U] WHERE Namber = '" & vibor & "'"
Set rs = base.OpenRecordset(SQL1, dbOpenDynaset)
End Sub

Public Sub ReadRow()
Label1.Caption = rs.Fields(1)
Label2.Caption = rs.Fields(2)
Label3.Caption = rs.Fields(3)
Label4.Caption = rs.Fields(4)
Label5.Caption = rs.Fields(5)
Label6.Caption = rs.Fields(6)
Label7.Caption = rs.Fields(7)
End Sub

Private Sub CommandButton1_Click()
ReadRow
End Sub

Но, что – то опять не работает???

Пишет:
Run-time error 3021
Текущая запись отсутствует.

HELP!!!

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 08.11.2006 (Ср) 7:44

2Boomer_00
Что, лабораторные пора делать? ;)

Boomer_00
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 01.11.2006 (Ср) 18:39

Сообщение Boomer_00 » 08.11.2006 (Ср) 11:20

Nicky
Это не лабы, а, так сказать, наброски для курсового проекта, который надо сделать на VBA, хотя единственный язык прогр-я который я боле менее знаю это Pascal.
Поэтому приходится туго!!!!!!!!!!!!!!!!!!!!

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 08.11.2006 (Ср) 12:19

Boomer_00 писал(а):...Пишет:
Run-time error 3021
Текущая запись отсутствует...

Праильно пишет. Потому что надо делать if not rs.EOF прежде чем данные брать. У тебя запрос вернул 0 записей. И правильно вернул. Потому что здесь
Код: Выделить всё
vibor = ListBox1.Text
Set base = OpenDatabase("C:\db1.mdb")
SQL1 = "SELECT * FROM [Shveller - U] WHERE Namber = '" & vibor & "'"
Set rs = base.OpenRecordset(SQL1, dbOpenDynaset)
End Sub

в переменную vibor ничего не попало. И правильно не попало. Потому что нет выделенного итема листбокса.

PS: учись оформлять код. Иначе и здесь придется туго ;)

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 08.11.2006 (Ср) 12:47

Форматируйте код перед тем как его постить. Особенно если он длинный.


Вернуться в VBA

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 111

    TopList