Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Don Pasquale am 24.03.03 - 13:07:37
-
Hallo Leute,
ich habe in einer SQL Datenbank mehrere Datensätze, die ich
in einem Notesfeld darstelen möchte.
Leider klappt die Zeile mit dem ArrayAppend nicht.
Kann mir da jemand helfen ?
Ich möchte zudem Speicherschonender programmieren,
welche Objekte muß ich in dieser Funktion auf Null
setzten?
Ciao
Don Pasquale
Function getNotiz ( DOC_ID As String ) As Variant
Dim NOTIZFELD() As String
Dim DSN As String
Dim USER As String
Dim PASSW As String
DSN = getODBC("E4IHK","DSN")
USER = getODBC("E4IHK","USER")
PASSW = getODBC("E4IHK","PASSW")
Dim SQL As String
Dim iNotiz As Integer
Dim Con As New ODBCConnection
Dim Qry As New ODBCQuery
Dim res As New ODBCResultSet
Dim Notizzeile As String
Dim nUser As String
If Not Con.ConnectTo(DSN, USER, PASSW) Then
Messagebox " Keine Verbindung zur e4\IHK Datenbank" & Chr$(10) & "Überprüfen Sie bitte den DSN Wert in Ihrem Profildokument" & Chr$(10) & "e4_lib: INDEXIEREN2"
Exit Function
Else
SQL = "Select USER_ID, NOTIZTEXT FROM FIRMENAKTE_NOTIZ WHERE DOC_ID = " & Chr$(39) & DOC_ID & Chr$(39)
Set Qry.Connection = Con
Qry.SQL = SQL
Set res.Query = Qry
If Not res.Execute Then
Messagebox _
res.GetExtendedErrorMessage,, res.GetErrorMessage
Exit Function
Else
RetCode% = res.FirstRow
nUSER = res.GetValue( "USER_ID" )
NOTIZZEILE = nUSER & " " & res.GetValue( "NOTIZTEXT" ) & Lf
NOTIZFELD(0) = NOTIZZEILE
Call res.NextRow
Do While Not res.IsEndOfData
nUSER = res.GetValue( "USER_ID" )
NOTIZZEILE = nUSER & " " & res.GetValue( "NOTIZTEXT" ) & Lf
' NOTIZFELD = Arrayappend( NOTIZFELD , NOTIZZEILE)
Call res.NextRow
Loop
getNotiz = NOTIZFELD
End If
End If
End Function
-
... das liegt an deinem .GetValue => liefert ein Array => Array und Textstring gibt Type mismatch...
ata
-
@ata :
Wirklich ? Ich dachte
res.GetValue( "NOTIZTEXT" )
gibt mir einen String ?
Kannitverstan
Don Pasquale
-
... sorry, ich war zu schnell - der fehler könnte in der Dimensionierung deines Array liegen - ein Redim NotizFeld(0 to 0) fehlt...
ata
-
[quote Ich möchte zudem Speicherschonender programmieren,
:o :o Begeisterung :o :o
seit es windows von gates gibt(und RAM ohne Ende) denkt keiner mehr an Speicheroptimierung
res.getvalue gibt einen string zurück
Arrayappend - macht das was der Name schon sagt - ein variant an ein array anhängen - du hast aber eine string und kein variant
cu
-
@Performance
... das täuscht - du kannst auch einen String an ein Array hängen - ich arbeite täglich damit...
ata
-
@ata
ok getäuscht(liegt daran das ich in diesem fall immer den gleichen typ wähle) - habe dein redim jetzt auch gelesen - daran liegts
cu
-
... sorry, ich war zu schnell - der fehler könnte in der Dimensionierung deines Array liegen - ein Redim NotizFeld(0 to 0) fehlt...
ata
Ähm, an welche Stelle ?
Gruß
Don Pasquale
-
... du kannst im Grunde vor deiner ersten Zuweisung den Redim setzen...
' # ...
Redim NOTIZFELD(0 to 0)
NOTIZFELD(0) = NOTIZZEILE
' # ...
ata
-
Das ist mein aktueller Code, der alle Zeilen aus der SQL Datenbank nimmt, nur leider die letzte nicht. Die Quote ist ja ganz gut,
reicht in dem Fall aber nicht aus.
Was mache ich falsch ?
Ciao
Don Pasquale
Function getNotiz ( DOC_ID As String ) As Variant
Dim NOTIZFELD() As String
Dim max As Integer
Dim i As Integer
Dim DSN As String
Dim USER As String
Dim PASSW As String
DSN = getODBC("E4IHK","DSN")
USER = getODBC("E4IHK","USER")
PASSW = getODBC("E4IHK","PASSW")
Dim SQL As String
Dim iNotiz As Integer
Dim Con As New ODBCConnection
Dim Qry As New ODBCQuery
Dim res As New ODBCResultSet
Dim Notizzeile As String
Dim nUser As String
If Not Con.ConnectTo(DSN, USER, PASSW) Then
Messagebox " Keine Verbindung zur e4\IHK Datenbank" & Chr$(10) & "Überprüfen Sie bitte den DSN Wert in Ihrem Profildokument" & Chr$(10) & "e4_lib: INDEXIEREN2"
Exit Function
Else
SQL = "Select USER_ID, NOTIZTEXT FROM FIRMENAKTE_NOTIZ WHERE DOC_ID = " & Chr$(39) & DOC_ID & Chr$(39)
Set Qry.Connection = Con
Qry.SQL = SQL
Set res.Query = Qry
If Not res.Execute Then
Messagebox _
res.GetExtendedErrorMessage,, res.GetErrorMessage
Exit Function
Else
RetCode% = res.FirstRow
' max = Res.Count
nUSER = res.GetValue( "USER_ID" )
NOTIZZEILE = nUSER & " " & res.GetValue( "NOTIZTEXT" ) & Lf
i = 0
Redim Preserve NOTIZFELD( 0 To i +1)
NOTIZFELD(i) = NOTIZZEILE
Call res.NextRow
i = i + 1
Do While Not res.IsEndOfData
nUSER = res.GetValue( "USER_ID" )
NOTIZZEILE = nUSER & " " & res.GetValue( "NOTIZTEXT" ) & Lf
Redim Preserve NOTIZFELD(0 To i+1)
NOTIZFELD(i) = NOTIZZEILE
Call res.NextRow
i = i + 1
Loop
getNotiz = NOTIZFELD
End If
End If
End Function
-
... dein hochzählen der Variable i - hab es nur überflogen - kann es sein daß du dich hier verzählst?
ata
-
@ata:
Nein, es liegt nicht an der Zählvariable i, es liegt
an meiner While Schleife. Die Fragt nach endofdata
ab und das scheint bereits bei der letzten Zeile der
Fall zu sein.
folgender code löst das Problem
i = 0
Redim Preserve NOTIZFELD( 0 To i +1)
NOTIZFELD(i) = NOTIZZEILE
Call res.NextRow
i = i + 1
Do While Not res.IsEndOfData
nUser = getUSerNameofID(res.GetValue( "USER_ID" ) )
NOTIZZEILE = nUSER & " " & res.GetValue( "NOTIZTEXT" ) & Lf
Redim Preserve NOTIZFELD(0 To i+1)
NOTIZFELD(i) = NOTIZZEILE
Call res.NextRow
i = i + 1
Loop
nUser = getUSerNameofID(res.GetValue( "USER_ID" ) )
NOTIZZEILE = nUSER & " " & res.GetValue( "NOTIZTEXT" ) & Lf
Redim Preserve NOTIZFELD(0 To i+1)
NOTIZFELD(i) = NOTIZZEILE
getNotiz = NOTIZFELD
End If
End If
Ich weise einfach nochmal eine Notizzeile zu.
Gruß
Don Pasquale