By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
424,489 Members | 1,932 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 424,489 IT Pros & Developers. It's quick & easy.

ODBC Call failed

P: 2
Hi,
First of all, here are my work tools : I have an Access 2003 app that uses an SQL Server DataBase (i know it's weird). I am using Microsoft SQL Server Management Studio Express.
I am now trying to execute a query from my app to insert some rows from 2 tables into another. My query works well when i use it rigth into SQL Server Management or when i create a new query in Access, but it don't work in my app... It gives me the "ODBC Call failed" error for an unkwown reason that i can't discover because my query works well in other situations...

Let's see my VBA code :
Expand|Select|Wrap|Line Numbers
  1. Private Sub cmdReport_Click()
  2. On Error GoTo Erreur
  3. ErrRoll = False
  4.  
  5. '** sauvegarde l'enregistrement !!
  6. DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
  7. Dim Db As Database
  8. Dim Ws As Workspace
  9. Dim Rs As Recordset
  10. Dim Rs1 As Recordset
  11. Dim Rs2 As Recordset
  12. Set Ws = DBEngine.Workspaces(0)
  13. Set Db = CurrentDb
  14. Dim HasDuplicate As Boolean
  15. HasDuplicate = False
  16. '** Recherche les doublons dans Tag #
  17. Set Rs = Db.OpenRecordset("SELECT DISTINCTROW First(TbTrxInHstDtl.NoTrx) AS NoTrxChamps, First(TbTrxInHstDtl.TagNo) AS UnitéNumberChamps, Count(TbTrxInHstDtl.NoTrx) AS NombreDeDbls FROM TbTrxInHstDtl " _
  18.     & "GROUP BY TbTrxInHstDtl.NoTrx, TbTrxInHstDtl.tagNo " _
  19.     & "HAVING (((Count(TbTrxInHstDtl.NoTrx))>1) AND ((TbTrxInHstDtl.NoTrx)=" & Me![NoTrx] & ") AND ((Count(TbTrxInHstDtl.TagNo))>1));", 8)
  20. If Not Rs.BOF Then
  21.     MsgStop ("Le même numéro de Tag est inscrit en double !" & Chr$(13) & "Corrigez.")
  22.     [RqTrxInDtl].SetFocus
  23.     Exit Sub
  24. End If
  25. '*** check si en inventaire on a meme Tag No pour meme BOL(in)
  26. 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) " _
  27.     & "WHERE (((TbTrxInHstHdr.NoTrx)=" & Me![NoTrx] & "));", 8)
  28. If Not Rs.BOF Then
  29.     If vbNo = MsgConfirmA("Le numéro d'entreposage(U.E.) " & Rs![TagNumber] & " est inscrit" _
  30.         & Chr$(13) & "en inventaire pour le même client" _
  31.         & Chr(13) & " et le même numéro d'expédition du client(Exp.#-Client) !" _
  32.         & Chr(13) & "Voulez-vous reporter quand même ?") Then
  33.         [RqTrxInDtl].SetFocus
  34.         Exit Sub
  35.     End If
  36. End If
  37. '*** version 3.1 le 06/ déc. 2002
  38. '*** y a t il déjà eu une Trx In pour ce client,, meme BOL number
  39. '** et meme produit ???
  40. 'Set Rs1 = Db.OpenRecordset("SELECT TbTrxInHstHdr.ClientSource, TbTrxInHstHdr.ClientProduitNo, TbTrxInHstHdr.ClientBOLNo FROM TbTrxInHstHdr " _
  41. '    & "WHERE (((TbTrxInHstHdr.ClientSource)='" &[ListClientSource] & "') AND ((TbTrxInHstHdr.ClientProduitNo)='" &[ListClientProduitNo] & "') AND ((TbTrxInHstHdr.ClientBOLNo)=" & [ClientBOLNo] & "));", 8)
  42.  
  43. If vbNo = MsgConfirmQ("Reporter cette transaction maintenant ?") Then
  44.     Exit Sub
  45. End If
  46. DoCmd.Hourglass True
  47. Ws.BeginTrans
  48. ErrRoll = True
  49.  
  50. '** insère Dtl
  51. Db.Execute ("INSERT INTO TbTrxInHstDtl ( NoTrx, TagNo, FormatExp, UnitéDeMesure, Localisation, [Note], Qté, QtéExtension, LigneNo, QtéUnit ) " _
  52.     & "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) " _
  53.     & "WHERE (((TbTrxInHstDtl.NoTrx)=" & Me![NoTrx] & "));"), dbFailOnError
  54. '*** Envoie en inventaire
  55. Db.Execute ("INSERT INTO TbInventaire (DateIn, CliSource, ClientProduitNo, CliLotNo, NbreUnits, QtéStock, TotalStock, FormatExp, TagNumber, Localisation, TrxLigneNo, RemorqueIn, BOlIn, TrxNumber, LaNote) " _
  56.     & "SELECT DateTrx, ClientSource, ClientProduitNo, ClientLotNo, QtéUnit, Qté, QtéExtension, FormatExp, TagNo, Localisation, LigneNo, RemorqueNo, ClientBOLNo, TbTrxInHstHdr.NoTrx, Note " _
  57.     & "FROM TbTrxInHstHdr INNER JOIN TbTrxInHstDtl ON TbTrxInHstDtl.NoTrx = TbTrxInHstHdr.NoTrx " _
  58.     & "WHERE TbTrxInHstHdr.NoTrx = " & Me![NoTrx]), dbFailOnError 
  59.  
My code is bugging at the last Db.Execute.

Can someone help me please?
Jan 21 '10 #1
Share this Question
Share on Google+
3 Replies


nico5038
Expert 2.5K+
P: 3,072
Guess the INSERT has an error.
Best to place a breakpoint in the code and when the db.execute has been reached to do a print of the string in the immediate window.
Next copy / paste the string into a query and execute it in the query editor to get the exact error message.

Nic;o)
Jan 23 '10 #2

P: 2
Finaly i don't have this bug anymore... don't know what i did to correct it but it's ok now with this same query.

I definitly hate Access
Jan 23 '10 #3

nico5038
Expert 2.5K+
P: 3,072
It might fail when fields are empty, just add some code to test them before executing the query.

Success and "au revoir" :-)

Nic;o)
Jan 23 '10 #4

Post your reply

Sign in to post your reply or Sign up for a free account.