XL 2013 Function--> récupérer recordset

hctad1

XLDnaute Junior
Bonjour,
comme j'ai (très) souvent cette requête à faire pour récupérer l'id_produit dans ma base:
select products_id from products where products_model="ma_ref";

Je souhaite me créer une petite function de ce type dans personal.xlsm
=model_to_id(la_cellule) ou ma_ref est dans "la_cellule"

Je bute sur la méthode pour récupérer le recordset (qui sera toujours unique) et le mettre en résultat.

Une idée.
VB:
Function model_to_id(la_cellule1)


   Dim Password As String
    Dim SQLStr As String
    Dim Server_Name As String
    Dim User_ID As String
    Dim Database_Name As String
    Dim table_name As String
  
  
    Set Rs = CreateObject("ADODB.Recordset")
    Server_Name = "mon_serveur"
    Database_Name = "ma_base"
    User_ID = "mon_utilisateur"
    Password = "monmotdepasse"
      Set cn = CreateObject("ADODB.Connection")
    cn.Open "Driver={MySQL ODBC 3.51 Driver};Server=" & _
            Server_Name & ";Database=" & Database_Name & _
            ";Uid=" & User_ID & ";Pwd=" & Password & ";"
    
    SQLStr = "select products_id from products where products_model='" & la_cellule1 & "'"
    Rs.Open SQLStr, cn, adOpenStatic

    'je colle le resultat   dans la bonne cellule
model_to_id = ????
End Function
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Je viens de tester sur un de mes fichiers et
model_to_id = cn.Execute("select id from [journal$] where id=" & la_cellule1.Text & "")(0)
Et ça fonctionne comme attendu
Quant au with c'est une bonne idée, l'essentiel étant que les objets soient détruits correctement que ce soit comme ça ou autrement.

Cordialement
 

dysorthographie

XLDnaute Accro
Oui car ta requête ne retourne pas Eof !

En revanche tu peux faire un getstring sans problème

Dans ce genre de fonction je n'utilise pas de variable , sauf peut être SQL,que des with.

Les informations de connexion peuvent être des constantes public dans un module standard

VB:
Public Const Password = "monmotdepasse", Server_Name = "mon_serveur", User_ID = "mon_utilisateur", Database_Name = "ma_base"
Public Const  connexion= "Driver={MySQL ODBC 3.51 Driver};Server=" & Server_Name & ";Database=" & Database_Name & ";Uid=" & User_ID & ";Pwd=" & Password & ";"
Function model_to_id(la_cellule1)
With CreateObject("ADODB.Connection")
    .Open connexion
        With .execute("select products_id from products where products_model='" & la_cellule1 & "'")
            If Not .EOF Then model_to_id = .Fields(0)
            .Close
        End With
    .Close
End With
End Function
 
Dernière édition:

hctad1

XLDnaute Junior
Hum, j'ai bien un résultat à ma requête quand je controle par ailleurs.

Pour autant quelle que soit la méthode: copyfromrecordset, rs(0), cn.execute(... etc.
ça me renvoit #VALEUR!

Au mieux, je récupère un 0 avec
rs("products_id")(0)

La meme chose dans une sub() fonctionne.

Je sèche.
 

hctad1

XLDnaute Junior
🤔 oui je sèche.
en modifiant mon code:
soit j'arrive à 0 en résultat,
soit #valeur!,
soit la capture ci-desssous.

C'est aussi ce que j'obtiens avec ton code copié/collé sans édition aucune.

c'est forcément sous mon nez mais je ne trouve pas.
Capture.JPG
 
Dernière édition:

dysorthographie

XLDnaute Accro
si products_id est integer
Code:
Public Const PassWord = "monmotdepasse", Server_Name = "mon_serveur", User_ID = "mon_utilisateur", Database_Name = "ma_base"
Public Const Connexion= "Driver={MySQL ODBC 3.51 Driver};Server=" & Server_Name & ";Database=" & Database_Name & ";Uid=" & User_ID & ";Pwd=" & PassWord & ";"
Function model_to_id(la_cellule1 As String) As interger
With CreateObject("ADODB.Recordset")
    .Open "select products_id from products where products_model='" & la_cellule1 & "'", Connexion, 1, 3
    If Not .EOF Then model_to_id = .Fields(0)
    .Close
End With
End Function
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 740
Messages
2 082 049
Membres
101 882
dernier inscrit
XaK_