Utilisation d'une fonction dans une requête d'ajout
14 réponses
Isa
Bonjour,
J'ai un fichier .txt avec des nouveaux clients que je dois importer dans une
base Client Access (ceci très régulièrement).
J'ai donc fait une requête d'ajout avec ma table Client qui oriente les
différentes données dans les bons champs.
Le souci est sur ma clé primaire Client.
Mes clients sont numérotés de 10 en 10 (c'est pas moi qui ait choisi cette
numérotation ;-)))
Et donc je voudrais savoir si dans ma requête d'ajout je peux appeler une
fonction de creation_n°_client ?
Champ : code_cli : creation_code_client()
Ajouter à : code_client
Apparemment, ça ne marche pas mais peut être que je ne le fais pas comme il
faut.
Sinon avez-vous d'autres idées ?
D'avance merci de vos réponses.
Ca ne change rien, il ne m'ajoute toujours qu'un seul enregistrement...
Ta requête doit s'écrire comme ça:
INSERT INTO client ( [code_client], [nom_client] ) SELECT DMax("code_client","client ")+10 AS Expr1, import.nom_client FROM import;
-- @+ Raymond Access MVP http://OfficeSystem.Access.free.fr/ http://users.skynet.be/mpfa/ pour débuter sur le forum
"Isa" a écrit dans le message de news:
Je ne dois pas être en forme aujourd'hui... J'ai ceci dans ma requête : INSERT INTO client ( code_client, nom_client ) SELECT creation_code_client() AS code_cli, import.nom_client FROM import;
Ceci ne m'ajoute que le premier enregistrement de ma table import. Je ne vois pas ce que je peux faire pour récupérer le code_client du premier enregistrement ajouté et faire ce code + 10, tout ça dans cette requête. Je comprends ce que tu me dis mais ne vois pas comment l'appliquer. D'avance merci.
Ca ne change rien, il ne m'ajoute toujours qu'un seul enregistrement...
Ta requête doit s'écrire comme ça:
INSERT INTO client ( [code_client], [nom_client] )
SELECT DMax("code_client","client ")+10 AS Expr1, import.nom_client
FROM import;
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum
"Isa" <Isa@discussions.microsoft.com> a écrit dans le message de news:
3FC2AC1A-78BA-459E-9426-78FAE3491A84@microsoft.com...
Je ne dois pas être en forme aujourd'hui...
J'ai ceci dans ma requête :
INSERT INTO client ( code_client, nom_client )
SELECT creation_code_client() AS code_cli, import.nom_client
FROM import;
Ceci ne m'ajoute que le premier enregistrement de ma table import.
Je ne vois pas ce que je peux faire pour récupérer le code_client du
premier
enregistrement ajouté et faire ce code + 10, tout ça dans cette requête.
Je comprends ce que tu me dis mais ne vois pas comment l'appliquer.
D'avance merci.
Ca ne change rien, il ne m'ajoute toujours qu'un seul enregistrement...
Ta requête doit s'écrire comme ça:
INSERT INTO client ( [code_client], [nom_client] ) SELECT DMax("code_client","client ")+10 AS Expr1, import.nom_client FROM import;
-- @+ Raymond Access MVP http://OfficeSystem.Access.free.fr/ http://users.skynet.be/mpfa/ pour débuter sur le forum
"Isa" a écrit dans le message de news:
Je ne dois pas être en forme aujourd'hui... J'ai ceci dans ma requête : INSERT INTO client ( code_client, nom_client ) SELECT creation_code_client() AS code_cli, import.nom_client FROM import;
Ceci ne m'ajoute que le premier enregistrement de ma table import. Je ne vois pas ce que je peux faire pour récupérer le code_client du premier enregistrement ajouté et faire ce code + 10, tout ça dans cette requête. Je comprends ce que tu me dis mais ne vois pas comment l'appliquer. D'avance merci.
Isa
Quelqu'un n'aurait pas une autre solution à me proposer car cela ne marche pas... Je n'ai toujours qu'un enregistrement qui s'ajoute. D'avance merci.
bonjour un simple Dmax sur le champ de ta table et +10
-- Pierre CFI MVP Microsoft Access Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer Access http://users.skynet.be/mpfa/ Excel http://www.excelabo.net Site perso http://access.cfi.free.fr "Isa" a écrit dans le message de news:
Je veux bien le faire mais je ne vois pas comment faire pour incrémenter de 10 entre chaque ajout. Ou alors faut que je les ajoute un par un et non tous ensemble ? Qu'en penses-tu ?
d'abord tu n'as pas besoin de passer par un recordset mais par dmax ce sera suffisant. ensuite il faut, soit conserver le numéro généré pour l'augmenter de 10 chaque fois , soit récupérer le dernier enregistrement de la table dans laquelle l'enregistrement est ajouté, sinon tu généres toujopurs le même numéro d'où erreur.
-- @+ Raymond Access MVP http://OfficeSystem.Access.free.fr/ http://users.skynet.be/mpfa/ pour débuter sur le forum
"Isa" a écrit dans le message de news:
Je ne vois pas l'erreur si c'est dans ma fonction. La voici :
Public Function creation_code_client() As String
Dim connexion As New ADODB.Connection Dim R As New ADODB.Recordset Dim SQL As String
' Le code Client sera du format "10000" et ensuite incrémenté de 10 en 10
' Déclaration d'une connexion pour la base en cours Set connexion = CurrentProject.Connection
SQL = "SELECT MAX(code_client) AS max_code_client FROM client;"
' Assignation au recordset du résultat de la requête SQL sur la connexion Set R = connexion.Execute(SQL)
'Debug.Print SQL
If Not R.EOF And Not IsNull(R("max_code_client")) Then
' On ajoute 10 au dernier plus grand code client creation_code_client = R("max_code_client") + 10
Else creation_code_client = "10000" End If
R.Close
Set connexion = Nothing
End Function
Quelqu'un n'aurait pas une autre solution à me proposer car cela ne marche
pas...
Je n'ai toujours qu'un enregistrement qui s'ajoute.
D'avance merci.
bonjour
un simple Dmax sur le champ de ta table et +10
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
Access http://users.skynet.be/mpfa/
Excel http://www.excelabo.net
Site perso
http://access.cfi.free.fr
"Isa" <Isa@discussions.microsoft.com> a écrit dans le message de news:027CE596-3AA1-42F4-ADBF-30B3835E2624@microsoft.com...
Je veux bien le faire mais je ne vois pas comment faire pour incrémenter de
10 entre chaque ajout. Ou alors faut que je les ajoute un par un et non tous
ensemble ?
Qu'en penses-tu ?
d'abord tu n'as pas besoin de passer par un recordset mais par dmax ce sera
suffisant. ensuite il faut, soit conserver le numéro généré pour l'augmenter
de 10 chaque fois , soit récupérer le dernier enregistrement de la table
dans laquelle l'enregistrement est ajouté, sinon tu généres toujopurs le
même numéro d'où erreur.
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum
"Isa" <Isa@discussions.microsoft.com> a écrit dans le message de news:
37F06339-00B5-47DB-8B99-498ADABA3B16@microsoft.com...
Je ne vois pas l'erreur si c'est dans ma fonction.
La voici :
Public Function creation_code_client() As String
Dim connexion As New ADODB.Connection
Dim R As New ADODB.Recordset
Dim SQL As String
' Le code Client sera du format "10000" et ensuite incrémenté de 10 en
10
' Déclaration d'une connexion pour la base en cours
Set connexion = CurrentProject.Connection
SQL = "SELECT MAX(code_client) AS max_code_client FROM client;"
' Assignation au recordset du résultat de la requête SQL sur la
connexion
Set R = connexion.Execute(SQL)
'Debug.Print SQL
If Not R.EOF And Not IsNull(R("max_code_client")) Then
' On ajoute 10 au dernier plus grand code client
creation_code_client = R("max_code_client") + 10
-- Pierre CFI MVP Microsoft Access Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer Access http://users.skynet.be/mpfa/ Excel http://www.excelabo.net Site perso http://access.cfi.free.fr "Isa" a écrit dans le message de news:
Je veux bien le faire mais je ne vois pas comment faire pour incrémenter de 10 entre chaque ajout. Ou alors faut que je les ajoute un par un et non tous ensemble ? Qu'en penses-tu ?
d'abord tu n'as pas besoin de passer par un recordset mais par dmax ce sera suffisant. ensuite il faut, soit conserver le numéro généré pour l'augmenter de 10 chaque fois , soit récupérer le dernier enregistrement de la table dans laquelle l'enregistrement est ajouté, sinon tu généres toujopurs le même numéro d'où erreur.
-- @+ Raymond Access MVP http://OfficeSystem.Access.free.fr/ http://users.skynet.be/mpfa/ pour débuter sur le forum
"Isa" a écrit dans le message de news:
Je ne vois pas l'erreur si c'est dans ma fonction. La voici :
Public Function creation_code_client() As String
Dim connexion As New ADODB.Connection Dim R As New ADODB.Recordset Dim SQL As String
' Le code Client sera du format "10000" et ensuite incrémenté de 10 en 10
' Déclaration d'une connexion pour la base en cours Set connexion = CurrentProject.Connection
SQL = "SELECT MAX(code_client) AS max_code_client FROM client;"
' Assignation au recordset du résultat de la requête SQL sur la connexion Set R = connexion.Execute(SQL)
'Debug.Print SQL
If Not R.EOF And Not IsNull(R("max_code_client")) Then
' On ajoute 10 au dernier plus grand code client creation_code_client = R("max_code_client") + 10
Else creation_code_client = "10000" End If
R.Close
Set connexion = Nothing
End Function
Pierre CFI [mvp]
tu as raison, çà marche pas ce que je t'ai donné, mais là je m'absente Dis Raymond, au lieu d'écrire des bétises, tu veux réfléchir un peu :o)))
-- Pierre CFI MVP Microsoft Access Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer Access http://users.skynet.be/mpfa/ Excel http://www.excelabo.net Site perso http://access.cfi.free.fr "Isa" a écrit dans le message de news:
Quelqu'un n'aurait pas une autre solution à me proposer car cela ne marche pas... Je n'ai toujours qu'un enregistrement qui s'ajoute. D'avance merci.
bonjour un simple Dmax sur le champ de ta table et +10
-- Pierre CFI MVP Microsoft Access Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer Access http://users.skynet.be/mpfa/ Excel http://www.excelabo.net Site perso http://access.cfi.free.fr "Isa" a écrit dans le message de news:
Je veux bien le faire mais je ne vois pas comment faire pour incrémenter de 10 entre chaque ajout. Ou alors faut que je les ajoute un par un et non tous ensemble ? Qu'en penses-tu ?
d'abord tu n'as pas besoin de passer par un recordset mais par dmax ce sera suffisant. ensuite il faut, soit conserver le numéro généré pour l'augmenter de 10 chaque fois , soit récupérer le dernier enregistrement de la table dans laquelle l'enregistrement est ajouté, sinon tu généres toujopurs le même numéro d'où erreur.
-- @+ Raymond Access MVP http://OfficeSystem.Access.free.fr/ http://users.skynet.be/mpfa/ pour débuter sur le forum
"Isa" a écrit dans le message de news:
Je ne vois pas l'erreur si c'est dans ma fonction. La voici :
Public Function creation_code_client() As String
Dim connexion As New ADODB.Connection Dim R As New ADODB.Recordset Dim SQL As String
' Le code Client sera du format "10000" et ensuite incrémenté de 10 en 10
' Déclaration d'une connexion pour la base en cours Set connexion = CurrentProject.Connection
SQL = "SELECT MAX(code_client) AS max_code_client FROM client;"
' Assignation au recordset du résultat de la requête SQL sur la connexion Set R = connexion.Execute(SQL)
'Debug.Print SQL
If Not R.EOF And Not IsNull(R("max_code_client")) Then
' On ajoute 10 au dernier plus grand code client creation_code_client = R("max_code_client") + 10
Else creation_code_client = "10000" End If
R.Close
Set connexion = Nothing
End Function
tu as raison, çà marche pas ce que je t'ai donné, mais là je m'absente
Dis Raymond, au lieu d'écrire des bétises, tu veux réfléchir un peu :o)))
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
Access http://users.skynet.be/mpfa/
Excel http://www.excelabo.net
Site perso
http://access.cfi.free.fr
"Isa" <Isa@discussions.microsoft.com> a écrit dans le message de news:4D364EA8-21F0-4BB1-B68E-5F6045EEE0E6@microsoft.com...
Quelqu'un n'aurait pas une autre solution à me proposer car cela ne marche
pas...
Je n'ai toujours qu'un enregistrement qui s'ajoute.
D'avance merci.
bonjour
un simple Dmax sur le champ de ta table et +10
--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer
Access http://users.skynet.be/mpfa/
Excel http://www.excelabo.net
Site perso
http://access.cfi.free.fr
"Isa" <Isa@discussions.microsoft.com> a écrit dans le message de news:027CE596-3AA1-42F4-ADBF-30B3835E2624@microsoft.com...
Je veux bien le faire mais je ne vois pas comment faire pour incrémenter de
10 entre chaque ajout. Ou alors faut que je les ajoute un par un et non tous
ensemble ?
Qu'en penses-tu ?
d'abord tu n'as pas besoin de passer par un recordset mais par dmax ce sera
suffisant. ensuite il faut, soit conserver le numéro généré pour l'augmenter
de 10 chaque fois , soit récupérer le dernier enregistrement de la table
dans laquelle l'enregistrement est ajouté, sinon tu généres toujopurs le
même numéro d'où erreur.
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum
"Isa" <Isa@discussions.microsoft.com> a écrit dans le message de news:
37F06339-00B5-47DB-8B99-498ADABA3B16@microsoft.com...
Je ne vois pas l'erreur si c'est dans ma fonction.
La voici :
Public Function creation_code_client() As String
Dim connexion As New ADODB.Connection
Dim R As New ADODB.Recordset
Dim SQL As String
' Le code Client sera du format "10000" et ensuite incrémenté de 10 en
10
' Déclaration d'une connexion pour la base en cours
Set connexion = CurrentProject.Connection
SQL = "SELECT MAX(code_client) AS max_code_client FROM client;"
' Assignation au recordset du résultat de la requête SQL sur la
connexion
Set R = connexion.Execute(SQL)
'Debug.Print SQL
If Not R.EOF And Not IsNull(R("max_code_client")) Then
' On ajoute 10 au dernier plus grand code client
creation_code_client = R("max_code_client") + 10
tu as raison, çà marche pas ce que je t'ai donné, mais là je m'absente Dis Raymond, au lieu d'écrire des bétises, tu veux réfléchir un peu :o)))
-- Pierre CFI MVP Microsoft Access Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer Access http://users.skynet.be/mpfa/ Excel http://www.excelabo.net Site perso http://access.cfi.free.fr "Isa" a écrit dans le message de news:
Quelqu'un n'aurait pas une autre solution à me proposer car cela ne marche pas... Je n'ai toujours qu'un enregistrement qui s'ajoute. D'avance merci.
bonjour un simple Dmax sur le champ de ta table et +10
-- Pierre CFI MVP Microsoft Access Mail : http://cerbermail.com/?z0SN8cN53B
Site pour bien commencer Access http://users.skynet.be/mpfa/ Excel http://www.excelabo.net Site perso http://access.cfi.free.fr "Isa" a écrit dans le message de news:
Je veux bien le faire mais je ne vois pas comment faire pour incrémenter de 10 entre chaque ajout. Ou alors faut que je les ajoute un par un et non tous ensemble ? Qu'en penses-tu ?
d'abord tu n'as pas besoin de passer par un recordset mais par dmax ce sera suffisant. ensuite il faut, soit conserver le numéro généré pour l'augmenter de 10 chaque fois , soit récupérer le dernier enregistrement de la table dans laquelle l'enregistrement est ajouté, sinon tu généres toujopurs le même numéro d'où erreur.
-- @+ Raymond Access MVP http://OfficeSystem.Access.free.fr/ http://users.skynet.be/mpfa/ pour débuter sur le forum
"Isa" a écrit dans le message de news:
Je ne vois pas l'erreur si c'est dans ma fonction. La voici :
Public Function creation_code_client() As String
Dim connexion As New ADODB.Connection Dim R As New ADODB.Recordset Dim SQL As String
' Le code Client sera du format "10000" et ensuite incrémenté de 10 en 10
' Déclaration d'une connexion pour la base en cours Set connexion = CurrentProject.Connection
SQL = "SELECT MAX(code_client) AS max_code_client FROM client;"
' Assignation au recordset du résultat de la requête SQL sur la connexion Set R = connexion.Execute(SQL)
'Debug.Print SQL
If Not R.EOF And Not IsNull(R("max_code_client")) Then
' On ajoute 10 au dernier plus grand code client creation_code_client = R("max_code_client") + 10
Else creation_code_client = "10000" End If
R.Close
Set connexion = Nothing
End Function
G Roydor
est-ce une opération unique (initialisation du fichier) ou répétitive ?
si unique: passer par un table sans key mais avec un champ auto-incrémenté qui servira de base à un calcul du genre cle=(champauto*10)+10000 inséré dans une requete upadte
si répétitive: on peut passer par la même procédure, mais il ne faut pas réinitialiser la table intermédiaire
GR
Isa a écrit:
Bonjour,
J'ai un fichier .txt avec des nouveaux clients que je dois importer dans une base Client Access (ceci très régulièrement).
J'ai donc fait une requête d'ajout avec ma table Client qui oriente les différentes données dans les bons champs. Le souci est sur ma clé primaire Client. Mes clients sont numérotés de 10 en 10 (c'est pas moi qui ait choisi cette numérotation ;-))) Et donc je voudrais savoir si dans ma requête d'ajout je peux appeler une fonction de creation_n°_client ?
Champ : code_cli : creation_code_client()
Ajouter à : code_client
Apparemment, ça ne marche pas mais peut être que je ne le fais pas comme il faut. Sinon avez-vous d'autres idées ? D'avance merci de vos réponses.
est-ce une opération unique (initialisation du fichier) ou répétitive ?
si unique:
passer par un table sans key mais avec un champ auto-incrémenté qui
servira de base à un calcul du genre cle=(champauto*10)+10000 inséré
dans une requete upadte
si répétitive:
on peut passer par la même procédure, mais il ne faut pas réinitialiser
la table intermédiaire
GR
Isa a écrit:
Bonjour,
J'ai un fichier .txt avec des nouveaux clients que je dois importer dans une
base Client Access (ceci très régulièrement).
J'ai donc fait une requête d'ajout avec ma table Client qui oriente les
différentes données dans les bons champs.
Le souci est sur ma clé primaire Client.
Mes clients sont numérotés de 10 en 10 (c'est pas moi qui ait choisi cette
numérotation ;-)))
Et donc je voudrais savoir si dans ma requête d'ajout je peux appeler une
fonction de creation_n°_client ?
Champ : code_cli : creation_code_client()
Ajouter à : code_client
Apparemment, ça ne marche pas mais peut être que je ne le fais pas comme il
faut.
Sinon avez-vous d'autres idées ?
D'avance merci de vos réponses.
est-ce une opération unique (initialisation du fichier) ou répétitive ?
si unique: passer par un table sans key mais avec un champ auto-incrémenté qui servira de base à un calcul du genre cle=(champauto*10)+10000 inséré dans une requete upadte
si répétitive: on peut passer par la même procédure, mais il ne faut pas réinitialiser la table intermédiaire
GR
Isa a écrit:
Bonjour,
J'ai un fichier .txt avec des nouveaux clients que je dois importer dans une base Client Access (ceci très régulièrement).
J'ai donc fait une requête d'ajout avec ma table Client qui oriente les différentes données dans les bons champs. Le souci est sur ma clé primaire Client. Mes clients sont numérotés de 10 en 10 (c'est pas moi qui ait choisi cette numérotation ;-))) Et donc je voudrais savoir si dans ma requête d'ajout je peux appeler une fonction de creation_n°_client ?
Champ : code_cli : creation_code_client()
Ajouter à : code_client
Apparemment, ça ne marche pas mais peut être que je ne le fais pas comme il faut. Sinon avez-vous d'autres idées ? D'avance merci de vos réponses.