Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/19: Рейтинг темы: голосов - 19, средняя оценка - 4.68
 Аватар для timsc1
15 / 15 / 2
Регистрация: 27.11.2011
Сообщений: 714

Выборка из базы данных Access по условию

26.10.2018, 11:25. Показов 4243. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго здоровичка!
VB2008 FW=3.5
Пересмотрел форум, всё равно не понял как делать (мозг закипел)...
Есть простенькая БД в Access (название книги, автор, цена, дата выхода)
В главной форме в DGV вывожу эту бд (это я сделал).
Вопрос: как в DGV на другой форме вывести книги с ценой более 500р. (не пойму, как делать запрос на VB и его вывести в другой форме) и в третью форму вывести книги, выпущенные в 2012 году.
Спасибо!!!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.10.2018, 11:25
Ответы с готовыми решениями:

Выборка строк по условию из базы Access
Подскажите пожалуйста как такое сделать: есть база access в ней таблица cars. Как мне из этой таблицы записать в массив/список все model у...

Выборка из базы данных по условию
Всем привет, помогите разобраться с запросами. Есть аццесовская база данных: id название учебника название главы номер главы ...

Выборка из базы данных Access по условию
Помогите, пожалуйста поправить код... Задача: Есть база данных. В ней две связанных между собой таблицы. На форме расположено два...

19
 Аватар для l34ddx
69 / 66 / 23
Регистрация: 23.07.2014
Сообщений: 121
26.10.2018, 11:43
Если для вывода на главную форму использовался DataSet или DataTable , то для фильтрации на другую форму можно использовать DataView
0
85 / 75 / 15
Регистрация: 18.01.2014
Сообщений: 359
26.10.2018, 13:15
Цитата Сообщение от timsc1 Посмотреть сообщение
Вопрос: как в DGV на другой форме вывести книги с ценой более 500р.
Не обязательно ко второй DGV привязывать таблицу из БД. Достаточно пройтись циклом по основной DGV и взять от туда те строки, которые удовлетворяют условию.

Или привязать ко второй DGV таблицу, также как и к первой, но поставить фильтр на отображение, удовлетворяющий условию.
0
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
26.10.2018, 15:16
Например
VB.NET
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
Public tb, tbCopy As DataTable
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    'загружаем таблицу
    loadTable("books.mdb")
    'и делаем с нее копию
    tbCopy = tb.Clone
    For Each rr As DataRow In tb.Select
        tbCopy.Rows.Add(rr.ItemArray)
    Next
    DataGridView1.DataSource = tb
End Sub
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    'все книги с числом страниц больше TextBox1.Text
    Form2.Tag = TextBox1.Text
    Form2.ShowDialog()
End Sub
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    'все книги с годом издания равным TextBox2.Text
    Form3.Tag = TextBox2.Text
    Form3.ShowDialog()
End Sub
'…
Public Class Form2
    Private Sub Form5_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Dim dv As DataView = Form1.tbCopy.DefaultView
        dv.RowFilter = "Pages > " & Me.Tag
        DataGridView1.DataSource = dv
    End Sub
End Class
Public Class Form6
    Private Sub Form3_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Dim dv As DataView = Form1.tbCopy.DefaultView
        dv.RowFilter = "Year = " & Me.Tag
        DataGridView1.DataSource = dv
    End Sub
End Class
0
 Аватар для timsc1
15 / 15 / 2
Регистрация: 27.11.2011
Сообщений: 714
27.10.2018, 11:57  [ТС]
ovva, Спасибо!!! Но он ругается на loadTable. Просит заменить на DataTable, всё равно ругается!!!
0
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
27.10.2018, 12:21
Цитата Сообщение от timsc1 Посмотреть сообщение
Но он ругается на loadTable.
Естественно. Это функция загрузки таблицы и ее код не приводится. Но вы ведь свою таблицу как то загружаете?
Class Form6 исправьте на Class Form3. Копировал куски из существующего проекта, не усмотрел.
0
 Аватар для timsc1
