OVH Cloud OVH Cloud

dbgrid

2 réponses
Avatar
lm
Bonjour,

Peut-on afficher dans un dbgrid des champs provenant de=20
tables diff=E9rentes (mais dans une m=EAme base de donn=E9es) ?

Comment peut-on afficher dans ce m=EAme dbgrid des donn=E9es=20
correspondant uniquement =E0 une informatique s=E9lectionn=E9e=20
par un utilisateur via un combo box ?

Merci d'avance pour votre aide

lm

2 réponses

Avatar
AP
Des contrainte d'enregistrement peuvent néamoins apparaitre

-----Message d'origine-----
Bonjour,

Peut-on afficher dans un dbgrid des champs provenant de
tables différentes (mais dans une même base de données) ?



* au niveau BD soit par une vue ou une procédure stocké
* au niveau logiciel par l'utilisation d'un recordset.

Comment peut-on afficher dans ce même dbgrid des données
correspondant uniquement à une informatique sélectionnée
par un utilisateur via un combo box ?


création d'un requete sql via recorset.

Merci d'avance pour votre aide

lm


.



Avatar
Zoury
Salut! :O)

Voici un exemple qui devrait t'aider à débuter..

'***
' référence : Microsoft ActiveX Data Objects 2.X Library
' Utilise la base de données NorthWind d'SQL Server..
' Form1
' 1 ComboBox, Style = "2 - DropDownList"
' 1 DataGrid
Option Explicit

Private Const CONNECTION_STRING As String = "Provider=SQLOLEDB.1;Persist
Security Infoúlse;User ID=sa;Initial Catalog=northwind;Data Source=gcodev"

Private Sub Combo1_Click()

Call FillGrid(Combo1.ItemData(Combo1.ListIndex), DataGrid1)

End Sub

Private Sub Form_Load()

Me.Caption = "Exemple de DataGrid ""Bindé"""
Call FillList(Combo1)

End Sub

Private Sub Form_Resize()
Call SetControlsPosition
End Sub

Private Sub FillList(ByRef cbo As ComboBox)

Dim rs As ADODB.Recordset
Set rs = GetRecordset("select CategoryID, CategoryName from categories")

Do Until rs.EOF
Call cbo.AddItem(rs.Fields("CategoryName").Value)
cbo.ItemData(cbo.NewIndex) = rs.Fields("CategoryID").Value
Call rs.MoveNext
Loop
If (cbo.ListCount > 0) Then cbo.ListIndex = 0

End Sub

Private Function FillGrid(ByRef sCategoryID As String, ByRef dg As DataGrid)
As Recordset

Set dg.DataSource = GetRecordset("select ProductName, QuantityPerUnit,
UnitPrice, UnitsInStock, UnitsOnOrder from products where categoryid = '" &
sCategoryID & "'")

End Function

Private Function GetRecordset(ByRef sQuery As String) As ADODB.Recordset

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

Set cn = New ADODB.Connection
Call cn.Open(CONNECTION_STRING)

Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
Call rs.Open(sQuery, cn, adOpenKeyset, adLockBatchOptimistic)

Set GetRecordset = rs

End Function

Private Sub SetControlsPosition()
Const MARGIN As Long = 120
Call Combo1.Move(MARGIN, _
MARGIN, _
IIf(Me.ScaleWidth - (2 * MARGIN) < 0, 0,
Me.ScaleWidth - (2 * MARGIN)))
Call DataGrid1.Move(MARGIN, _
MARGIN + Combo1.Top + Combo1.Height, _
Combo1.Width, _
IIf(Me.ScaleHeight - (3 * MARGIN) - Combo1.Height < 0,
0, Me.ScaleHeight - (3 * MARGIN) - Combo1.Height))
End Sub

Private Sub Form_Unload(Cancel As Integer)
If Not DataGrid1.DataSource Is Nothing Then
Set DataGrid1.DataSource = Nothing
End If
End Sub
'***

Change la chaine de connection afin de pointer vers la BD NorthWind fournit
par microsoft. Si tu n'as pas SQL Server, tu peux te connecter sur la
version Access de cette BD qui se trouve dans le répertoire ..Microsoft
Visual StudioVB98nwind.mdb

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/