2016-03-29 24 views
4

içinde parametreli T-SQL saklı yordamını yürütme "Access time error (13): tür uyuşmazlığı" hatası alıyorum, Access'te bir sonraki güncelleme olayından aşağıdaki sproc'i çalıştırmayı denediğimde. Benim sproc nvarchar (max) olarak @Season ve SQL (MSSQL2014) int olarak @Year vardır. Sebep ile ilgili herhangi bir fikir var mı? Bütün gün aradım ama henüz hiç sevinç yok. İşte kod:Access vba

Private Sub Event_Click() 

    Dim cnn1 As New ADODB.Connection 
    Dim cmd As New ADODB.Command 


    Set cnn1 = New ADODB.Connection 
    cnn1.ConnectionString = "<connection string snipped but works OK>" 
    cnn1.ConnectionTimeout = 30 
    cnn1.Open 

vSeason = Me.ComboBox1.Value 
vYear = Me.ComboBox2.Value 

With cmd 
    .ActiveConnection = cnn1 
    .CommandText = "dbo.StoredProcedure" 
    .CommandType = 4 
    .CommandTimeout = 0 
    .Parameters.Append .CreateParameter("@Season", adVarChar, adParamInput, vSeason) 
    .Parameters.Append .CreateParameter("@Year", adInteger, adParamInput, vYear) 

End With 

    cnn1.Close 
    Set cnn1 = Nothing 

Burada herhangi bir işaretçi için minnettar olur. Gerekli herhangi bir bilgi bana bildirin.

+1

"adVarChar" ile değiştirilmesi gerekir "adVarWChar". –

+1

^^ 'n - 'n' parametreyi unicode yapıyor, bu nedenle bir unicode parametresi gerekiyor. Ayrıca, 'Sezon' nvarchar (max) 'ın bir nedeni var mı? Yapabiliyorsanız, prosedürü bir '@SeasonId int' yapın. Bir tasarım kokusu olarak 4000 karakterlik bir girdi (gerçek ihtiyaç muhtemelen <50 olduğunda) alırdım. –

+0

"Execute" yerine "ADODB.Commands" kullanmayı deneyin. cnn1.Execute ("EXEC dbo.StoredProcedure" "& vSeason &" ', "& vYear & ";") ' – gofr1

cevap

0

Sorun, CreateParameter değerinin adVarChar veri türü için değerinden önce gereksinim duyması gerektiğidir. değer vSeason boyutu parametre olarak geçirilir kodunuzda

.Parameters.Append .CreateParameter("@Season", adVarChar, adParamInput, 200, vSeason) 

,
sen CreateParameter için tamsayı olarak bir dize geçiyoruz, bu tür uyumsuzluğu hatayı

edilir:

gibi bir şey denemek

Umarım bu yardımcı olur