15 / 15 / 2
Регистрация: 27.11.2011
Сообщений: 714
29.10.2018, 12:52  [ТС]
Колонка "Дата выхода" - это полностью дата: 12.05.2010, 28.07.2013 и т.д. Как из этой колонки вытащить только год и по нему выводить запрос. Пытался CDate, Year... не получается!!!
0
1548 / 1521 / 325
Регистрация: 03.10.2012
Сообщений: 1,551
29.10.2018, 13:19
Лучший ответ Сообщение было отмечено timsc1 как решение

Решение

Цитата Сообщение от timsc1 Посмотреть сообщение
Пытался CDate, Year... не получается!!!
timsc1, ну почему не получается, всё получается
VB.NET
1
2
3
Dim s As String = "12.05.2010"
Dim year As Integer = CDate(s).Year
MsgBox(year)
1
 Аватар для timsc1
15 / 15 / 2
Регистрация: 27.11.2011
Сообщений: 714
29.10.2018, 13:44  [ТС]
В базе дата выхода - это тип Дата и время, нужный год на форме вводится через NumericUpDown,
Цитата Сообщение от ovva Посмотреть сообщение
'все книги с годом издания равным TextBox2.Text
* * Form3.Tag = TextBox2.Text
* * Form3.ShowDialog()
- это по году проверка,

Цитата Сообщение от ovva Посмотреть сообщение
Dim dv As DataView = Form1.tbCopy.DefaultView
* * * * dv.RowFilter = "Year = " & Me.Tag
* * * * DataGridView1.DataSource = dv
- это код на другой форме

делаю: dv.RowFilter = "Year = " & CDate(Me.Tag).Year - не работает, ругается, что нельзя переводить integer в Date
0
1723 / 1550 / 165
Регистрация: 25.07.2015
Сообщений: 2,651
29.10.2018, 15:36
Цитата Сообщение от timsc1 Посмотреть сообщение
делаю: dv.RowFilter = "Year = " & CDate(Me.Tag).Year - не работает, ругается, что нельзя переводить integer в Date
А что вам мешает привести Me.Tag к строковому значению
VB.NET
1
dv.RowFilter = "Year = " & CDate(Me.Tag.ToString()).Year
0
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
29.10.2018, 19:22
Лучший ответ Сообщение было отмечено timsc1 как решение

Решение

Просто не получается
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Public Class Form3
    Private tmpColumn As DataColumn = New DataColumn
    Private Sub Form3_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Dim tmpTable As DataTable = Form1.tbCopy
        With tmpColumn
            .DataType = System.Type.GetType("System.String")
            .ColumnName = "dtString"
            .Expression = "Convert(RecordingDate, 'System.String')"
        End With
        tmpTable.Columns.Add(tmpColumn)
        Dim dv As DataView = tmpTable.DefaultView
        Dim s As String = "'*" & Me.Tag.ToString & "*'"
        dv.RowFilter = "dtString LIKE " & s
        DataGridView1.DataSource = dv
        DataGridView1.Columns(DataGridView1.ColumnCount - 1).Visible = False
    End Sub
    Private Sub Form3_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
        Form1.tbCopy.Columns.Remove(tmpColumn)
    End Sub
End Class
Добавлено через 6 минут
PS. RecordingDate – поле в таблице определенное как Дата/время

Добавлено через 2 часа 53 минуты
Вариант
VB.NET
1
2
3
4
5
6
7
8
9
10
Private Sub Form3_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    Dim tt = (From r As DataRow In Form1.tbCopy.Rows Where (CType(r!RecordingDate, System.DateTime)).Year = Me.Tag).ToArray
    If tt.Length > 0 Then
        Dim dd As DataTable = Form1.tbCopy.Clone
        For Each rr As DataRow In tt
            dd.Rows.Add(rr.ItemArray)
        Next
        DataGridView1.DataSource = dd
    End If
End Sub
1
 Аватар для timsc1
15 / 15 / 2
Регистрация: 27.11.2011
Сообщений: 714
30.10.2018, 13:57  [ТС]
ovva, Спасибо!!! Заработало!!! Не подскажите, пытаюсь там открыть файл с расширением .accdb - не хочет... Почему???
0
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
30.10.2018, 17:14
Измените строку подключения, https://www.connectionstrings.com/access/
3
 Аватар для timsc1
