#1 14.06.11 17:28
Помощь с VBA
пример программы доступа к базам данных из VBA-кода. создали в базе данных таблицу. таблица содержит поля «Название», «Цена», «Количество», «Сумма». нужно выводить все записи, у которых цена больше средней по таблице...
Код::
Private Sub CommandButton1_Click()
Dim myDatabase As Database
Dim myTable As TableDef
Dim myField As Field
Dim rs As Recordset
Dim i As Integer
Set myDatabase = DBEngine.CreateDatabase("D:\test_mdb", dbLangGeneral) 'создание БД
MsgBox "База данных создана"
Set myTable = New TableDef 'инифиализация таблицы
With myTable 'создание полей таблицы
.Fields.Append .CreateField("Название", dbText)
.Fields.Append .CreateField("Цена", dbText)
.Fields.Append .CreateField("Количество", dbText)
.Fields.Append .CreateField("Сумма", dbText)
End With
myTable.Name = "Таблицаа" 'задание имени таблицы
myDatabase.TableDefs.Append myTable 'добавление таблицы в базу данных
Dim Datas(5, 3) As String 'массив с данными
Datas(0, 0) = "Рубашка"
Datas(0, 1) = "700р"
Datas(0, 2) = "3"
Datas(0, 3) = "2100р"
Datas(1, 0) = "Майка"
Datas(1, 1) = "400р"
Datas(1, 2) = "4"
Datas(1, 3) = "1600р"
Datas(2, 0) = "Джинсы"
Datas(2, 1) = "1000р"
Datas(2, 2) = "2"
Datas(2, 3) = "2000р"
Datas(3, 0) = "Шорты"
Datas(3, 1) = "500р"
Datas(3, 2) = "4"
Datas(3, 3) = "2000р"
Datas(4, 0) = "Кроссовки"
Datas(4, 1) = "1500р"
Datas(4, 2) = "2"
Datas(4, 3) = "3000р"
Datas(5, 0) = "Брюки"
Datas(5, 1) = "900р"
Datas(5, 2) = "3"
Datas(5, 3) = "2400р"
Set rs = myDatabase.OpenRecordset("Таблицаа", dbOpenTable) 'открытие таблицы Телефоны
For i = 0 To 5 'заполнение таблицы данными из массива
With rs
.AddNew
!Название = Datas(i, 0)
!Цена = Datas(i, 1)
!Количество = Datas(i, 2)
!Сумма = Datas(i, 3)
.Update
End With
Next i
Set myDatabase = Nothing
MsgBox "Таблица создана"
End Sub
Private Sub CommandButton2_Click()
Dim my_base As Database
Dim rstNwind As Recordset
Dim x, Z As Integer
Set my_base = OpenDatabase("D:\test_mdb")
Set rstNwind = my_base.OpenRecordset("Таблицаа", dbOpenTable)
If rstNwind.RecordCount > 0 Then
rstNwind.MoveFirst
Do While Not rstNwind.EOF
For i = 0 To 5
x = rstNwind.Fields(1)
Next i
Z = x / 6
ListBox1.AddItem rstNwind.Fields(0)
ListBox2.AddItem rstNwind.Fields(1)
ListBox3.AddItem rstNwind.Fields(2)
ListBox4.AddItem rstNwind.Fields(3)
rstNwind.MoveNext
Loop
End If
End Sub
Private Sub CommandButton3_Click()
Unload Me
End Sub
Private Sub ListBox1_Click()
End Sub
Private Sub ListBox2_Click()
End Sub
Private Sub ListBox4_Click()
End Sub
Private Sub UserForm_Click()
End SubFor i = 0 To 5
x = rstNwind.Fields(1)
Next i
Z = x / 6
ListBox1.AddItem rstNwind.Fields(0)
ListBox2.AddItem rstNwind.Fields(1)
ListBox3.AddItem rstNwind.Fields(2)
ListBox4.AddItem rstNwind.Fields(3)
rstNwind.MoveNext
Loop
не могу выполнить последний пункт задания, кто может помочь?
Исправлено Aguero (14.06.11 17:32)
Offline
#2 23.06.11 12:46
Re: Помощь с VBA
По логике средствами T-SQL
Сначало получаешь количесво записей в таблице Select count() from mytable
Затем получаешь общую сумму Select sum([Цена]) from mytable
Делешь сумму на количество получаешь среднюю стоимость приравниваешь её переменной к примеру "СредняяЦена" и остаётся выбрать записи у которых цена больше средней цены Select * from mytable where [цена] > СредняяЦена
Исправлено eagle (23.06.11 12:48)
Offline

