Clause 'WHERE' d'un SQL qu'il ne veut pas
Bonjour à tous,
Je suis dans de l'incompréhension
Je suis modéliste et je construis différents projets comme une locomotive et un avion de la seconde guerre mondiale.
Par curiosité, j'aimerais savoir combien de vis j'ai installé sur ces projets en fonction de leurs type
Vu le nombre de type de vis différentes pour les différents projets, c'est trop compliqué de mettre à jour les données.
Car ces projets, se sont des fascicules que j'achète en magasin. Jusqu'à 140 pour certain d'entre eux.
Alors, j'essaie d'utiliser le SQL. C'est très facile.
(En théorie)
En pratique, il accepte sans rien dire "SELECT * FROM [Vis$]" et cela fonctionne
Par contre, si je lui demande "SELECT * FROM [Vis$] WHERE projet = 'Locomotive' " Il y a une erreur
"No value given for one or more required parameters" ...
Alors ...
Commençons par les explications pour comprendre:
Sur une feuille Excel s'appelant "Vis", il y a un tableau comme celui que je montre ci-dessous
La première ligne de la feuille Excel sont les titres. Dans l'exemple ci-dessous, se sont les mêmes titres que le vrai document.
Projet |
Fascicule |
AP |
BP |
Locomotive |
001 |
7 |
4 |
Locomotive |
002 |
0 |
2 |
Locomotive |
003 |
8 |
6 |
AM6 Zero |
001 |
4 |
0 |
AM6 Zero |
002 |
2 |
6 |
AM6 Zero |
003 |
2 |
2 |
Le code:
A) La connexion:
J'ai écris une procédure pour ouvrir une connexion
l'appel:
ouvre_connection("modelisme.xlsm")
status:
conn.state = 1 (connexion ouverte)
conn.state = 0 (connexion fermée)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
' Variable publique:
Public conn As ADODB.Connection
Sub ouvre_connection(srcFile As String)
' srcFile : nom du fichier Excel
Dim str As String
Set conn = New ADODB.Connection
If Len(srcFile) > 0 Then
srcFile = Replace(srcFile, "http://", "\\")
srcFile = Replace(srcFile, "/", "\")
str = "Provider=Microsoft.ACE.OLEDB.12.0;"
str = str & "Data Source=" & srcFile & ";"
str = str & "Extended Properties=""Excel 12.0;HDR=No;IMEX=1"";"
conn.ConnectionString = str
conn.CursorLocation = adUseClient
If conn.State = 0 Then
conn.Open
End If
End If
End Sub |
Rien de sorcier. Cela fonctionne très bien
B - Accéder à l'information
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
Sub test()
Dim IndexArr, compteur
Dim nom_fichier As String
nom_fichier = "modélisme.xlsm"
ouvre_connection (nom_fichier)
GetData "Locomotive", "001", "BP", 5, False, outArr, compteur
End Sub |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
Function GetData(Project As String, Fascicule As String, Vis_Type As String, QT_reçus As Integer, TTL As Boolean, outArr As Variant, compteur As Variant)
' IN:
' Project: Nom du projet contenant les différentes vis
' Fascicule: N° du fascicule à mettre à jour
' Vis_Type: Type de vis (majuscule)
' QT_reçus: Nombre de vis reçue
Dim myRS As ADODB.Recordset
Dim RS_n As Integer
Dim RS_f As Integer
Dim nbLigne As Integer
Dim nbColonne As Integer
Dim Arr
Dim ct(1, 2) As Integer
Set myRS = New ADODB.Recordset
' Le problème est ici:'
' Si je retire la clause WHERE, cela fonctionne
' Autrement, le code s'arrête avec l'erreur: "No value given for one or more required parameters"
sqlstr = "SELECT * FROM [Vis$] WHERE Projet = " & Chr(34) & Project & Chr(34)
myRS.Open sqlstr, conn, adOpenStatic, adLockReadOnly, adCmdText
nbLigne = myRS.RecordCount
nbColonne = myRS.Fields.Count
If Not myRS.EOF Then
ReDim Arr(1 To nbLigne, 1 To nbColonne)
Do While Not myRS.EOF
For RS_n = 1 To myRS.RecordCount 'lignes
For RS_f = 0 To myRS.Fields.Count - 1 'colonnes
valeur = myRS.Fields(RS_f).Value
Arr(RS_n, RS_f + 1) = valeur
Next
myRS.MoveNext
Next
Loop
End If
myRS.Close
Set myRS = Nothing
ct(1, 1) = nbLigne
ct(1, 2) = nbColonne
outArr = Arr
compteur = ct
End Function |
Pour information, j'ai déjà regardé sur votre site la formation que vous donnez sur le SQL et je l'ai essayé. Sans succès
J'ai également regardé dans ce forum les différentes discussion qui traite le SQL ... Sans succès.
Je me suis promené sur "stackoverflow" et autre forum Excel. Sans succès.
Où se trouve mon erreur, je ne la voie pas !
Peut être que quelqu'un parmis vous la voyez !
Merci d'avance de votre aide.
André