acn a écrit, le 23/10/2010 12:14 :La fenetre de débogage se positionne sur
db.Execute sQry
Bonjour,
Par "la fenêtre de débogage se positionne sur", faut-il
entendre qu'u ne
erreur se produit, un message s'affiche, et ensuite cette instruction
est affichée surlignée en jaune ?
C'est assez classique si il y a une erreur dans la requête.
Dans la fenêtre d'exécution (celle qu'on ouvre par Ctrl G), taper
? sQry
(et appuyer sur Entrée)
Si on veut obtenir ça par une instruction placée juste avant
db.Execu te,
c'est
Debug.Print sQry
Ensuite, copier le code de la requête, tel qu'il s'affiche dans la
fenêtre d'exécution, et le coller dans l'éditeur de
requête.
C'est-à-dire, créer une nouvelle requête, fermer la
boîte de dial ogue de
choix d'une table, changer le mode d'affichage vers SQL, et coller (Ctrl
V) ce qu'on a copié par Ctrl C depuis la fenêtre
d'exécution.
Exécuter en cliquant sur le point d'exclamation rouge sur la barre
d'outils en haut de l'éditeur de requêtes, lire le message
d'erreur, il
est fort susceptible d'être plus clair que depuis un module.
Ensuite, je crois qu'on n'a plus qu'à le taper si on a une question
à
poser dessus. Pour une erreur qui se produit depuis un module, on peut
taper dans la fenêtre d'exécution ? Err.Number &
Err.Description, mai s
depuis l'éditeur de requêtes, je doute que l'équivalent
existe.
acn a écrit, le 23/10/2010 12:14 :
La fenetre de débogage se positionne sur
db.Execute sQry
Bonjour,
Par "la fenêtre de débogage se positionne sur", faut-il
entendre qu'u ne
erreur se produit, un message s'affiche, et ensuite cette instruction
est affichée surlignée en jaune ?
C'est assez classique si il y a une erreur dans la requête.
Dans la fenêtre d'exécution (celle qu'on ouvre par Ctrl G), taper
? sQry
(et appuyer sur Entrée)
Si on veut obtenir ça par une instruction placée juste avant
db.Execu te,
c'est
Debug.Print sQry
Ensuite, copier le code de la requête, tel qu'il s'affiche dans la
fenêtre d'exécution, et le coller dans l'éditeur de
requête.
C'est-à-dire, créer une nouvelle requête, fermer la
boîte de dial ogue de
choix d'une table, changer le mode d'affichage vers SQL, et coller (Ctrl
V) ce qu'on a copié par Ctrl C depuis la fenêtre
d'exécution.
Exécuter en cliquant sur le point d'exclamation rouge sur la barre
d'outils en haut de l'éditeur de requêtes, lire le message
d'erreur, il
est fort susceptible d'être plus clair que depuis un module.
Ensuite, je crois qu'on n'a plus qu'à le taper si on a une question
à
poser dessus. Pour une erreur qui se produit depuis un module, on peut
taper dans la fenêtre d'exécution ? Err.Number &
Err.Description, mai s
depuis l'éditeur de requêtes, je doute que l'équivalent
existe.
acn a écrit, le 23/10/2010 12:14 :La fenetre de débogage se positionne sur
db.Execute sQry
Bonjour,
Par "la fenêtre de débogage se positionne sur", faut-il
entendre qu'u ne
erreur se produit, un message s'affiche, et ensuite cette instruction
est affichée surlignée en jaune ?
C'est assez classique si il y a une erreur dans la requête.
Dans la fenêtre d'exécution (celle qu'on ouvre par Ctrl G), taper
? sQry
(et appuyer sur Entrée)
Si on veut obtenir ça par une instruction placée juste avant
db.Execu te,
c'est
Debug.Print sQry
Ensuite, copier le code de la requête, tel qu'il s'affiche dans la
fenêtre d'exécution, et le coller dans l'éditeur de
requête.
C'est-à-dire, créer une nouvelle requête, fermer la
boîte de dial ogue de
choix d'une table, changer le mode d'affichage vers SQL, et coller (Ctrl
V) ce qu'on a copié par Ctrl C depuis la fenêtre
d'exécution.
Exécuter en cliquant sur le point d'exclamation rouge sur la barre
d'outils en haut de l'éditeur de requêtes, lire le message
d'erreur, il
est fort susceptible d'être plus clair que depuis un module.
Ensuite, je crois qu'on n'a plus qu'à le taper si on a une question
à
poser dessus. Pour une erreur qui se produit depuis un module, on peut
taper dans la fenêtre d'exécution ? Err.Number &
Err.Description, mai s
depuis l'éditeur de requêtes, je doute que l'équivalent
existe.
J'ai fait la manip. indiquée.
Voici la requète en SQL générée:
Insert Into T_Temp (Nom, Prenom, Dates, PNomP, NomM, PNomM, Lieu,
Paroisse, AN, MOIS, JOUR, Reference, Observations, INSEE) Values
("CHALON","Françoise
Anne","17/11/1745","Jean","BERTON","Françoise","Loches
37132","","1745","11","17","",,"37132");
voici celle qui fonctionne:
Insert Into T_Temp (Nom, Prenom, Dates, PNomP, NomM, PNomM, Lieu,
Paroisse, AN, MOIS, JOUR, Reference, Observations, INSEE) Values
("CHALON","Françoise
Anne","17/11/1745","Jean","BERTON","Françoise","Loches
37132","","1745","11","17","","","37132");
Elle fonctionne après avoir mis à jour 1 noms de champs dans la
table: le champ Date est renommé en Dates, il devait y avoir un
problème car Date doit être vu comme une instruction je pense.
La 2ème erreur vient de la définition du champ Observations qui a le
Type de données Mémo et cela je ne peux pas le changer car les infos
de ce champs dépassent les 255 caractères.
Dans la requète d'origine j'ai ajouté les "" avant "37132"); qui ne
viennent pas sur le message d'erreur et cela fonctionne.
Reste à régler le problème du Type de données Mémo;
J'ai fait la manip. indiquée.
Voici la requète en SQL générée:
Insert Into T_Temp (Nom, Prenom, Dates, PNomP, NomM, PNomM, Lieu,
Paroisse, AN, MOIS, JOUR, Reference, Observations, INSEE) Values
("CHALON","Françoise
Anne","17/11/1745","Jean","BERTON","Françoise","Loches
37132","","1745","11","17","",,"37132");
voici celle qui fonctionne:
Insert Into T_Temp (Nom, Prenom, Dates, PNomP, NomM, PNomM, Lieu,
Paroisse, AN, MOIS, JOUR, Reference, Observations, INSEE) Values
("CHALON","Françoise
Anne","17/11/1745","Jean","BERTON","Françoise","Loches
37132","","1745","11","17","","","37132");
Elle fonctionne après avoir mis à jour 1 noms de champs dans la
table: le champ Date est renommé en Dates, il devait y avoir un
problème car Date doit être vu comme une instruction je pense.
La 2ème erreur vient de la définition du champ Observations qui a le
Type de données Mémo et cela je ne peux pas le changer car les infos
de ce champs dépassent les 255 caractères.
Dans la requète d'origine j'ai ajouté les "" avant "37132"); qui ne
viennent pas sur le message d'erreur et cela fonctionne.
Reste à régler le problème du Type de données Mémo;
J'ai fait la manip. indiquée.
Voici la requète en SQL générée:
Insert Into T_Temp (Nom, Prenom, Dates, PNomP, NomM, PNomM, Lieu,
Paroisse, AN, MOIS, JOUR, Reference, Observations, INSEE) Values
("CHALON","Françoise
Anne","17/11/1745","Jean","BERTON","Françoise","Loches
37132","","1745","11","17","",,"37132");
voici celle qui fonctionne:
Insert Into T_Temp (Nom, Prenom, Dates, PNomP, NomM, PNomM, Lieu,
Paroisse, AN, MOIS, JOUR, Reference, Observations, INSEE) Values
("CHALON","Françoise
Anne","17/11/1745","Jean","BERTON","Françoise","Loches
37132","","1745","11","17","","","37132");
Elle fonctionne après avoir mis à jour 1 noms de champs dans la
table: le champ Date est renommé en Dates, il devait y avoir un
problème car Date doit être vu comme une instruction je pense.
La 2ème erreur vient de la définition du champ Observations qui a le
Type de données Mémo et cela je ne peux pas le changer car les infos
de ce champs dépassent les 255 caractères.
Dans la requète d'origine j'ai ajouté les "" avant "37132"); qui ne
viennent pas sur le message d'erreur et cela fonctionne.
Reste à régler le problème du Type de données Mémo;
Salut,
Pourrais-tu répondre correctement dans le fil ?
et non bêtement au dernier post ?...
acn wrote:J'ai fait la manip. indiquée.
Voici la requète en SQL générée:
Insert Into T_Temp (Nom, Prenom, Dates, PNomP, NomM, PNomM, Lieu,
Paroisse, AN, MOIS, JOUR, Reference, Observations, INSEE) Values
("CHALON","Françoise
Anne","17/11/1745","Jean","BERTON","Françoise","Loches
37132","","1745","11","17","",,"37132");
voici celle qui fonctionne:
Insert Into T_Temp (Nom, Prenom, Dates, PNomP, NomM, PNomM, Lieu,
Paroisse, AN, MOIS, JOUR, Reference, Observations, INSEE) Values
("CHALON","Françoise
Anne","17/11/1745","Jean","BERTON","Françoise","Loches
37132","","1745","11","17","","","37132");
Elle fonctionne après avoir mis à jour 1 noms de champs dans la
table: le champ Date est renommé en Dates, il devait y avoir un
problème car Date doit être vu comme une instruction je pense.
Erreur de débutant !
Il ne faut jamais utiliser de noms de fonction ou mots réservés
pour nommer les champs.
Ceci s'applique à TOUS LES OBJETS d'Access.
A lire absolument:
http://support.microsoft.com/kb/286335/fr?spid%09&sida8
http://support.microsoft.com/kb/826763/frLa 2ème erreur vient de la définition du champ Observations qui
a le
Type de données Mémo et cela je ne peux pas le changer car les
infos
de ce champs dépassent les 255 caractères.
Dans la requète d'origine j'ai ajouté les "" avant
"37132"); qui ne
viennent pas sur le message d'erreur et cela fonctionne.
Reste à régler le problème du Type de données
Mémo;
En général, les guillemets n'ont rien à faire dans un
champ...
Je regarde pour les mémo !
--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Salut,
Pourrais-tu répondre correctement dans le fil ?
et non bêtement au dernier post ?...
acn wrote:
J'ai fait la manip. indiquée.
Voici la requète en SQL générée:
Insert Into T_Temp (Nom, Prenom, Dates, PNomP, NomM, PNomM, Lieu,
Paroisse, AN, MOIS, JOUR, Reference, Observations, INSEE) Values
("CHALON","Françoise
Anne","17/11/1745","Jean","BERTON","Françoise","Loches
37132","","1745","11","17","",,"37132");
voici celle qui fonctionne:
Insert Into T_Temp (Nom, Prenom, Dates, PNomP, NomM, PNomM, Lieu,
Paroisse, AN, MOIS, JOUR, Reference, Observations, INSEE) Values
("CHALON","Françoise
Anne","17/11/1745","Jean","BERTON","Françoise","Loches
37132","","1745","11","17","","","37132");
Elle fonctionne après avoir mis à jour 1 noms de champs dans la
table: le champ Date est renommé en Dates, il devait y avoir un
problème car Date doit être vu comme une instruction je pense.
Erreur de débutant !
Il ne faut jamais utiliser de noms de fonction ou mots réservés
pour nommer les champs.
Ceci s'applique à TOUS LES OBJETS d'Access.
A lire absolument:
http://support.microsoft.com/kb/286335/fr?spid%09&sida8
http://support.microsoft.com/kb/826763/fr
La 2ème erreur vient de la définition du champ Observations qui
a le
Type de données Mémo et cela je ne peux pas le changer car les
infos
de ce champs dépassent les 255 caractères.
Dans la requète d'origine j'ai ajouté les "" avant
"37132"); qui ne
viennent pas sur le message d'erreur et cela fonctionne.
Reste à régler le problème du Type de données
Mémo;
En général, les guillemets n'ont rien à faire dans un
champ...
Je regarde pour les mémo !
--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Salut,
Pourrais-tu répondre correctement dans le fil ?
et non bêtement au dernier post ?...
acn wrote:J'ai fait la manip. indiquée.
Voici la requète en SQL générée:
Insert Into T_Temp (Nom, Prenom, Dates, PNomP, NomM, PNomM, Lieu,
Paroisse, AN, MOIS, JOUR, Reference, Observations, INSEE) Values
("CHALON","Françoise
Anne","17/11/1745","Jean","BERTON","Françoise","Loches
37132","","1745","11","17","",,"37132");
voici celle qui fonctionne:
Insert Into T_Temp (Nom, Prenom, Dates, PNomP, NomM, PNomM, Lieu,
Paroisse, AN, MOIS, JOUR, Reference, Observations, INSEE) Values
("CHALON","Françoise
Anne","17/11/1745","Jean","BERTON","Françoise","Loches
37132","","1745","11","17","","","37132");
Elle fonctionne après avoir mis à jour 1 noms de champs dans la
table: le champ Date est renommé en Dates, il devait y avoir un
problème car Date doit être vu comme une instruction je pense.
Erreur de débutant !
Il ne faut jamais utiliser de noms de fonction ou mots réservés
pour nommer les champs.
Ceci s'applique à TOUS LES OBJETS d'Access.
A lire absolument:
http://support.microsoft.com/kb/286335/fr?spid%09&sida8
http://support.microsoft.com/kb/826763/frLa 2ème erreur vient de la définition du champ Observations qui
a le
Type de données Mémo et cela je ne peux pas le changer car les
infos
de ce champs dépassent les 255 caractères.
Dans la requète d'origine j'ai ajouté les "" avant
"37132"); qui ne
viennent pas sur le message d'erreur et cela fonctionne.
Reste à régler le problème du Type de données
Mémo;
En général, les guillemets n'ont rien à faire dans un
champ...
Je regarde pour les mémo !
--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
On voit bien ,,"37132"); il manque les "" entre les deux virgules.
quand cette requète est lancée en création de requète et que j'ajoute
les deux " entre les virgules, la requète fonctionne.
On voit bien ,,"37132"); il manque les "" entre les deux virgules.
quand cette requète est lancée en création de requète et que j'ajoute
les deux " entre les virgules, la requète fonctionne.
On voit bien ,,"37132"); il manque les "" entre les deux virgules.
quand cette requète est lancée en création de requète et que j'ajoute
les deux " entre les virgules, la requète fonctionne.
Salut,
acn wrote:
[...]On voit bien ,,"37132"); il manque les "" entre les deux
virgules.
quand cette requète est lancée en création de
requète et que j'ajoute
les deux " entre les virgules, la requète fonctionne.
Essaie cette version :
Dim Db As DAO.Database
Dim sFld As String, sQry As String
Dim sF As String, sSrc As String
Dim l As Integer
Dim f As Field
Set Db = CurrentDb
'
'/ SQL de création de la table temporaire
If InStr(Me.RecordSource, "Select") Then
'source chaine sql
sF = Me.RecordSource
sSrc = Mid(sF, InStr(1, sF, "From") + 4)
sSrc = Trim(Replace(sSrc, ";", ""))
sF = Replace(sF, sSrc & ".", "")
l = InStr(sF, "From") - 1
sFld = Mid(sF, 7, l - 7)
sQry = "Select Top 1 " & sFld & " Into T_Temp "
& Mid(sF, l)
Else
'source est une table
With Me.RecordsetClone
For Each f In .Fields
If Len(sFld) = 0 Then
sFld = f.Name
Else
sFld = sFld & ", " & f.Name
End If
Next f
End With
sQry = "Select TOP 1 " & sFld & " Into T_Temp From
" & Me.RecordSource & ";"
End If
'/ Création de la table temporaire
With DoCmd
.SetWarnings False
.RunSQL sQry
.SetWarnings True
End With
'// Vider la table temporaire
Db.Execute "Delete * From T_Temp"
sQry = ""
'
'// Si le formulaire n'est pas vide
If Me.RecordsetClone.RecordCount > 0 Then
With Me.RecordsetClone
'// Boucler sur les enregistrements du formulaire
Do Until .EOF
'// Créer la requête SQL
sQry = "Insert Into T_Temp (" & sFld & ") Values ("
For Each f In .Fields
If f.Type = dbText Or f.Type = dbMemo Then
If IsNull(f.Value) Then
sQry = sQry & """"
Else
sQry = sQry & Chr(34) & f.Value & Chr(34) & ","
End If
Else
sQry = sQry & f.Value & ","
End If
Next f
sQry = Left(sQry, Len(sQry) - 1) & ");"
.MoveNext
Db.Execute sQry
Loop
End With
End If
'// Libérer
Set Db = Nothing
--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Salut,
acn wrote:
[...]
On voit bien ,,"37132"); il manque les "" entre les deux
virgules.
quand cette requète est lancée en création de
requète et que j'ajoute
les deux " entre les virgules, la requète fonctionne.
Essaie cette version :
Dim Db As DAO.Database
Dim sFld As String, sQry As String
Dim sF As String, sSrc As String
Dim l As Integer
Dim f As Field
Set Db = CurrentDb
'
'/ SQL de création de la table temporaire
If InStr(Me.RecordSource, "Select") Then
'source chaine sql
sF = Me.RecordSource
sSrc = Mid(sF, InStr(1, sF, "From") + 4)
sSrc = Trim(Replace(sSrc, ";", ""))
sF = Replace(sF, sSrc & ".", "")
l = InStr(sF, "From") - 1
sFld = Mid(sF, 7, l - 7)
sQry = "Select Top 1 " & sFld & " Into T_Temp "
& Mid(sF, l)
Else
'source est une table
With Me.RecordsetClone
For Each f In .Fields
If Len(sFld) = 0 Then
sFld = f.Name
Else
sFld = sFld & ", " & f.Name
End If
Next f
End With
sQry = "Select TOP 1 " & sFld & " Into T_Temp From
" & Me.RecordSource & ";"
End If
'/ Création de la table temporaire
With DoCmd
.SetWarnings False
.RunSQL sQry
.SetWarnings True
End With
'// Vider la table temporaire
Db.Execute "Delete * From T_Temp"
sQry = ""
'
'// Si le formulaire n'est pas vide
If Me.RecordsetClone.RecordCount > 0 Then
With Me.RecordsetClone
'// Boucler sur les enregistrements du formulaire
Do Until .EOF
'// Créer la requête SQL
sQry = "Insert Into T_Temp (" & sFld & ") Values ("
For Each f In .Fields
If f.Type = dbText Or f.Type = dbMemo Then
If IsNull(f.Value) Then
sQry = sQry & """"
Else
sQry = sQry & Chr(34) & f.Value & Chr(34) & ","
End If
Else
sQry = sQry & f.Value & ","
End If
Next f
sQry = Left(sQry, Len(sQry) - 1) & ");"
.MoveNext
Db.Execute sQry
Loop
End With
End If
'// Libérer
Set Db = Nothing
--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Salut,
acn wrote:
[...]On voit bien ,,"37132"); il manque les "" entre les deux
virgules.
quand cette requète est lancée en création de
requète et que j'ajoute
les deux " entre les virgules, la requète fonctionne.
Essaie cette version :
Dim Db As DAO.Database
Dim sFld As String, sQry As String
Dim sF As String, sSrc As String
Dim l As Integer
Dim f As Field
Set Db = CurrentDb
'
'/ SQL de création de la table temporaire
If InStr(Me.RecordSource, "Select") Then
'source chaine sql
sF = Me.RecordSource
sSrc = Mid(sF, InStr(1, sF, "From") + 4)
sSrc = Trim(Replace(sSrc, ";", ""))
sF = Replace(sF, sSrc & ".", "")
l = InStr(sF, "From") - 1
sFld = Mid(sF, 7, l - 7)
sQry = "Select Top 1 " & sFld & " Into T_Temp "
& Mid(sF, l)
Else
'source est une table
With Me.RecordsetClone
For Each f In .Fields
If Len(sFld) = 0 Then
sFld = f.Name
Else
sFld = sFld & ", " & f.Name
End If
Next f
End With
sQry = "Select TOP 1 " & sFld & " Into T_Temp From
" & Me.RecordSource & ";"
End If
'/ Création de la table temporaire
With DoCmd
.SetWarnings False
.RunSQL sQry
.SetWarnings True
End With
'// Vider la table temporaire
Db.Execute "Delete * From T_Temp"
sQry = ""
'
'// Si le formulaire n'est pas vide
If Me.RecordsetClone.RecordCount > 0 Then
With Me.RecordsetClone
'// Boucler sur les enregistrements du formulaire
Do Until .EOF
'// Créer la requête SQL
sQry = "Insert Into T_Temp (" & sFld & ") Values ("
For Each f In .Fields
If f.Type = dbText Or f.Type = dbMemo Then
If IsNull(f.Value) Then
sQry = sQry & """"
Else
sQry = sQry & Chr(34) & f.Value & Chr(34) & ","
End If
Else
sQry = sQry & f.Value & ","
End If
Next f
sQry = Left(sQry, Len(sQry) - 1) & ");"
.MoveNext
Db.Execute sQry
Loop
End With
End If
'// Libérer
Set Db = Nothing
--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
3stone a écrit le 28/10/2010 à 15h20 :Salut,
acn wrote:
[...]On voit bien ,,"37132"); il manque les "" entre les deux
virgules.
quand cette requète est lancée en création de
requète et que j'ajoute
les deux " entre les virgules, la requète fonctionne.
Essaie cette version :
Dim Db As DAO.Database
Dim sFld As String, sQry As String
Dim sF As String, sSrc As String
Dim l As Integer
Dim f As Field
Set Db = CurrentDb
'
'/ SQL de création de la table temporaire
If InStr(Me.RecordSource, "Select") Then
'source chaine sql
sF = Me.RecordSource
sSrc = Mid(sF, InStr(1, sF, "From") + 4)
sSrc = Trim(Replace(sSrc, ";", ""))
sF = Replace(sF, sSrc & ".", "")
l = InStr(sF, "From") - 1
sFld = Mid(sF, 7, l - 7)
sQry = "Select Top 1 " & sFld & " Into T_Temp "
& Mid(sF, l)
Else
'source est une table
With Me.RecordsetClone
For Each f In .Fields
If Len(sFld) = 0 Then
sFld = f.Name
Else
sFld = sFld & ", " & f.Name
End If
Next f
End With
sQry = "Select TOP 1 " & sFld & " Into T_Temp From
" & Me.RecordSource & ";"
End If
'/ Création de la table temporaire
With DoCmd
.SetWarnings False
.RunSQL sQry
.SetWarnings True
End With
'// Vider la table temporaire
Db.Execute "Delete * From T_Temp"
sQry = ""
'
'// Si le formulaire n'est pas vide
If Me.RecordsetClone.RecordCount > 0 Then
With Me.RecordsetClone
'// Boucler sur les enregistrements du formulaire
Do Until .EOF
'// Créer la requête SQL
sQry = "Insert Into T_Temp (" & sFld & ") Values
("
For Each f In .Fields
If f.Type = dbText Or f.Type = dbMemo Then
If IsNull(f.Value) Then
sQry = sQry & """"
Else
sQry = sQry & Chr(34) & f.Value & Chr(34) & ","
End If
Else
sQry = sQry & f.Value & ","
End If
Next f
sQry = Left(sQry, Len(sQry) - 1) & ");"
.MoveNext
Db.Execute sQry
Loop
End With
End If
'// Libérer
Set Db = Nothing
--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Bonjour,
Il y a toujours un problème pour délimiter les champs vides
Avec
If f.Type = dbText Or f.Type = dbMemo Then
If IsNull(f.Value) Then
sQry = sQry & """"
Erreur d’exécution 3075
Erreur de syntaxe (opérateur absent ) dans l’expression
Insert Insert Into T_Temp (Nom, Prenom, Dates, PNomP, NomM, PNomM, Lieu,
Paroisse, AN, MOIS, JOUR, Reference, Observations, INSEE) Values
("CHALON","Jean","17/11/1777","Jean","CARATES","Anne","Sennevières
37246",""1777","11","17","""37246");
il manque des virgule pour séparer les champs vides.
Avec
If f.Type = dbText Or f.Type = dbMemo Then
If IsNull(f.Value) Then
sQry = sQry & ","
Erreur d’exécution 3075
Erreur de syntaxe dans l’expression INSERT INTO
Insert Into T_Temp (Nom, Prenom, Dates, PNomP, NomM, PNomM, Lieu, Paroisse, AN,
MOIS, JOUR, Reference, Observations, INSEE) Values
("CHALON","Françoise
Anne","17/11/1745","Jean","BERTON","Françoise","Loches
37132",,"1745","11","17",,,"37132");
il manque des "" entre les virgules
Je n’arrive pas à combiner les 2 expressions
sQry = sQry & """"
et
sQry = sQry & "," pour avoir le résultat voulu, car
quand on passe en mode requète un champ vide est bien indiqué
,"",
j'ai fait plusieurs essais avec """," ou
",""" cela déplace les virgule ou les ""
mais pas au bon endroit
"","" ne fonctionne pas car message Attendu fin
d'instruction.
Je ne sais pas s'il y a une solution.
Merci
3stone a écrit le 28/10/2010 à 15h20 :
Salut,
acn wrote:
[...]
On voit bien ,,"37132"); il manque les "" entre les deux
virgules.
quand cette requète est lancée en création de
requète et que j'ajoute
les deux " entre les virgules, la requète fonctionne.
Essaie cette version :
Dim Db As DAO.Database
Dim sFld As String, sQry As String
Dim sF As String, sSrc As String
Dim l As Integer
Dim f As Field
Set Db = CurrentDb
'
'/ SQL de création de la table temporaire
If InStr(Me.RecordSource, "Select") Then
'source chaine sql
sF = Me.RecordSource
sSrc = Mid(sF, InStr(1, sF, "From") + 4)
sSrc = Trim(Replace(sSrc, ";", ""))
sF = Replace(sF, sSrc & ".", "")
l = InStr(sF, "From") - 1
sFld = Mid(sF, 7, l - 7)
sQry = "Select Top 1 " & sFld & " Into T_Temp "
& Mid(sF, l)
Else
'source est une table
With Me.RecordsetClone
For Each f In .Fields
If Len(sFld) = 0 Then
sFld = f.Name
Else
sFld = sFld & ", " & f.Name
End If
Next f
End With
sQry = "Select TOP 1 " & sFld & " Into T_Temp From
" & Me.RecordSource & ";"
End If
'/ Création de la table temporaire
With DoCmd
.SetWarnings False
.RunSQL sQry
.SetWarnings True
End With
'// Vider la table temporaire
Db.Execute "Delete * From T_Temp"
sQry = ""
'
'// Si le formulaire n'est pas vide
If Me.RecordsetClone.RecordCount > 0 Then
With Me.RecordsetClone
'// Boucler sur les enregistrements du formulaire
Do Until .EOF
'// Créer la requête SQL
sQry = "Insert Into T_Temp (" & sFld & ") Values
("
For Each f In .Fields
If f.Type = dbText Or f.Type = dbMemo Then
If IsNull(f.Value) Then
sQry = sQry & """"
Else
sQry = sQry & Chr(34) & f.Value & Chr(34) & ","
End If
Else
sQry = sQry & f.Value & ","
End If
Next f
sQry = Left(sQry, Len(sQry) - 1) & ");"
.MoveNext
Db.Execute sQry
Loop
End With
End If
'// Libérer
Set Db = Nothing
--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Bonjour,
Il y a toujours un problème pour délimiter les champs vides
Avec
If f.Type = dbText Or f.Type = dbMemo Then
If IsNull(f.Value) Then
sQry = sQry & """"
Erreur d’exécution 3075
Erreur de syntaxe (opérateur absent ) dans l’expression
Insert Insert Into T_Temp (Nom, Prenom, Dates, PNomP, NomM, PNomM, Lieu,
Paroisse, AN, MOIS, JOUR, Reference, Observations, INSEE) Values
("CHALON","Jean","17/11/1777","Jean","CARATES","Anne","Sennevières
37246",""1777","11","17","""37246");
il manque des virgule pour séparer les champs vides.
Avec
If f.Type = dbText Or f.Type = dbMemo Then
If IsNull(f.Value) Then
sQry = sQry & ","
Erreur d’exécution 3075
Erreur de syntaxe dans l’expression INSERT INTO
Insert Into T_Temp (Nom, Prenom, Dates, PNomP, NomM, PNomM, Lieu, Paroisse, AN,
MOIS, JOUR, Reference, Observations, INSEE) Values
("CHALON","Françoise
Anne","17/11/1745","Jean","BERTON","Françoise","Loches
37132",,"1745","11","17",,,"37132");
il manque des "" entre les virgules
Je n’arrive pas à combiner les 2 expressions
sQry = sQry & """"
et
sQry = sQry & "," pour avoir le résultat voulu, car
quand on passe en mode requète un champ vide est bien indiqué
,"",
j'ai fait plusieurs essais avec """," ou
",""" cela déplace les virgule ou les ""
mais pas au bon endroit
"","" ne fonctionne pas car message Attendu fin
d'instruction.
Je ne sais pas s'il y a une solution.
Merci
3stone a écrit le 28/10/2010 à 15h20 :Salut,
acn wrote:
[...]On voit bien ,,"37132"); il manque les "" entre les deux
virgules.
quand cette requète est lancée en création de
requète et que j'ajoute
les deux " entre les virgules, la requète fonctionne.
Essaie cette version :
Dim Db As DAO.Database
Dim sFld As String, sQry As String
Dim sF As String, sSrc As String
Dim l As Integer
Dim f As Field
Set Db = CurrentDb
'
'/ SQL de création de la table temporaire
If InStr(Me.RecordSource, "Select") Then
'source chaine sql
sF = Me.RecordSource
sSrc = Mid(sF, InStr(1, sF, "From") + 4)
sSrc = Trim(Replace(sSrc, ";", ""))
sF = Replace(sF, sSrc & ".", "")
l = InStr(sF, "From") - 1
sFld = Mid(sF, 7, l - 7)
sQry = "Select Top 1 " & sFld & " Into T_Temp "
& Mid(sF, l)
Else
'source est une table
With Me.RecordsetClone
For Each f In .Fields
If Len(sFld) = 0 Then
sFld = f.Name
Else
sFld = sFld & ", " & f.Name
End If
Next f
End With
sQry = "Select TOP 1 " & sFld & " Into T_Temp From
" & Me.RecordSource & ";"
End If
'/ Création de la table temporaire
With DoCmd
.SetWarnings False
.RunSQL sQry
.SetWarnings True
End With
'// Vider la table temporaire
Db.Execute "Delete * From T_Temp"
sQry = ""
'
'// Si le formulaire n'est pas vide
If Me.RecordsetClone.RecordCount > 0 Then
With Me.RecordsetClone
'// Boucler sur les enregistrements du formulaire
Do Until .EOF
'// Créer la requête SQL
sQry = "Insert Into T_Temp (" & sFld & ") Values
("
For Each f In .Fields
If f.Type = dbText Or f.Type = dbMemo Then
If IsNull(f.Value) Then
sQry = sQry & """"
Else
sQry = sQry & Chr(34) & f.Value & Chr(34) & ","
End If
Else
sQry = sQry & f.Value & ","
End If
Next f
sQry = Left(sQry, Len(sQry) - 1) & ");"
.MoveNext
Db.Execute sQry
Loop
End With
End If
'// Libérer
Set Db = Nothing
--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Bonjour,
Il y a toujours un problème pour délimiter les champs vides
Avec
If f.Type = dbText Or f.Type = dbMemo Then
If IsNull(f.Value) Then
sQry = sQry & """"
Erreur d’exécution 3075
Erreur de syntaxe (opérateur absent ) dans l’expression
Insert Insert Into T_Temp (Nom, Prenom, Dates, PNomP, NomM, PNomM, Lieu,
Paroisse, AN, MOIS, JOUR, Reference, Observations, INSEE) Values
("CHALON","Jean","17/11/1777","Jean","CARATES","Anne","Sennevières
37246",""1777","11","17","""37246");
il manque des virgule pour séparer les champs vides.
Avec
If f.Type = dbText Or f.Type = dbMemo Then
If IsNull(f.Value) Then
sQry = sQry & ","
Erreur d’exécution 3075
Erreur de syntaxe dans l’expression INSERT INTO
Insert Into T_Temp (Nom, Prenom, Dates, PNomP, NomM, PNomM, Lieu, Paroisse, AN,
MOIS, JOUR, Reference, Observations, INSEE) Values
("CHALON","Françoise
Anne","17/11/1745","Jean","BERTON","Françoise","Loches
37132",,"1745","11","17",,,"37132");
il manque des "" entre les virgules
Je n’arrive pas à combiner les 2 expressions
sQry = sQry & """"
et
sQry = sQry & "," pour avoir le résultat voulu, car
quand on passe en mode requète un champ vide est bien indiqué
,"",
j'ai fait plusieurs essais avec """," ou
",""" cela déplace les virgule ou les ""
mais pas au bon endroit
"","" ne fonctionne pas car message Attendu fin
d'instruction.
Je ne sais pas s'il y a une solution.
Merci
La nuit porte conseil.
La modification finale a été de reprendre la 1ère formule et d'ajouter
Or f.Type = dbMemo Then
et cela fonctionne avec Texte et Mémo et surtout avec les champs
vides.
Vous pouvez peut-être ne garder qu'une seule page de cette discution
avec le résultat pour d'autre personne dans le même cas.
La nuit porte conseil.
La modification finale a été de reprendre la 1ère formule et d'ajouter
Or f.Type = dbMemo Then
et cela fonctionne avec Texte et Mémo et surtout avec les champs
vides.
Vous pouvez peut-être ne garder qu'une seule page de cette discution
avec le résultat pour d'autre personne dans le même cas.
La nuit porte conseil.
La modification finale a été de reprendre la 1ère formule et d'ajouter
Or f.Type = dbMemo Then
et cela fonctionne avec Texte et Mémo et surtout avec les champs
vides.
Vous pouvez peut-être ne garder qu'une seule page de cette discution
avec le résultat pour d'autre personne dans le même cas.