Hallo zusammen,
ich versuche per Notes, Daten aus einem SQL-Server 2005 Express auszulesen. Die Tabelle habe ich aus Notes per INSERT gefüllt. Da es sich um ein Pilotprojekt handelt, habe ich es einfach gehalten (dachte ich) und nur die SQL-Server-Feldtypen „smallint“ und „nchar(50)“ verwendet. Der Insert funktioniert prächtig (*Stolz*)
Bei Auslesen der „smallint“ hatte ich keine Probleme, allerdings bekomme ich die Werte der „nChar“-Felder nicht. Fehler „-8“
Ich finde, dass meine Funktion zum Auslesen der SQL-Tabellen nicht viel anders aussieht, als die vielen Scripte, die ich diesem Forum gefunden habe. Da es auch im www scheinbar dieses Problem nicht gibt, bin ich davon überzeugt, dass ich den Fehler vorher mache – aber ich habe keinen blassen Schimmer, wo.
Der Fehler "-8" wird durch meine Testfunktion LogSQLVarType ausgeben. Über die Testfunktion LogInfoResult bin ich mir sicher, dass ich einen Datensatz mit allen Spalten zurückgeliefert bekomme.
Ich habe es versucht mit:
1) Call result.GetValue( strSuche.sFeldname , strSuche.sFeldwert )
2) strSuche.sFeldwert = result.GetValue( strSuche.sFeldname)
3) result.FieldExpectedDataType (strSuche.sFeldname, strSuche.sFeldtype)
Und Version 1 + 2
Ich habe auch die Deklaration in Notes geändert von String in Variant und die obigen Test gemacht. GetValue liefert mit immer(!) – 8 zurück, wenn ich die „Text“daten aus der SQL-Tabelle auslesen will. In der Hilfe erschien das nicht so schwer - oder ich muss mal mein Englisch auffrischen ...
Was muss ich tun, um die Werte aus dem SQL-Server zurückzuerhalten? Kann mir bitte jemand einen Wink geben?
Vielen Dank im voraus
Markus
' ***
' *** Datensatz aus Tabelle ermitteln (SELECT)
' ***
' ZUD-Tabelle OE: SQL = "select * from dbo.OE where " + strSuche.sWhere
Public Sub GetOEFeld (strSuche As strZudTab_Suche)
Dim tmpString As String
On Error Goto errorHandler
If strSuche.sFeldtype <> "" Then
Call mLog.SchreibenInfo ("vorher:" + Cstr(result.FieldExpectedDataType(strSuche.sFeldname)))
tmpString = result.FieldExpectedDataType (strSuche.sFeldname, strSuche.sFeldtype)
Call mLog.SchreibenInfo("nachher: " + tmpString)
End If
Call result.GetValue( strSuche.sFeldname , strSuche.sFeldwert )
' strSuche.sFeldwert = result.GetValue( strSuche.sFeldname)
Exit Sub
errorHandler:
mLog.strLog.sAktion = qry.SQL
If con.GetError <> DBstsSUCCESS Then
Call mLog.Schreiben (con.GetExtendedErrorMessage)
End If
If qry.GetError <> DBstsSUCCESS Then
Call mLog.Schreiben (qry.GetExtendedErrorMessage)
End If
If result.GetError <> DBstsSUCCESS Then
Call mLog.Schreiben (result.GetExtendedErrorMessage)
End If
Resume Next
End Sub
' ***
' *** Testfunktion
' ***
Public Sub LogInfoResult
Call mLog.SchreibenInfo (Cstr(result.NumColumns) + " Spalten verfügbar")
End Sub
Public Sub LogSQLVarType(sFeldname As String)
Dim tmpString As String
Dim typeConst As Integer
typeConst = result.FieldNativeDataType(sFeldname$ )
Select Case typeConst
Case SQL_CHAR : tmpString = "CHAR"
Case SQL_NUMERIC : tmpString = "NUMERIC"
Case SQL_DECIMAL : tmpString = "DECIMAL"
Case SQL_INTEGER : tmpString = "INTEGER"
Case SQL_SMALLINT : tmpString = "SMALLINT"
Case SQL_FLOAT : tmpString = "FLOAT"
Case SQL_REAL : tmpString = "REAL"
Case SQL_DOUBLE : tmpString = "DOUBLE"
Case SQL_DATE : tmpString = "DATE"
Case SQL_TIME : tmpString = "TIME"
Case SQL_TIMESTAMP : tmpString = "TIMESTAMP"
Case SQL_VARCHAR : tmpString = "VARCHAR"
Case SQL_BINARY : tmpString = "BINARY"
Case SQL_VARBINARY : tmpString = "VARBINARY"
Case SQL_LONGVARCHAR : tmpString = "LONGVARCHAR"
Case SQL_LONGVARBINARY : tmpString = "LONGVARBINARY"
Case SQL_BIGINT : tmpString = "BIGINT"
Case SQL_TINYINT : tmpString = "TINYINT"
Case SQL_BIT : tmpString = "BIT"
Case Else: tmpString = Cstr(typeConst)
End Select
Call mLog.SchreibenInfo(tmpString)
End Sub
Type strZudTab_Suche
bDoSelect As Boolean
sSelect As String
sWhere As String
sFeldname As String
sFeldwert As String
' sFeldwert As Variant
sFeldtype As String
End Type