15 / 15 / 2
Регистрация: 27.11.2011
Сообщений: 714
31.10.2018, 08:28  [ТС]
ovva, Спасибо!!! В этой БД сделан запрос (в файле он уже есть). Как его просто вывести на другую форму? Пытался Делать на подобие двух других форм, менял параметры, не выводит...
0
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
31.10.2018, 12:23
Цитата Сообщение от timsc1 Посмотреть сообщение
В этой БД сделан запрос (в файле он уже есть). Как его просто вывести на другую форму?
Не понял.
0
 Аватар для timsc1
15 / 15 / 2
Регистрация: 27.11.2011
Сообщений: 714
02.11.2018, 10:29  [ТС]
В файле .accdb есть запрос am (он, наверное, определяется как таблица). Как на другую форму вывести этот запрос??? Что нужно поменять???
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
      Dim Con As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & ff) ' Переменная для подключения базы
 SqlCom = New OleDb.OleDbCommand("SELECT * FROM [am]", Con) ' Указываем строку запроса и привязываем к соединению
            Con.Open() ' Открываем соединение
            SqlCom.ExecuteNonQuery() 'Выполняем запрос
            DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса
            DA.Fill(DT) ' Заполняем таблицу результатми
            Me.dd.DataSource = DT ' Привязываем Грид к источнику данных
            Con.Close() ' Закрываем соединение
                       'и делаем с нее копию
            tbCopy = DT.Clone
            For Each rr As DataRow In DT.Select
                tbCopy.Rows.Add(rr.ItemArray)
            Next
            dd.DataSource = DT
0
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
02.11.2018, 19:07
Цитата Сообщение от timsc1 Посмотреть сообщение
В файле .accdb есть запрос am (он, наверное, определяется как таблица).
Есть база данных, которую представляет файл *.accdb и в этой базе есть таблица с именем am.
Цитата Сообщение от timsc1 Посмотреть сообщение
Как на другую форму вывести этот запрос???
Запрос нельзя вывести ни на какую форму, а вот результат выполнения запроса (таблицу, набор записей) можно.
По коду:
Строку 4 можете удалить она здесь не к чему.
Строка 7 не нужна т.к. ниже в строке 14 вы делаете то же самое.
Определили таблицу tbCopy, как полную копию таблицы DT, и используете ее для передачи в другие формы как это и описывалось выше.
1
 Аватар для timsc1
15 / 15 / 2
Регистрация: 27.11.2011
Сообщений: 714
07.11.2018, 09:31  [ТС]
ovva, Спасибо, сделал!!! Подскажите плиз, как вывести не всю таблицу, а только колонки 2, 4, 7...
0
 Аватар для l34ddx
69 / 66 / 23
Регистрация: 23.07.2014
Сообщений: 121
07.11.2018, 10:33
Лучший ответ Сообщение было отмечено timsc1 как решение

Решение

timsc1, Можно в запросе "SELECT (названия столбцов , которые нужно показать через запятую) from ... "

либо скрыть столбцы в Datagridview
VB.NET
1
 DataGridView1.Columns(индекс столбца).Visible = False
0
 Аватар для timsc1
15 / 15 / 2
Регистрация: 27.11.2011
Сообщений: 714
17.11.2018, 08:49  [ТС]
l34ddx, Спасибо, разобрался!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.11.2018, 08:49
Помогаю со студенческими работами здесь

MS Access - выборка данных из базы в listview
Добрый день Задача стоит следующая: форма поиска. Вводится фамилия или ее часть, кликается "найти". В таблицу людей делается...

Выборка данных по условию
День добрый Подскажите, можно ли с помощью формул организовать выборку данных с одного листа на другой. Суть задачи: есть...

Выборка данных по условию.
По идее должен проверить условие если меньше 11000000 тогда выбирает одни данные, если больше, тогда другие, вот только программа виснет...

Создание базы данных, открытие из под одной базы данных MS Access
Здравствуйте. В общем, C# начал заниматься только вот и сразу была поставлена задача создать базу данных. Идея есть, при открытие программы...

Выборка данных из текста по условию
Всем привет, требуется перенести данные в блокнот в таком порядке как в примере ниже (окрашены в цвет как надо), первый символ это тип...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru