2014-06-17 34 views
8

Arka plan: Microsoft SQL Server 2008 arka uç ile Access 2010 kullanıcı önyüzünde çalışıyorum. Erişimdeki tabloların hepsi SQL server veritabanına bağlanır. Yeni değerleri (parametreler tarafından sağlanan) bir tabloya ekleyen saklı bir yordamım var. Çok sayıda örnekle karşılaştım ama anlamaya gerçekten yakın olup olmadığımı veya tamamen kapalı olduğumu bilmem. Benzer bir soru daha önce sordum ve iyi bir anwser aldım ama bağlantı dizesi ile ilgili sorunlarım var. İşte bir soru/anwser Calling Stored Procedure while passing parameters from Access Module in VBASaklı yordamı çağırma VBA

Bağlantı dizesi oluşturmak için gereken bilgileri nasıl bulacağımı bilmiyorum ve (ör: sağlayıcı/sunucu adı/sunucu adresini bilmiyorum). Burada "SQL Server veritabanına işaret eden Access bağlantılı bir tablonuz varsa o zaman sadece .Connect dizesini Depolanmış Prosedürü yürütmek için bir DAO.QueryDef nesnesiyle kullanabilirsiniz" ifadesini kullandım - Connection string for Access to call SQL Server stored procedure Uygulamayı denedim Bu kod ancak parametreleri nasıl geçeceğinden emin değildim, bu yüzden önceki bir örneği kullanmayı denedim. Ama hata "arama başarısız oldu" satırında "Set rst = qdf.OpenRecordset (dbOpenSnapshot)" geçerek benim parametreler geçerek kod muhtemelen yol kapalıdır.

Set qdf = CurrentDb.CreateQueryDef("") 
qdf.Connect = CurrentDb.TableDefs("tblInstrumentInterfaceLog").Connect 
qdf.sql = "EXEC dbo.upInsertToInstrumentInterfaceLog" 
qdf.ReturnsRecords = True 
Set rst = qdf.OpenRecordset(dbOpenSnapshot) 

qdf.Parameters.Append qdf.CreateParameter("@BatchID", adVarChar, adParamInput, 60, BatchID) 
qdf.Parameters.Append qdf.CreateParameter("@InstrumentName", adVarChar, adParamInput, 60, InstrumentName) 
qdf.Parameters.Append qdf.CreateParameter("@FileName", adVarChar, adParamInput, 60, FileName) 
qdf.Parameters.Append qdf.CreateParameter("@QueueId", adVarChar, adParamInput, 60, QuenueId) 

rst.Close 
Set rst = Nothing 
Set qdf = Nothing 

kimse benim koduyla yanlış olabilir ve neden bu hatayı alıyorum neyi söyler misiniz? Teşekkür ederim!

+0

bu standart Access veritabanı veya Access Data Project mi? yani ODBC (standart veritabanı) ile bağlantılı tablolar mı yoksa veri projenizi doğrudan bir SQL Server veritabanına bağladınız mı? –

+0

Veritabanını oluşturmadığımdan emin değilim. Anlatmanın bir yolu var mı? – VictoriaJay

+0

Access 2010 için emin değil, ama bakılacak şeyler ... tabloları bağlantılı tablolar mı yoksa yalnızca yerel tablolar gibi mi görünüyorlar? Dosya menüsü seçeneği altında, veritabanına bağlantının ayarlandığı bir Bağlantı seçeneğiniz var mı? –

cevap

11

Victoria

yapabilirsiniz saklı bir ADO kullanarak prosedürü aşağıda gibi ...

Set mobjConn = New ADODB.Connection 
mobjConn.Open "your connection string" 
Set mobjCmd = New ADODB.Command 
With mobjCmd 
    .ActiveConnection = Me.Connection 
    .CommandText = "your stored procedure" 
    .CommandType = adCmdStoredProc 
    .CommandTimeout = 0 
    .Parameters.Append .CreateParameter("your parameter name", adInteger, adParamInput, , your parameter value) 
    ' repeat as many times as you have parameters 

    .Execute 
End With 

Bağlantı dizesini almak için, çizgi

Debug.Print CurrentDb.TableDefs("tblInstrumentInterfaceLog").Connect 

kullanabilecekleri çalıştırmak Anında Pencere ve bu size kullanabileceğiniz bir bağlantı dizesi göstermelidir.

Bunu denerseniz ve herhangi bir sorun yaşarsanız bana bildirin.

Kül

+1

Bağlantı dizesi, CurrentDB.TableDef nesneleri varsayılan olarak DAO kullandığından ve bu bağlantı ADO kullanıyor olduğundan, farklı olması gerekebilir. http://www.connectionstrings.com gerekli değişiklikleri bulmak için oldukça kullanışlı bir kaynaktır. –

+0

Evet! Bu işe yaradı, tüm yardımlarınız için teşekkürler! – VictoriaJay

+0

Sevindim Yardımcı olabilirim. –

İlgili konular