Bonjour,
Premièrement, voici mes outils : j'ai un application Access 2003 qui utilise une BD SQL (je sais, c'est étrange). J'utilise Microsoft SQL Server Management Studio Express.
J'essaie présentement d'exécuter une requête à partir de mon application pour insérer quelques lignes de 2 tables dans une autre. Ma requête fonctionne bien quand je l'exécute directement dans SQL Server Management ou quand je crée une nouvelle requête et que je l'exécute en mode SQL dans Access, mais étrangement elle ne fonctionna pas à partir de mon application... Je reçois un erreur du genre "ODBC Call failed" pour une raison inconnue que je ne peux découvrir car ma requête fonctionne bien quand je l'exécute à partir d'SQL Server Management ou le créateur de requête de Access...

Voici mon code VBA :
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
53
54
 
Private Sub cmdReport_Click()
On Error GoTo Erreur
ErrRoll = False
 
'** sauvegarde l'enregistrement !!
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
Dim Db As Database
Dim Ws As Workspace
Dim Rs As Recordset
Dim Rs1 As Recordset
Dim Rs2 As Recordset
Set Ws = DBEngine.Workspaces(0)
Set Db = CurrentDb
Dim HasDuplicate As Boolean
HasDuplicate = False
'** Recherche les doublons dans Tag #
Set Rs = Db.OpenRecordset("SELECT DISTINCTROW First(TbTrxInHstDtl.NoTrx) AS NoTrxChamps, First(TbTrxInHstDtl.TagNo) AS UnitéNumberChamps, Count(TbTrxInHstDtl.NoTrx) AS NombreDeDbls FROM TbTrxInHstDtl " _
    & "GROUP BY TbTrxInHstDtl.NoTrx, TbTrxInHstDtl.tagNo " _
    & "HAVING (((Count(TbTrxInHstDtl.NoTrx))>1) AND ((TbTrxInHstDtl.NoTrx)=" & Me![NoTrx] & ") AND ((Count(TbTrxInHstDtl.TagNo))>1));", 8)
If Not Rs.BOF Then
    MsgStop ("Le même numéro de Tag est inscrit en double !" & Chr$(13) & "Corrigez.")
    [RqTrxInDtl].SetFocus
    Exit Sub
End If
'*** check si en inventaire on a meme Tag No pour meme BOL(in)
Set Rs = Db.OpenRecordset("SELECT TbInventaire.TagNumber, TbTrxInHstHdr.NoTrx FROM (TbInventaire INNER JOIN TbTrxInHstDtl ON TbInventaire.TagNumber = TbTrxInHstDtl.TagNo) INNER JOIN TbTrxInHstHdr ON (TbTrxInHstHdr.NoTrx = TbTrxInHstDtl.NoTrx) AND (TbInventaire.ClientProduitNo = TbTrxInHstHdr.ClientProduitNo) AND (TbInventaire.CliSource = TbTrxInHstHdr.ClientSource) AND (TbInventaire.BolIn = TbTrxInHstHdr.ClientBOLNo) " _
    & "WHERE (((TbTrxInHstHdr.NoTrx)=" & Me![NoTrx] & "));", 8)
If Not Rs.BOF Then
    If vbNo = MsgConfirmA("Le numéro d'entreposage(U.E.) " & Rs![TagNumber] & " est inscrit" _
        & Chr$(13) & "en inventaire pour le même client" _
        & Chr(13) & " et le même numéro d'expédition du client(Exp.#-Client) !" _
        & Chr(13) & "Voulez-vous reporter quand même ?") Then
        [RqTrxInDtl].SetFocus
        Exit Sub
    End If
End If
 
If vbNo = MsgConfirmQ("Reporter cette transaction maintenant ?") Then
    Exit Sub
End If
DoCmd.Hourglass True
Ws.BeginTrans
ErrRoll = True
 
'** insère Dtl
Db.Execute ("INSERT INTO TbTrxInHstDtl ( NoTrx, TagNo, FormatExp, UnitéDeMesure, Localisation, [Note], Qté, QtéExtension, LigneNo, QtéUnit ) " _
    & "SELECT TbTrxInHstDtl.NoTrx, TbTrxInHstDtl.TagNo, TbTrxInHstDtl.FormatExp, TbProduits.UnitéDeMesure, TbTrxInHstDtl.Localisation, TbTrxInHstDtl.Note, TbTrxInHstDtl.Qté, TbTrxInHstDtl.QtéExtension, TbTrxInHstDtl.LigneNo, TbTrxInHstDtl.QtéUnit FROM (TbTrxInHstHdr INNER JOIN TbTrxInHstDtl ON TbTrxInHstHdr.NoTrx = TbTrxInHstDtl.NoTrx) INNER JOIN TbProduits ON (TbTrxInHstHdr.ClientSource = TbProduits.CliId) AND (TbTrxInHstHdr.ClientProduitNo = TbProduits.CliProduitNo) " _
    & "WHERE (((TbTrxInHstDtl.NoTrx)=" & Me![NoTrx] & "));"), dbFailOnError
'*** Envoie en inventaire
Db.Execute ("INSERT INTO TbInventaire (DateIn, CliSource, ClientProduitNo, CliLotNo, NbreUnits, QtéStock, TotalStock, FormatExp, TagNumber, Localisation, TrxLigneNo, RemorqueIn, BOlIn, TrxNumber, LaNote) " _
    & "SELECT DateTrx, ClientSource, ClientProduitNo, ClientLotNo, QtéUnit, Qté, QtéExtension, FormatExp, TagNo, Localisation, LigneNo, RemorqueNo, ClientBOLNo, TbTrxInHstHdr.NoTrx, Note " _
    & "FROM TbTrxInHstHdr INNER JOIN TbTrxInHstDtl ON TbTrxInHstDtl.NoTrx = TbTrxInHstHdr.NoTrx " _
    & "WHERE TbTrxInHstHdr.NoTrx = " & Me![NoTrx]), dbFailOnError
Mon code bogue au dernier Db.Execute.

Est-ce que quelqu'un est en mesure de m'aider?