0
votes

Comment diviser une chaîne pour multiplier chaque numéro par une valeur dans MS Access 2007

J'ai besoin de scinder une chaîne de 20 chiffres individuellement et de multiplier chacune d'une valeur par une valeur.

Result = 51x1 + 73x1 + 17x6 + 89x0 + 38x4 + 62x9 +
45x9 + 53x9 + 15x1 + 50x2 + 5x3 + 49x4 + 34x0 + 81x0 + 76x0 + 27x0 + 90x2
+ 9x5 + 30x8 + 3x6 = 2627


2 commentaires

Où sont les multiplicateurs 51, 73, 17 ... viennent de?


Les multiplicateurs sont toujours les mêmes.


3 Réponses :


2
votes

Vous pouvez le faire avec SQL.
Créez une table, disez avec nom poids , avec 2 colonnes: xxx

et insérez ces lignes: xxx

Ensuite, exécutez cette requête: xxx

résultat: xxx


2 commentaires

Je ne peux pas stocker ces chiffres. La chaîne est générée par chaque citation. J'ai des dozelens de citations par le client.


Vous devez en quelque sorte commander ces chiffres, car la commande est importante afin de multiplier chacune d'elles avec un chiffre dans une position spécifique de la chaîne, non? Vous devez donc les stocker, sinon dans une table, puis dans une structure comme un tableau et créer une fonction de code VBA pour obtenir le résultat.



4
votes

Dans VBA, vous pouvez faire quelque chose comme ceci:

Dim a(20) as Integer
a(1) = 51
a(2) = 73
…
a(20) = 3

Dim Result AS Long: Result = 0
For i = 1 to 20
    Result = Result + CInt(Mid(MyString,i,1)) * a(i)
  Next i


3 commentaires

En fait, une volonté aura des valeurs d'un (0) jusqu'au (20). A (0) n'est tout simplement pas utilisé. J'ai choisi de rendre le code plus simple et plus lisible, plutôt que d'utiliser une valeur supplémentaire de RAM.


Désolé je ne réalisais pas ça. Agréable.


Pour être honnête, je devais vérifier et vérifier quand j'ai vu cela, car dans toutes les autres langues, une déclaration d'un tableau avec 20 aurait effectivement 20 valeurs de 0 à 19. Cela semble être unique. VBA particularité.



1
votes

La cohérence de la structure est essentielle dans la manipulation des chaînes. Supposons qu'il y aura toujours 20 chiffres dans la chaîne et chaque enregistrement aura de la valeur.

Calculez 20 colonnes et ajoutez-les ensemble pour le total - Voici 2: P>

Sélection de citations. *, MID ([Données], 1,1) * 53 en tant que, moyenne ([DONNE], 2,1) * 71 comme B, [A] + [B] comme total des guillemets; code> p> pourrait tirer le facteur de poids de la table. Dlookup est à sens unique, mais un agrégat de domaine peut entraîner des performances lentes dans un ensemble de données volumineux, afin que les facteurs de poids ne changent jamais, ne veulent probablement pas que ceci: p>

Sélectionnez des devis.data, Mid ([Données], 1,1) * Dlookup ("Poids", "Facteurs", "ID = 1") en tant que, MID ([Données], 2,1) * Dlookup ("Poids", "Facteurs", "ID = 2" ) Comme b, [a] + [b] comme total des citations; code> p>

une relation cartésien avec des tables d'agrégat Calcs utilisant des tables de facteurs de données et de poids peut calculer le total - cartésien peut également effectuer lentement avec Grand DataSet: P>

Function GetTotal(strD) As Long
Dim rs As DAO.Recordset, x As Integer
Set rs = CurrentDb.OpenRecordset("SELECT Weight FROM Factors ORDER BY ID")
For x = 1 To 20
    GetTotal = GetTotal + Mid(strD, x, 1) * rs!Weight
    rs.MoveNext
Next
End Function


0 commentaires