ngalino
Messages postés65Date d'inscriptionsamedi 21 avril 2007StatutMembreDernière intervention15 octobre 2009
-
25 juin 2008 à 09:30
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
25 juin 2008 à 13:02
Bonjour à tous,
je développe avec vb; à cet effet, j'ai un formulaire qui doit afficher les informations nécessaires pour une société. j'aimerais qu'à chaque fois que ce formulaire est chargé, il affiche lee données s'il ont été saisie au préalable; dans le cas contraire qu'il soit à mesure de faire une mise à jour.
par ailleurs, voici le code que j'ai saisie mais qui ne me donne pas toujours satisfaction:
Private Sub CmdValider_Click()
'
On Error GoTo err_Valider
Dim rs As New ADODB.Recordset
Dim cmd As New ADODB.Command
If Valider = False Then
chsql = "insert into societe (Code_societe,Raison_sociale,Matricule_juridique,Num_scife,Code_imposition,Regime_CNPS,Adresse,Boite_postale,Localite,Pays,Telephone,Mail,Web) values('" & txtCode.Text & "','" & txtRSociale.Text & "','" & txtMatJuridique.Text & "','" & txtScife.Text & "','" & txtCodeImp.Text & "','" & txtCNPS.Text & "','" & txtAdresse.Text & "','" & txtBP.Text & "','" & txtLocalite.Text & "','" & txtPays.Text & "','" & txtTel.Text & "','" & txtMail.Text & "','" & txtWeb.Text & " ')"
Else
chsql = "update societe set Raison_sociale='" & txtRSociale.Text & "', Matricule_juridique='" & txtMatJuridique.Text & "', Num_scife='" & txtScife.Text & "',Code_imposition='" & txtCodeImp.Text & "',regime_CNPS='" & txtCNPS.Text & "',Adresse='" & txtAdresse.Text & "',Boite_postale='" & txtBP.Text & "',Localite='" & txtLocalite.Text & "',Pays='" & txtPays.Text & "',Telephone='" & txtTel.Text & "',Mail='" & txtMail.Text & "',Web='" & txtWeb.Text & "' where Code_societe='" & txtCode.Text & "'"
End If
'End If
cmd.ActiveConnection = ConnectionStringBDD
cmd.CommandText = chsql
cmd.Execute
'Set rs = Nothing
Valider = False
CmdValider.Enabled = False
If rs.State = adStateOpen Then rs.Close
rs.Open "societe", ConnectionStringBDD, adOpenKeyset, adLockOptimistic, adCmdTable
If Not rs.EOF Then
rs.MoveFirst
NomEntreprise = rs!Raison_sociale
MatriculeJuridique = rs!Matricule_juridique
NumeroScife = rs!Num_scife
CodeImposition = rs!Code_imposition
RegimeCnps = rs!Regime_CNPS
AdresseEntreprise = rs!Adresse
BoitePostale = "B.P" & rs!Boite_postale
LocaliteSociete = rs!Localite
PaysEntreprise = rst!Pays
TelephoneEntreprise = rs!Telephone
EmailEntreprise = rs!Mail
WebEntreprise = rs!Web
End If
Call Form_Load
Exit Sub
err_Valider: MsgBox Err.Description, 0, "Editeur"
End Sub
Private Sub Form_Load()
Dim rst As New ADODB.Recordset
rst.Open "societe", ConnectionStringBDD, adOpenKeyset, adLockOptimistic, adCmdTable
If Not (rst.EOF And rst.BOF) Then
Valider = True
rst.MoveFirst
txtCode = rst.Fields(0)
txtRSociale = rst.Fields(1)
txtMatJuridique = rst.Fields(2)
txtScife = rst.Fields(3)
txtCodeImp = rst.Fields(4)
txtCNPS = rst.Fields(5)
txtAdresse = rst.Fields(6)
txtBP = rst.Fields(7)
txtLocalite = rst.Fields(8)
txtPays = rst.Fields(9)
txtTel = rst.Fields(10)
txtMail = rst.Fields(11)
txtWeb = rst.Fields(12)
End If
rst.Close
Me.Refresh
End Sub
merci de le consulter afin de voir ce qu'il faudrait faire svp.
NB: toutes les variables sont déclarées d'avance.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 25 juin 2008 à 13:02
Salut
Rien compris à ton problème
"j'aimerais qu'à chaque fois que ce formulaire est chargé, il affiche lee données s'il ont été saisie au préalable"
C'est sur, on va pas afficher des données qui n'existent pas
"dans le cas contraire qu'il soit à mesure de faire une mise à jour"
Un mise à jour de quoi ?
Tu parles de formulaire (et pas de forme) : Tu es vraiment sous VB6 ? ou bien dans le VBA de Access ?
Dans CmdValider_Click, tu fais un Insert ou un Update, puis tu recharges toutes les fiches dans un RecordSet
Ensuite, je ne sais pas pourquoi (tu vas nous le dire), tu testes "rs.EOF" : Quel intérêt ?
En chargeant un RecordSet, tu es toujours sur la 1ère fiche, donc le MoveFirst peut^être effectué sans test préalable.
Ensuite, toujours dans cette même Sub, tu relances le Form_Load avec le Call:
- A éviter : Form_Load est un évènement, ce n'est pas une Sub comme les autres
Si tu as du code à exécuter, mets le dans une Sub personnelle et appelle cette Sub
- Ensuite, tu refais une lecture de toutes les fiches : Tu viens de le faire !
Quel intérêt ?
A mon avis, il y a des lignes en trop.
Dans tous les cas, tu réaffiches toujours la première fiche de la database.
Alors que ce code ne te donne pas satisfaction, c'est une chose, mais va falloir expliquer ce que tu voudrais faire. Ce n'est pas assez clair.
Conseil pour le code des syntaxxe SQL :
En général, les requètes SQL sont longues.
Pour être plus faciles à lire, je te recommande d'utiliser le symbole _ en fin de ligne pour couper une syntaxe VB.
Seul limitation : une vingtaine de _ par ligne de code. Il faut donc terminer la syntaxe de temps en temps.
Exemple :
chsql = "insert into societe " & _
" ( Code_societe, " & _
" Raison_sociale, " & _
" Matricule_juridique, " & _
" Num_scife, " & _
" Code_imposition, " & _
" Regime_CNPS, " & _
" Adresse, " & _
" Boite_postale, " & _
" Localite, " & _
" Pays, " & _
" Telephone, " & _
" Mail, " & _
" Web ) "
chsql = chsql & _
"values('" & txtCode.Text & "','" & _
txtRSociale.Text & "','" & _
txtMatJuridique.Text & "','" & _
txtScife.Text & "','" & _
txtCodeImp.Text & "','" & _
txtCNPS.Text & "','" & _
txtAdresse.Text & "','" & _
txtBP.Text & "','" & _
txtLocalite.Text & "','" & _
txtPays.Text & "','" & _
txtTel.Text & "','" & _
txtMail.Text & "','" & _
txtWeb.Text & " ')" <---- Ici, un espace en trop avant le '
C'est quand même plus facile à relire, non ?
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)