Formulaire principale / sec avec vb6

oceane_san Messages postés 7 Date d'inscription vendredi 20 février 2004 Statut Membre Dernière intervention 25 février 2004 - 23 févr. 2004 à 15:53
oceane_san Messages postés 7 Date d'inscription vendredi 20 février 2004 Statut Membre Dernière intervention 25 février 2004 - 25 févr. 2004 à 10:41
bonjour,
j'ai une base access avec deux tables reliées par une relation 1 à pls.
comment créer un form ds lequel je pourrais voir mes deux tables en respectant l'intégrité ref.
je travaille en ado
jet : 3.51

9 réponses

datatunning Messages postés 53 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 22 juin 2007 1
23 févr. 2004 à 17:33
Il me semble que sous Access, il y a des assistant pour faire des form Maitre/Detail.

Datatunning (Bruno)
0
oceane_san Messages postés 7 Date d'inscription vendredi 20 février 2004 Statut Membre Dernière intervention 25 février 2004
23 févr. 2004 à 20:38
salut,

ss access ,je sais le faire
sb vb6, je n'y arrive pas
ce que je souhaite c de creer un form ds lequel je pourrais visualiser mes deux tables reliées entre elles.
Ds ce form, je souhaite rajouter des enr en respectant l'intégité réf.

