Insersion de données extraite d'une table dans une autre de la même base
baldemm
Messages postés12Date d'inscriptionmardi 16 octobre 2007StatutMembreDernière intervention31 juillet 2009
-
3 août 2008 à 11:19
baldemm
Messages postés12Date d'inscriptionmardi 16 octobre 2007StatutMembreDernière intervention31 juillet 2009
-
5 août 2008 à 23:27
Voici une partie de mon code
'Définition du pilote de connexion et la connection à la base de donnée
cnx.Open "Provider = Microsoft.Jet.OLEDB.4.0;Data source=C:\Documents and Settings\BALDE M M\Bureau\indicMAHAMADOU.mdb"
'Ouverture de la base de données
If cnx.State = adStateOpen Then
cmd.ActiveConnection = cnx
'Un petit message d'info
MsgBox "Vous êtes bien connecter à la base de Mr BALDE"
'La requête à envoyer à ma base de donnée pour extraire les info consernant les anomalie
requete = "SELECT ID,Gravité,Date_de_création,Application,Type_événement,Delai,Code_Groupe FROM Fiches_TD,GroupeAppli,Reactivite where Fiches_TD.Application=GroupeAppli.CodeApplication AND GroupeAppli.Code_Groupe=Reactivite.Groupe_d_Application AND Type_événement='Anomalie' AND Type_de_Solution='Définitive'"
rst.Open requete, cnx
'Une fois le Open exécuté, l'ensemble des enregistrements retournés par le SELECT se trouvent dans l'objet Recordset, ici rst.
'Pour accéder à ces enregistrements nous devons utiliser le champ Field. Chaque champ Field contient une colonne
While Not (rst.EOF)
Echeance = rst("Date_de_création")
For ii = 1 To rst("Delai")
Echeance = JOuvPlus_1(Echeance)
Next
baldemm
Messages postés12Date d'inscriptionmardi 16 octobre 2007StatutMembreDernière intervention31 juillet 2009 3 août 2008 à 11:33
Après l'execution il m'affiche ds 1 boite de dialogue:Aucune valeur donnée pour 1 ou plusieurs parametres requis.
Je n sais pas si le problème ne vient pas de cmd.CommandText.Car l'espion de cmd m'affiche toutes les valeurs correspondante au chps de type text mais le chps de type date il le fait pas le chps ID est de type numerique, Date de création et echéance st de type date .G ss 1 débutant en vba g compte sur vous
voici une partie du code:
'Définition du pilote de connexion et la connection à la base de donnée
cnx.Open "Provider = Microsoft.Jet.OLEDB.4.0;Data source=C:\Documents and Settings\Bureau\indi.mdb"
'Ouverture de la base de données
If cnx.State = adStateOpen Then
cmd.ActiveConnection = cnx
'Un petit message d'info
MsgBox "Vous êtes bien connecter à la base "
'La requête à envoyer à ma base de donnée pour extraire les info consernant les anomalie
requete = "SELECT ID,Gravité,Date_de_création,Application,Type_événement,Delai,Code_Groupe FROM Fiches_TD,GroupeAppli,Reactivite where Fiches_TD.Application=GroupeAppli.CodeApplication AND GroupeAppli.Code_Groupe=Reactivite.Groupe_d_Application AND Type_événement='Anomalie' AND Type_de_Solution='Définitive'"
rst.Open requete, cnx
'Une fois le Open exécuté, l'ensemble des enregistrements retournés par le SELECT se trouvent dans l'objet Recordset, ici rst.
'Pour accéder à ces enregistrements nous devons utiliser le champ Field. Chaque champ Field contient une colonne
While Not (rst.EOF)
Echeance = rst("Date_de_création")
For ii = 1 To rst("Delai")
Echeance = JOuvPlus_1(Echeance)
Next
-Essaies de faire court (sans passer par rst) :
cmd.CommandText = "Insert Into Nom_Table " & _
"(SELECT ID, Gravité, Date_de_création, Application, Type_événement, Delai,Code_Groupe FROM Fiches_TD, GroupeAppli,Reactivite where Fiches_TD. Application=GroupeAppli.CodeApplication AND GroupeAppli.Code_Groupe=Reactivite. Groupe_d_Application AND Type_événement='Anomalie' AND Type_de_Solution='Définitive'):"
<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
baldemm
Messages postés12Date d'inscriptionmardi 16 octobre 2007StatutMembreDernière intervention31 juillet 2009 3 août 2008 à 20:53
ça n marche tjs pas en faite g besoin de l'objet rst pour pouvoir recuperer les date_de_création après compilation g une erreur de syntaxe au niveau de INSERT INTO que g n vois pas g t passe tt le code merci mon amis g compte sur vous
'Ce Programme est pour les Anomalies
Option Explicit
'Déclaration de la variable de connexion
Dim cnx As New ADODB.Connection
'Déclaration de la variable de Recordset
Dim rst As ADODB.Recordset
Dim rst1 As ADODB.Command
Dim cmd As ADODB.Command
Sub Indicateur()
Dim requete As String
Dim requete1 As String
Dim Echeance As Date
Dim joursFeries As Date
Dim ii As Integer
Set cnx = New ADODB.Connection
Set rst = New ADODB.Recordset
'Set rst1 = New ADODB.Command
Set cmd = New ADODB.Command
'Définition du pilote de connexion et la connection à la base de donnée
cnx.Open "Provider = Microsoft.Jet.OLEDB.4.0;Data source=C:\Documents and Settings\Bureau\indic.mdb"
'Ouverture de la base de données
If cnx.State = adStateOpen Then
cmd.ActiveConnection = cnx
'Un petit message d'info
MsgBox "Vous êtes bien connecter à la base "
'La requête à envoyer à ma base de donnée pour extraire les info consernant les anomalie
requete = "SELECT ID,Gravité,Date_de_création,Application,Type_événement,Delai,Code_Groupe FROM Fiches_TD,GroupeAppli,Reactivite where Fiches_TD.Application=GroupeAppli.CodeApplication AND GroupeAppli.Code_Groupe=Reactivite.Groupe_d_Application AND Type_événement='Anomalie' AND Type_de_Solution='Définitive'"
rst.Open requete, cnx
'Une fois le Open exécuté, l'ensemble des enregistrements retournés par le SELECT se trouvent dans l'objet Recordset, ici rst.
'Pour accéder à ces enregistrements nous devons utiliser le champ Field. Chaque champ Field contient une colonne
While Not (rst.EOF)
Echeance = rst("Date_de_création")
For ii = 1 To rst("Delai")
Echeance = JOuvPlus_1(Echeance)
Next
'cmd.CommandType = adCmdText
'Cette requête pr inserer les données dans la table ResultatVbaAcces
cmd.CommandText = "Insert Into ResultatVbaAcces ([ID],[Gravité],[Date_de_création],[Code_Groupe],[Echéance],[Application],[Type_événement]) " & _
"(SELECT ID, Gravité, Date_de_création, Application, Type_événement, Delai,Code_Groupe FROM Fiches_TD, GroupeAppli,Reactivite where Fiches_TD. Application=GroupeAppli.CodeApplication AND GroupeAppli.Code_Groupe=Reactivite. Groupe_d_Application AND Type_événement='Anomalie' AND Type_de_Solution='Définitive'):"
Else
'Un petit message d'info
MsgBox "Echec de connection à la BD "
End If
End Sub
'Je dois tenir aussi compte des jours ferier car,ils ne sont pas ouvrable Donc il faut creéer
'La fonction EstFerie(). Celle-ci en appelle une autre fLundiPaques() qui
'renvoie la date du lundi de Pâques
Function JFerier(ByVal QuelleDate As Date) As Boolean
Dim AnneeDate As Integer
Dim joursFeries(1 To 11) As Date
Dim i As Integer
For i = 1 To 11
If QuelleDate = joursFeries(i) Then
JFerier = True
Exit For
End If
Next
End Function
'Le lundi de paques aussi
Private Function fLundiPaques(ByVal Iyear As Integer) As Date
'Adapté de +ieurs scripts...
Dim L(6) As Long, Lj As Long, Lm As Long
L(1) Iyear Mod 19: L(2) Iyear Mod 4: L(3) = Iyear Mod 7
L(4) = (19 * L(1) + 24) Mod 30
L(5) = ((2 * L(2)) + (4 * L(3)) + (6 * L(4)) + 5) Mod 7
L(6) = 22 + L(4) + L(5)
If L(6) > 31 Then
Lj = L(6) - 31
Lm = 4
Else
Lj = L(6)
Lm = 3
End If
Private Function Week_End(ByVal dt As Date) As Boolean
Dim tt As Integer
tt = Weekday(dt)
If (tt 1) Or (tt 7) Then
'1 dimanche> pour Dimanche on fait delai +1 '7 samedi> pour Samedi on fait delai +2
Week_End = True
Else
Week_End = False
End If
End Function
Private Function JOuvPlus_1(ByVal JoT As Date) As Date
Dim wt As Date
wt = DateAdd("d", 1, JoT)
While (Week_End(wt)) Or (JFerier(wt))
wt = DateAdd("d", 1, wt)
Wend
JOuvPlus_1 = wt
End Function
G 1 erreur de syntax au niveau de mon INSERT INTO que g n vois pas merci de m'aider
baldemm
Messages postés12Date d'inscriptionmardi 16 octobre 2007StatutMembreDernière intervention31 juillet 2009 3 août 2008 à 21:39
ça n marche tjs pas en faite g besoin de l'objet rst pour pouvoir recuperer les date_de_création après compilation g une erreur de syntaxe au niveau de INSERT INTO que g n vois pas g t passe tt le code merci mon amis g compte sur vous
'Ce Programme est pour les Anomalies
Option Explicit
'Déclaration de la variable de connexion
Dim cnx As New ADODB.Connection
'Déclaration de la variable de Recordset
Dim rst As ADODB.Recordset
Dim rst1 As ADODB.Command
Dim cmd As ADODB.Command
Sub Indicateur()
Dim requete As String
Dim requete1 As String
Dim Echeance As Date
Dim joursFeries As Date
Dim ii As Integer
Set cnx = New ADODB.Connection
Set rst = New ADODB.Recordset
'Set rst1 = New ADODB.Command
Set cmd = New ADODB.Command
'Définition du pilote de connexion et la connection à la base de donnée
cnx.Open "Provider = Microsoft.Jet.OLEDB.4.0;Data source=C:\Documents and Settings\Bureau\indic.mdb"
'Ouverture de la base de données
If cnx.State = adStateOpen Then
cmd.ActiveConnection = cnx
'Un petit message d'info
MsgBox "Vous êtes bien connecter à la base "
'La requête à envoyer à ma base de donnée pour extraire les info consernant les anomalie
requete = "SELECT ID,Gravité,Date_de_création,Application,Type_événement,Delai,Code_Groupe FROM Fiches_TD,GroupeAppli,Reactivite where Fiches_TD.Application=GroupeAppli.CodeApplication AND GroupeAppli.Code_Groupe=Reactivite.Groupe_d_Application AND Type_événement='Anomalie' AND Type_de_Solution='Définitive'"
rst.Open requete, cnx
'Une fois le Open exécuté, l'ensemble des enregistrements retournés par le SELECT se trouvent dans l'objet Recordset, ici rst.
'Pour accéder à ces enregistrements nous devons utiliser le champ Field. Chaque champ Field contient une colonne
While Not (rst.EOF)
Echeance = rst("Date_de_création")
For ii = 1 To rst("Delai")
Echeance = JOuvPlus_1(Echeance)
Next
'cmd.CommandType = adCmdText
'Cette requête pr inserer les données dans la table ResultatVbaAcces
cmd.CommandText = "Insert Into ResultatVbaAcces ([ID],[Gravité],[Date_de_création],[Code_Groupe],[Echéance],[Application],[Type_événement]) " & _
"(SELECT ID, Gravité, Date_de_création, Application, Type_événement, Delai,Code_Groupe FROM Fiches_TD, GroupeAppli,Reactivite where Fiches_TD. Application=GroupeAppli.CodeApplication AND GroupeAppli.Code_Groupe=Reactivite. Groupe_d_Application AND Type_événement='Anomalie' AND Type_de_Solution='Définitive'):"
Else
'Un petit message d'info
MsgBox "Echec de connection à la BD "
End If
End Sub
'Je dois tenir aussi compte des jours ferier car,ils ne sont pas ouvrable Donc il faut creéer
'La fonction EstFerie(). Celle-ci en appelle une autre fLundiPaques() qui
'renvoie la date du lundi de Pâques
Function JFerier(ByVal QuelleDate As Date) As Boolean
Dim AnneeDate As Integer
Dim joursFeries(1 To 11) As Date
Dim i As Integer
For i = 1 To 11
If QuelleDate = joursFeries(i) Then
JFerier = True
Exit For
End If
Next
End Function
'Le lundi de paques aussi
Private Function fLundiPaques(ByVal Iyear As Integer) As Date
'Adapté de +ieurs scripts...
Dim L(6) As Long, Lj As Long, Lm As Long
L(1) Iyear Mod 19: L(2) Iyear Mod 4: L(3) = Iyear Mod 7
L(4) = (19 * L(1) + 24) Mod 30
L(5) = ((2 * L(2)) + (4 * L(3)) + (6 * L(4)) + 5) Mod 7
L(6) = 22 + L(4) + L(5)
If L(6) > 31 Then
Lj = L(6) - 31
Lm = 4
Else
Lj = L(6)
Lm = 3
End If
Private Function Week_End(ByVal dt As Date) As Boolean
Dim tt As Integer
tt = Weekday(dt)
If (tt 1) Or (tt 7) Then
'1 dimanche> pour Dimanche on fait delai +1 '7 samedi> pour Samedi on fait delai +2
Week_End = True
Else
Week_End = False
End If
End Function
Private Function JOuvPlus_1(ByVal JoT As Date) As Date
Dim wt As Date
wt = DateAdd("d", 1, JoT)
While (Week_End(wt)) Or (JFerier(wt))
wt = DateAdd("d", 1, wt)
Wend
JOuvPlus_1 = wt
End Function
G 1 erreur de syntax au niveau de mon INSERT INTO que g n vois pas merci de m'aider
Vous n’avez pas trouvé la réponse que vous recherchez ?
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 3 août 2008 à 23:45
excuses moi mais je ne comprend rien à tes boucles
dont tu n' en sors, en fin de comptes, qu' avec la dernière valeur.
Echeance = rst("Date_de_création")
For ii = 1 To rst("Delai")
Echeance = JOuvPlus_1(Echeance)
Next
wt = DateAdd("d", 1, JoT)
While (Week_End(wt)) Or (JFerier(wt))
wt = DateAdd("d", 1, wt)
Wend
Autant aller au dernier.
Pour ta requete Insert les champs enumèrer dans la partie SELECT doivent être:
-1° Au même nombre que ceux que tu veux insèrer
-2° Dans l' ordre de leurs enumèration dans la partie INSERT.
.3° Du même type.
Si tu ne respectes pas ces trois conditions tu va te retrouver avec soit des champs manquants soit des champs de type différents.
Revoies donc ta requete et n' oublies pas les espaces après les virgules.
<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
baldemm
Messages postés12Date d'inscriptionmardi 16 octobre 2007StatutMembreDernière intervention31 juillet 2009 4 août 2008 à 07:06
Slt LIBRE_MAX exuse moi de c derangement mais sache que c mes premier jour en vba merci pr ton aide:
'cmd.CommandText = "INSERT INTO ResultatVbaAcces(ID,Gravité,Date_de_création,Code_Groupe,Echéance,Application,Type_événement) " & _
'"(SELECT ID,Gravité,Date_de_création,Code_Groupe,Echéance,Application,Type_événement FROM Fiches_TD, GroupeAppli,Reactivite where Fiches_TD. Application=GroupeAppli.CodeApplication AND GroupeAppli.Code_Groupe=Reactivite. Groupe_d_Application AND Type_événement='Anomalie' AND Type_de_Solution='Définitive'):"
pr cette requete tous les chp sauf échence st extrait des table qui existe déjà c'est une jointure.
ID : est de type numérique (ds insert et dans select)
Gravité: est de type texte (ds insert et dans select)
Date_de_création : est de type Date (ds insert et dans select)
Code_Groupe : est de type texte (ds insert et dans select)
Echéance : est de type date (ds insert et dans select) est le resultat d'un calcul
Application : est de type texte (ds insert et dans select)
Type_événement : est de type texte (ds insert et dans select)
Effectivement après avoir ajouté un espion cmd g trouve que tous les chps de type text st recuperer mes pas pour les type date. Mnt le souci est que c'est table existe déjà c n pas moi qui l creéé,la question est comment faire pour satisfaire tes 3 condition
1° Au même nombre que ceux que tu veux insèrer
-2° Dans l' ordre de leurs enumèration dans la partie INSERT.
.3° Du même type.
G pense que les 2 première st satisfait merci pr ton aide et ta bonne compréhension
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 4 août 2008 à 11:32
Bonjour,
"INSERT INTO ResultatVbaAcces(ID,Gravité,Date_de_création,Code_Groupe,Echéance,Application,Type_événement) " & _
'"(SELECT ID,Gravité,Date_de_création,Code_Groupe,Echéance,Application,Type_événement
ça c' est bon !
Même nombre, dans l' ordre = =>Même type.
Reste le champ Echeance.
Dns la partie Insert Echeance est un champ de la table
hote ResultatVbaAcces.
Dans la artie SELECT c' est une variable.Il faudera l' isoler de la partie FROM.
Essaies dans un premier test ceci:
"INSERT INTO ResultatVbaAcces(ID, Gravité, Date_de_création, Code_Groupe, Application, Type_événement, Echéance ) " & _
'"(SELECT ID, Gravité, Date_de_création, Code_Groupe , Application, Type_événement FROM Fiches_TD, GroupeAppli,Reactivite where Fiches_TD. Application =GroupeAppli.CodeApplication AND GroupeAppli.Code_Groupe=Reactivite. Groupe_d_Application AND Type_événement='Anomalie' AND Type_de_Solution='Définitive')" & Echéance & ":"
Echeance donc en dernier.Comme champ dans INSERT et comme variable dans SELECT.
Et n' oublies pas (une fois de plus ) stp les espaces après les virgules.
<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
baldemm
Messages postés12Date d'inscriptionmardi 16 octobre 2007StatutMembreDernière intervention31 juillet 2009 4 août 2008 à 23:35
Bonsoir mon amis pr l'instant j'execute le programme g vois une page disons blanche et le curseur se met en mode attente(execution en cours) mais là pr le moment la table est tjs vide.Mais g m ss dis que l'execution doit prendre bcp de tps peut être. merci g t tiendrai au courant
baldemm
Messages postés12Date d'inscriptionmardi 16 octobre 2007StatutMembreDernière intervention31 juillet 2009 5 août 2008 à 23:27
Slt LIBRE_MAX sache g t pas oublié mé seulement j'avais 1 blème de connexion.G ss vraiment très content car tu ma sauvé la vie mon programme marche bien c super super tu es très cool est sympa merci 10000000000000 fois encore merci