powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / adodb
16 сообщений из 16, страница 1 из 1
adodb
    #32302741
hangkil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Допустим есть база test.mdb в ней есть 2 таблиы:
cdnom (в ней поля: id_cd и cdnomer)
cdtext (в ней: id, text и id_cd - провязан с первой таблицей тогоже поля)

на форме имеется DataCombo и dataGrid

в Combe должны отражаться данные из таблице cdnom (все работает) номера дисков (допустим 1 2 3 4 5),

в DataGrid должны отражаться названия программ выбранного диска (не работает, отражается все содержимое таблици, а не выбранного диска)

При выборе номера диска должно отражаться содержимое только этого диска

Как это делается?
...
Рейтинг: 0 / 0
adodb
    #32302797
DionX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хм... а мона ответный вопрос? А как ты пытался сделать?
Однозначно, нужно обрабатывать событие DataCombo_Click. В нем открываешь рекордсет с записями id_cd = ВыбранномуЗначению, назначаешь его к DataGrid в качестве DataSourse, обновляешь. Ну и все, в краце.
...
Рейтинг: 0 / 0
adodb
    #32302987
hangkil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я понимаю, а как написать то кодом, мне негде посмотреть а самотыком я уж замучился
...
Рейтинг: 0 / 0
adodb
    #32303207
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hangkil писал:я понимаю, а как написать то кодом, мне негде посмотреть
Похоже, что как раз не понимаешь.
DionX, все нормально обьяснил ИМХО.

Попробую разжевать:
При изменении значения DataCombo, ловишь его в
DataCombo_IndexChanged по моему, посмотри подходящие для твоего случая события. Создаешь там рекордсет , он должен быть глобальным чтобы был виден и для грида.

Код: plaintext
1.
2.
3.
4.
dim sSql$
rs=new Adodb.Recordset
sSql= "Select text  from cdtext where id_cd=" & DataCombo.SelectedItem.Text
rs.Open sSql, Connection
DataGrid.Datasource=rs


Все.



Magnus
...
Рейтинг: 0 / 0
adodb
    #32303812
DionX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Magnus23
небольшое предложение/исправление:
Как ты верно заметил, рекордсет должен быть глобальным хотя бы на уровне формы, в которой всё енто действо происходить будет. Поэтому создавать каждый раз новый объект rs, думаю, не стоит. Лучше будя так:

dim sSql$
sSql="Select text from cdtext where id_cd="& DataCombo.SelectedItem.Text
set rs=cn.Execute(sSql) ' где cn - открытое подключение к БД
DataGrid.Datasource=rs

а в секции объявления переменных формы/модуля что-нить типа

Private/Public rs as New Adodb.Recordset

В этом случае объект рекордсета будет создан один при первом к нему обращении.
...
Рейтинг: 0 / 0
adodb
    #32304408
hangkil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все спасибо я только хотел все это сделать без операторов SQL
...
Рейтинг: 0 / 0
adodb
    #32304467
Ди_ма
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извини за нескромный вопрос:а чем тебе не нравятся операторы SQL?
...
Рейтинг: 0 / 0
adodb
    #32304471
hangkil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я принципиально, если это приложение VB то зачем там должен быть SQL, это дополнительно его надо учить, а зачем.???
...
Рейтинг: 0 / 0
adodb
    #32304631
dao
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
давно не работал с vb - но вот два других направления - связанные списки(рекодсеты) или фильтр
...
Рейтинг: 0 / 0
adodb
    #32305537
DionX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я принципиально, если это приложение VB то зачем там должен быть SQL, это дополнительно его надо учить, а зачем.???

Ха! Дружище, если уж ты думаешь работать с БД, то хотя бы без базовых знаний sql-запросов ни куда не двинешся. А элементарные select'ы писать, я думаю, каждому под силу...
...
Рейтинг: 0 / 0
adodb
    #32305539
DionX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
давно не работал с vb - но вот два других направления - связанные списки(рекодсеты) или фильтр

а как ты будешь открывать рекордсет без SQL-запросов? Даже чтоб поставить фильтр условие задаётся в соответствии с синтаксисом инструкции where...
...
Рейтинг: 0 / 0
adodb
    #32306236
Processor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Magnus23:
Ваш ответ верен в общем случае ("на вырост").
Если же таблица небольшая:
> (не работает, отражается все содержимое таблици, а не выбранного диска)
- достаточно отфильтровать рекордсет:
rs.Filter= "id_cd=" & DataCombo.SelectedItem.Text
и "освжить" сетку.
...
Рейтинг: 0 / 0
adodb
    #32306396
hangkil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. я видел прогу, (если в распечатке то на 50 стр.) так вот там ни одного SQL выражения
2. Processor примерно так и сделал и освежил, результат тот же, ну вот сами посмотрите:

это модуль:

Option Explicit
Public cnn As ADODB.Connection
Public prov As String

Public Sub conect()
Set cnn = New ADODB.Connection
cnn.CursorLocation = adUseClient
prov = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=test"
cnn.Open prov
End Sub

это форма:

Option Explicit
Private rsnom As ADODB.Recordset
Private rstext As ADODB.Recordset
Private Sub dc_Change()
Call conect
Set rstext = New ADODB.Recordset
Set rstext.ActiveConnection = cnn
If rstext.State = 1 Then rstext.Close

rstext.Open "cdtext"
rstext.Find "id_cd = '" & dc.Text & "'"
Set dg.DataSource = rstext

End Sub
Private Sub Form_Load()
Call conect
Set rsnom = New ADODB.Recordset
Set rsnom.ActiveConnection = cnn
If rsnom.State = 1 Then rsnom.Close
rsnom.Source = "cdnom"
rsnom.Open
dc.ListField = "cdnomer"
Set dc.RowSource = rsnom
Set dg.DataSource = rsnom
End Sub
...
Рейтинг: 0 / 0
adodb
    #32306413
Фотография Nrisimha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фильтруй источник датагрид
тем более у тебя источник ADODB.Recorsdet
у которого есть оператор .Filter
...
Рейтинг: 0 / 0
adodb
    #32306848
DionX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hangkil пойми, вот ты всё со своими CD-ками разабратся не можешь, а если взять харошо струтурированную релляц. БД с большим коллличеством таблиц и связей то чтоб построить хорошую, гибкую обработку данных одназначно понадобится SQL'овские инструкции...
...
Рейтинг: 0 / 0
adodb
    #32307111
Фотография Nrisimha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати .filter не работает для DataCombo и DataList , там придется зкрывать и открывать заново рекордсет, и при открытии делать в SQL команду "select......WHERE ID_Client=" & strMyClient_ID
т.е. использовать SQL
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / adodb
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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