2016-03-29 13 views
4

Ich erhalte einen Fehler "Laufzeitfehler (13): Typenkonflikt", wenn ich versuche, den folgenden Sproc von einem Nachaktualisierungsereignis in Access auszuführen. Mein Sproc hat die @Season als nvarchar (max) und @Year als int in der SQL (MSSQL2014). Irgendwelche Ideen bezüglich der Ursache? Ich habe den ganzen Tag gesucht, aber noch keine Freude. Hier ist der Code:Ausführen von parametrisierten gespeicherten T-SQL-Prozedur in 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 

Wäre dankbar für alle Hinweise hier. Irgendwelche weiteren Informationen benötigen, lassen Sie mich wissen.

+1

Ich denke 'adVarChar' sollte durch' adVarWChar' ersetzt werden. –

+1

^^ das - das 'n' macht den Parameter Unicode, also brauchen Sie einen Unicode-Parameter. Gibt es auch einen Grund, warum "@ Season" 'nvarchar (max)' ist? Wenn Sie können, machen Sie die Prozedur eine '@SeasonId int'. Ich würde einen 4000-Zeichen-Input (wenn der tatsächliche Bedarf wahrscheinlich <50 ist) als Design-Geruch nehmen. –

+0

Versuchen Sie 'Execute' anstatt' ADODB.Commands' zu verwenden. 'cnn1.Execute (" EXEC dbo.StoredProcedure '"& vSaison &"', "& vYear & ";") ' – gofr1

Antwort

0

Ich denke, das Problem ist, dass CreateParameter Größe für AdVarChar-Datentyp vor seinem Wert benötigen.

versuchen so etwas wie:

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

im Code der Wert vSeason als Größenparameter übergeben wird,
Sie eine Zeichenfolge als ganze Zahl an Create vorbei, Dies ist die Typenkonfliktfehler

Ich hoffe das hilft