merci
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
23 févr. 2004 à 23:22
tout dépend de la nature de tes deux tables, enfin je veux dire de ce qu'elles contiennent.
Dans ta jointure, la table de gauche est-elle la plus grosse (en Nb d'enr), que stocke les 2 tables ? Toutes ces questions, et surtout leurs réponses, vont influencer la façon dont on va te répondre : DataList, DataCombo, DataGrid, ....

Christophe R.
0
oceane_san Messages postés 7 Date d'inscription vendredi 20 février 2004 Statut Membre Dernière intervention 25 février 2004
24 févr. 2004 à 10:33
merci
tres simple :
une table service
une table agents
la table service est reliée a l'autre par une relation
1 à pls : ds un service il y a un ou pls agents.
Qd je saisi un agent, je dois avoir la possibilité de choisir son service par une combo.
cf les régles d'intégrité referentiel

merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
datatunning Messages postés 53 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 22 juin 2007 1
24 févr. 2004 à 10:47
Puisque tu créer un nouvel agent, il te suffit de mettre tout les services dans la combo.

si tu utilise egelement ce form pour visualiser l'agent, il te faudra faire une selection du service dans la combo lors de l'init des donnees du form

Datatunning (Bruno)
0
oceane_san Messages postés 7 Date d'inscription vendredi 20 février 2004 Statut Membre Dernière intervention 25 février 2004
24 févr. 2004 à 10:54
merci
mais coment faire
0
datatunning Messages postés 53 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 22 juin 2007 1
24 févr. 2004 à 11:17
Pour lire les donnes ds la base, tu peux utiliser une fonction generique telle que celle que j'utilise et qui gere le retry en cas de plantage de la connection (attention, çà ne corrige pas les erreurs du SQL !!)

Private Function SQLExecute(strSQL As String, Optional blnKeepConnection As Boolean = False) As ADODB.Recordset
' Execute une commande SQL et fait le retry
' la reconnection a la base est genere par DBConnexionSetting
' et le trapp d'erreur VB ici.
Dim lngRetry As Long

'initialisation de la fonction
lngRetry = 0
Set SQLExecute = New ADODB.Recordset
If objDB.State <> adStateOpen Then Exit Function

'definition du mode d'erreur
If m_lngErrorAfterRetry = -1 Then On Error Resume Next
If m_lngErrorAfterRetry > 0 Then On Error GoTo ErrorCommand

'Execute la commande
Set SQLExecute = mo_Connection .Execute(strSQL)
If Not blnKeepConnection Then Set SQLExecute.ActiveConnection = Nothing

Exit Function

ErrorCommand:
lngRetry = lngRetry + 1

'retry ?
If m_lngErrorAfterRetry > lngRetry Then
DoEvents
DoEvents
DoEvents
Resume
End If

'on initalise le trap d'erreur dans cette fonction et on laisse
'le trap à un plus haut niveau (boucles appellantes)
On Error GoTo 0

'on essaie une derniere fois et sinon on a la vrai erreur VB
Set SQLExecute = objDB.Execute(strSQL)
End Function

- tu efface la combo
combo.clear

- tu créer un recordset pour lire les services
set rsService = SQLExecute("SELET * FROM service", false)

- tu parse les records pour les ajouter à ta combo
if not rsService.eof then
rsService.movelast
rsService.movefirst

do until rsService.eof
combo.additem rsService(""service_name").value
' Ceci te permet de connaitre l'ID dans la DB
combo.itemdata(combo.NewIndex).itemdata = rs
("service_ID).value
rsService.movenext
loop
end if

PS, oublie pas de creer un object connection, g pas mis le code...car çà depend du server de donnee mais j'utilise çà en general

Encapsule tout ca dans une classe pour gerer la reconnaection auto si tu en as besoin.

Private WithEvents mo_Connection As ADODB.Connection
Set mo_Connection = New ADODB.Connection
mo_Connection.CursorLocation = adUseClient
mo_Connection.CommandTimeout = 60
sConnect = "Provider=" & CON_PROVIDER & ";Data Source=" & CON_SERVER & ";Initial Catalog=" & CON_BASE & ";UID=" & CON_LOGIN & ";Password=" & CON_PWD

mo_Connection.ConnectionString = sConnect

y a plus qu'a remplacer par tes infos.

' Permet de fournir la connection a des classes servant de datasource.
Public Function GetConnection() As ADODB.Connection
Set GetConnection = mo_Connection
End Function

Private Sub mo_Connection_ExecuteComplete(ByVal RecordsAffected As Long, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pCommand As ADODB.Command, ByVal pRecordset As ADODB.Recordset, ByVal pConnection As ADODB.Connection)
' Ce mecanisme ne gere pas l'erreur génére (c'est à l'appli au
' dessus afin de bypasser tout les calculs fait sur le recordset retour)
' mais il permet de gérer la reconnection automatique
If adStatus <> adStatusErrorsOccurred Then Exit Sub
mb_State = False

' TODO : Message d'erreur ?
'If Not EnumErrorMessage Then Exit Sub
'Call MsgBox("ODBC Error: " + pError, vbOKOnly, "Error Access Database")

Debug.Print "mo_Connection_ExecuteComplete", RecordsAffected, IIf(pError Is Nothing, "No errors", pError), adStatus
End Sub

Private Sub mo_Connection_WillExecute(Source As String, CursorType As ADODB.CursorTypeEnum, LockType As ADODB.LockTypeEnum, Options As Long, adStatus As ADODB.EventStatusEnum, ByVal pCommand As ADODB.Command, ByVal pRecordset As ADODB.Recordset, ByVal pConnection As ADODB.Connection)
If mb_State Then Exit Sub
On Error GoTo ErrorDB
mo_Connection.Close
mo_Connection.Open
mb_State = True
Exit Sub
ErrorDB:
' TODO : Call DisplayErrorDB
Debug.Print "mo_Connection_WillExecute", Source, LockType, Options, adStatus
End Sub

Si tu es perdu, envoie moi un mail, je t'enverrai les classes de gestion de donnée toutes faite.

Datatunning (Bruno)
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
25 févr. 2004 à 00:16
Utilises un DataComb (à ajouter aux controles disponible en standard) Tu peux le lie àun champ de ta table Agent, et à ta table Service par un autre controle DAO pour obtenir la liste des services. Nom de ligne de code = ZERO, ou presque : Tout peux se faire par l'IDE en mode création. Voir aide sur le controle DataCombo aux propréité RowSource entre autre

Christophe R.
0
oceane_san Messages postés 7 Date d'inscription vendredi 20 février 2004 Statut Membre Dernière intervention 25 février 2004
25 févr. 2004 à 10:41
merci les gars vous gentils
mais jai du mal a vous suivre
exixte il un exemple simple avec lequel je pourrais commencer en ado ss vb6
0
Rejoignez-nous