OVH Cloud OVH Cloud

Utilisation d'une fonction dans une requête d'ajout

14 réponses
Avatar
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.

4 réponses

1 2
Avatar
Isa
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.








Avatar
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

Public Function creation_code_client()

creation_code_client = Nz(Dmax("code_client","client")) + 10


End Function

ou le dcount directement dans la req

--
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
















Avatar
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

Public Function creation_code_client()

creation_code_client = Nz(Dmax("code_client","client")) + 10


End Function

ou le dcount directement dans la req

--
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


















Avatar
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.


1 2