Autor Thema: result.GetValue Fehler "-8" bei Zugriff SQL-Server 2005 Express "nChar"-Feld  (Gelesen 1281 mal)

BigWim

  • Gast
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
« Letzte Änderung: 29.01.09 - 17:14:16 von BigWim »

BigWim

  • Gast
Zitat
Ich finde, dass meine Funktion zum Auslesen der SQL-Tabellen nicht viel anders aussieht, als die vielen Scripte, die ich diesem Forum gefunden habe.
Das ist richtig. Die Funktionen arbeiten fehlerfrei.  :)

Zitat
aber ich habe keinen blassen Schimmer, wo.
Es liegt an dem SQL-Datentyp "nchar". Ich habe aus der SQL-Server-Schulung mitgenommen, dass dieser Datentyp die bessere Wahl sei. Es wurde auch eine Begründung angeführt, an die ich mich aber nicht mehr Erinnerung kann. :-\

Alle SQL-Datenbanken, die ich finden konnte, benutzen den SQL-Datentyp "varChar", der auch in meiner Testfunktion bekannt ist. Ich habe die Tabellendefinition umgestellt und es funktioniert bestens!

Ich lass das jetzt so, weil es anders auch nicht funktioniert, aber wissen tät ich schon gern, welche Gründe es geben könnte "nChar" einzusetzen .....

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz