Bonjour,
mes connaissances insuffisantes en programmation sql ne me permettent pas de me dépêtrer du problème suivant:
L'expression ci-dessous construit la table Catalogues d'après la table Livre et je voudrais qu'elle y ajoute un assez grand nombre de champs (36 pour être exact), issus de la même table Livre. Le problème est que les champs à rajouter sont apparemment trop nombreux: la ligne atteint sa taille maximum et je suis trop ignorant pour rédiger une expression valide en utilisant l'opérateur de concaténation &.
Voici l'expression de départ qui fonctionne bien:
Aux côtés des 6 champs Livre.SusTitre, Livre.PreAuteur, Livre.Collation, Livre.Reliure, Livre.Commentaire et Livre.RefBiblio devraient figurer 6 autres champs de la même table mais l'expression résultante semble être trop longue et ne peut être copiée dans vba sans être tronquée:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 CurrentDb.Execute "SELECT """ & Titre & """ AS Section, 0 AS Numero, Livre.SusTitre, Livre.PreAuteur, Livre.Auteur, Livre.Titre, Livre.Adresse, Livre.AnneeEdition, Livre.Collation, Livre.Reliure, Livre.Commentaire, Livre.RefBiblio, (Livre.Prix * " & C2S(RS!Change) & ") AS [Prix], (Format(Livre.Prix * " & C2S(RS!Change) & ", ""# ##0.00"") & "" "" & """ & RS!Symbole & """) AS [Prix_Devise], (Format(Livre.Prix, ""# ##0"") & "" "") AS [Prix_EUR], (Format(Livre.Estimation * " & C2S(RS!Change) & ", ""# ##0.00"") & "" "" & """ & RS!Symbole & """) AS [Estimation_Devise], (Format(Livre.Estimation, ""# ##0"") & "" "") AS [Estimation_EUR], (Format(Livre.PrixAchat * " & C2S(RS!Change) & ", ""# ##0.00"") & "" "" & """ & RS!Symbole & """) AS [Achat_Devise], (Format(Livre.PrixAchat, ""# ##0"") & "" "") AS [Achat_EUR], Livre.IDLiv, Livre.Emplacement, Livre.Stock, Livre.Designation " _ & "INTO Catalogue " _ & "FROM Livre " & Req
Comment faire ? J'ai ajouté ci-dessous le code complet du module vba en question.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 CurrentDb.Execute "SELECT """ & Titre & """ AS Section, 0 AS Numero, Livre.SusTitre, Livre.SusTitre_es, Livre.SusTitre_en, Livre.SusTitre_ca, Livre.SusTitre_de, Livre.SusTitre_nl, Livre.SusTitre_it, Livre.PreAuteur, Livre.PreAuteur_es, Livre.PreAuteur_en, Livre.PreAuteur_ca, Livre.PreAuteur_de, Livre.PreAuteur_nl, Livre.PreAuteur_it, Livre.Auteur, Livre.Titre, Livre.Adresse, Livre.AnneeEdition, Livre.Collation, Livre.Collation_es, Livre.Collation_en, Livre.Collation_ca, Livre.Collation_de, Livre.Collation_nl, Livre.Collation_it, Livre.Reliure, Livre.Reliure_es, Livre.Reliure_en, Livre.Reliure_ca, Livre.Reliure_de, Livre.Reliure_nl, Livre.Reliure_it, Livre.Commentaire, Livre.Commentaire_es, Livre.Commentaire_en, Livre.Commentaire_ca, Livre.Commentaire_de, Livre.Commentaire_nl, Livre.Commentaire_it, Livre.RefBiblio, Livre.RefBiblio_es, Livre.RefBiblio_en, Livre.RefBiblio_ca, Livre.RefBiblio_de, Livre.RefBiblio_nl, Livre.RefBiblio_it, (Livre.Prix * " & C2S(RS!Change) & ") AS [Prix], (Format(Livre.Prix * " & C2S(RS!Change) & ", ""# ##0.00"") & "" "" & """ & RS!Symbole & """) AS [Prix_Devise], (Format(Livre.Prix, ""# ##0"") & "" "") AS [Prix_EUR], (Format(Livre.Estimation * " & C2S(RS!Change) & ", ""# ##0.00"") & "" "" & """ & RS!Symbole & """) AS [Estimation_Devise], (Format(Livre.Estimation, ""# ##0"") & "" "") AS [Estimation_EUR], (Format(Livre.PrixAchat * " & C2S(RS!Change) & ", ""# ##0.00"") & "" "" & """ & RS!Symbole & """) AS [Achat_Devise], (Format(Livre.PrixAchat, ""# ##0"") & "" "") AS [Achat_EUR], Livre.IDLiv, Livre.Emplacement, Livre.Stock, Livre.Designation " _ & "INTO Catalogue " _ & "FROM Livre " & Req
Merci d'avance pour votre attention,
torobravo
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Public Sub PreparerSel(Optional Titre = "Sélection", Optional Filtre = Null, Optional Devise As String = "EUR", Optional Tri = "Designation", Optional PreAuteur = True) Dim RS As Recordset Dim Num As Long Dim Req As String On Error Resume Next CurrentDb.TableDefs.Delete "Catalogue" On Error GoTo 0 ' Construction du catalogue Set RS = CurrentDb.OpenRecordset("SELECT Symbole, Change, Avant FROM Devise WHERE IDDev LIKE """ & Devise & """") If RS.EOF Then Exit Sub If Not IsNull(Filtre) And Filtre <> "" Then Req = "WHERE " & Filtre & " " If RS!Avant = 0 Then CurrentDb.Execute "SELECT """ & Titre & """ AS Section, 0 AS Numero, Livre.SusTitre, Livre.PreAuteur, Livre.Auteur, Livre.Titre, Livre.Adresse, Livre.AnneeEdition, Livre.Collation, Livre.Reliure, Livre.Commentaire, Livre.RefBiblio, (Livre.Prix * " & C2S(RS!Change) & ") AS [Prix], (Format(Livre.Prix * " & C2S(RS!Change) & ", ""# ##0.00"") & "" "" & """ & RS!Symbole & """) AS [Prix_Devise], (Format(Livre.Prix, ""# ##0"") & "" "") AS [Prix_EUR], (Format(Livre.Estimation * " & C2S(RS!Change) & ", ""# ##0.00"") & "" "" & """ & RS!Symbole & """) AS [Estimation_Devise], (Format(Livre.Estimation, ""# ##0"") & "" "") AS [Estimation_EUR], (Format(Livre.PrixAchat * " & C2S(RS!Change) & ", ""# ##0.00"") & "" "" & """ & RS!Symbole & """) AS [Achat_Devise], (Format(Livre.PrixAchat, ""# ##0"") & "" "") AS [Achat_EUR], Livre.IDLiv, Livre.Emplacement, Livre.Stock, Livre.Designation " _ & "INTO Catalogue " _ & "FROM Livre " & Req Else CurrentDb.Execute "SELECT """ & Titre & """ AS Section, 0 AS Numero, Livre.SusTitre, Livre.PreAuteur, Livre.Auteur, Livre.Titre, Livre.Adresse, Livre.AnneeEdition, Livre.Collation, Livre.Reliure, Livre.Commentaire, Livre.RefBiblio, (Livre.Prix * " & C2S(RS!Change) & ") AS [Prix], (Format(Livre.Prix * " & C2S(RS!Change) & ", ""# ##0.00"") & "" "" & """ & RS!Symbole & """) AS [Prix_Devise], (Format(Livre.Prix, ""# ##0"") & "" "") AS [Prix_EUR], (Format(Livre.Estimation * " & C2S(RS!Change) & ", ""# ##0.00"") & "" "" & """ & RS!Symbole & """) AS [Estimation_Devise], (Format(Livre.Estimation, ""# ##0"") & "" "") AS [Estimation_EUR], (Format(Livre.PrixAchat * " & C2S(RS!Change) & ", ""# ##0.00"") & "" "" & """ & RS!Symbole & """) AS [Achat_Devise], (Format(Livre.PrixAchat, ""# ##0"") & "" "") AS [Achat_EUR], Livre.IDLiv, Livre.Emplacement, Livre.Stock, Livre.Designation " _ & "INTO Catalogue " _ & "FROM Livre " & Req End If RS.Close ' On tient compte du pré-auteur If PreAuteur Then CurrentDb.Execute "UPDATE Catalogue SET Designation = Left(Clean([PreAuteur]) & ""-"" & [Designation], 100) WHERE PreAuteur IS NOT NULL" ' On renumérote et on nettoie les sections Set RS = CurrentDb.OpenRecordset("SELECT * FROM Catalogue ORDER BY " & Tri) If Not RS.EOF Then Num = 1 Titre = Null Do While Not RS.EOF RS.Edit RS!Numero = Num If IsNull(Titre) Then Titre = RS!Section ElseIf StrComp(Titre, RS!Section) = 0 Then RS!Section = Null Else Titre = RS!Section End If RS.Update Num = Num + 1 RS.MoveNext Loop End If RS.Close CurrentDb.Execute "ALTER TABLE Catalogue DROP COLUMN Designation" CurrentDb.Execute "CREATE INDEX Numero ON Catalogue (Numero ASC)" End Sub
Partager