2017-03-12 5 views
0

Ich habe eine Excel-Anwendung, die eine Verbindung zur HANA-Datenbank mit ODBC herstellt und Tabellendaten im nächsten Blatt auf Knopfdruck abruft. Ich verwende den folgenden Code zum Abrufen von Daten aus der Datenbank: -VBA-Fehler, wenn chinesische Zeichen in der Datenbanktabelle vorhanden sind

Function importRoutine(sheet As String, provider As String, databaseschema As String, server As String, app As String, row As Long, column As Long, commandText As String, displayname As String, errorFlag As Boolean) As Integer 
Debug.Print commandText 
Dim l As QueryTable 
Dim rs As Object 
Dim cnt As ADODB.Connection 
Dim cmd As ADODB.Command 
Dim iCols As Integer 
Set cnt = New ADODB.Connection 
Set cmd = New ADODB.Command 
Set rcd = New ADODB.Recordset 

Dim rangesheet As String 
rangesheet = Sheets(sheet).Cells(row + 1, column).Address 
Dim connectionsheet As String 
connectionsheet = "Driver=" + provider + ";SERVERNODE=" + server + ";" + getAuthentication + "; CS=" + databaseschema + "" 

cnt.ConnectionString = connectionsheet 
cnt.Open 

Set cmd.ActiveConnection = cnt 
cmd.commandText = commandText 
cmd.CommandType = adCmdText  

rcd.Open commandText, cnt '', adOpenStatic 


Set rs = CreateObject("ADODB.RECORDSET") 
rs.ActiveConnection = cnt 
rs.Open commandText, cnt 


    With Sheets(sheet).ListObjects.Add(SourceType:=3, Source:=rs, Destination:=Range(Sheets(sheet).Cells(row, column).Address)).QueryTable 
    '.commandText = commandText 
    '.CommandType = xlCmdSql 
    .RowNumbers = False 
    .FillAdjacentFormulas = False 
    .PreserveFormatting = True 
    .RefreshOnFileOpen = False 
    .BackgroundQuery = True 
    .RefreshStyle = xlInsertDeleteCell 
    .SavePassword = False 
    .SaveData = True 
    .AdjustColumnWidth = False 
    .RefreshPeriod = 0 
    .ListObject.Name = displayname 
    .PreserveColumnInfo = False 
    On Error Resume Next 
    .Refresh BackgroundQuery:=False 
End With 


Sheets(sheet).ListObjects(displayname).TableStyle = "TableStyleMedium10" 
importRoutine = 0 
Call deleteConnection 


CloseRecordset: 
rs.Close 
Set rs = Nothing 
CloseConnection: 
cnt.Close 
Set cnt = Nothing 
     On Error GoTo 0 


End Function 

Der Code funktioniert einwandfrei, wenn die Tabelle englische Zeichen enthält. Wenn die Tabelle jedoch Sonderzeichen wie etwa chinesische Schriftzeichen enthält, kann sie die Daten nicht in das nächste Blatt und in den Fehler werfen.

Gibt es Einschränkungen, dass VBA Daten, die chinesische Zeichen enthalten, nicht abrufen/anzeigen kann?

+0

Was ist der Fehler, bitte? Und welcher Code wird hervorgehoben, wenn es passiert? – Winterknell

Antwort

0

Ich konnte diesen Fehler beheben. Das Problem lag im Datentyp der Spalte in meiner Tabelle. Es war varchar, das einen Unicode-Fehler erzeugte. Als ich dasselbe in NVARCHAR änderte, funktionierte der Datenabruf aus der Datenbank auf dem Blatt für alle anderen Sprachzeichen einwandfrei.

Verwandte Themen