Domino 9 und frühere Versionen > ND6: Entwicklung
ODBC - result.GetValue Problem
MrXYZ:
Hi @ALL,
habe ein kleines Problem:
Mit einer ODBC Abfrage bekomme ich über result.GetValue("USER_OS_NAME") etc.
alle Informationen aus einem Query.
Allerdings nicht den uniqueidentifier aus der Datenbank und den brauche ich als Schlüssel zwischen Notes und der relationalen DB.
Dim Session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim lookupview As NotesView
Dim configdoc As NotesDocument
Dim Del As NotesDocument
Dim Con As New ODBCConnection
Dim Qry As New ODBCQuery
Dim res As New ODBCResultSet
Dim task As String
Dim systemconnect As String
Dim username As String
Dim password As String
Dim counter As Integer
task = "CheckID"
Set db = Session.currentdatabase
Set lookupview = db.GetView("lookup")
Set configdoc = lookupview.GetDocumentByKey(task)
systemconnect = configdoc.odbcconnection(0)
username = configdoc.username(0)
password = configdoc.password(0)
sqlquery = configdoc.sql(0)
%REM
' alle Kunden vor neuem Import aus Notes DB löschen
Dim collection As NotesDocumentCollection
Set collection = db.AllDocuments
If collection.Count >= 1 Then
Call collection.RemoveAll ( True )
End If
%END REM
'Verbindungsaufbau gewählter Verbindung
RetCode% = Con.ConnectTo(systemconnect,username,password)
Set Qry.Connection = Con '
Qry.SQL = sqlquery
Set Res.Query = Qry
Res.Execute
RetCode% = Res.FirstRow
Do While RetCode% =True
Dim Doc As New NotesDocument(db)
doc.form = "standardtest"
doc.ID = Cstr(res.GetValue("R_OBJECT_ID"))
doc.UserID = Cstr(res.GetValue("USER_OS_NAME"))
counter = counter +1
Print counter
Call doc.save (True, True)
'End If
RetCode% = Res.NextRow
Loop
RetCode% = Res.Close( DB_CLOSE )
RetCode% = Con.Disconnect
Der Wert doc.ID, der in das Feld geschrieben wird, ist immer FALSE.
Es handelt sich dabei um eine SQL Query auf eine MS SQL 2005 DB. Verschiedene Clients habe ich auch schon ausprobiert (Standard Treiber SQL von Windows für die ODBC Verbindung und auch einen SQL Native Client).
Die SQL Abfrage auf dem Server gibt die entsprechenden Werte aus !
Wie bekomme ich den Wert in das Notes-Dokument ?
flaite:
Ich würd mir als erstes den Wert
--- Code: ---
res.GetValue("R_OBJECT_ID")
--- Ende Code ---
im Debugger anschauen. Heisst die Spalte in der MS-Datenbank wirklich R_OBJECT_ID ???
Welchen Datentyp hat es in der MS-SQL? Vielleicht ein Datentyp, der sich in LotusScript nicht durch einen einfachen cast in einen String umwandeln läßt? Weil er vielleicht binär ist?
Da würd ich erstmal anfangen. Ansonsten erscheint mir der Code syntaktisch korrekt, wobei ich noch einen Errorhandler reinpacken würde und im Handler die Connection schliessen (wird oft gesagt und ich bin genau deshalb mal 3 Tage beim Kunden Geisterbahn gefahren).
Gruß Axel
Neopi:
Hi,
überprüfe doch mal mit
sqlabfrage = qry.SQL
Print "SQL Abfrage", sqlabfrage
ob deine Abfrage richtig aus Deinem Config Dok übernommen wird.
Ich starte die Verbindung lieber so:
If conn.ConnectTo (odbcdb, user, password) Then....
Gruß
Martin
MrXYZ:
@Axel: die Vermutung habe ich auch, weiß aber nicht, wie ich die vernünftig konvertiert bekomme.
@Neopi: Abfrage läuft absolut sauber, weil ich die restlichen Informationen aus dem Resultset auslesen kann, nur die ID nicht :-(
MrXYZ:
;) Problem behoben: Lag an der Konvertierung der ROWGUIID:
select CAST(R_OBJECT_ID AS VARCHAR(50)) AS UID , NAME from adressen
Danach schreibt Notes die ID sauber ins Dokument.
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln