Definierte Felder an List & Label übergeben

LoMo

Erfahrenes Mitglied
Hi community,

gestern hab ich angefangen mich ein bischen in List & Label einzuarbeiten. Heute bin ich auf ein Problem gestoßen und zwar:

Beim Aufruf von den Designer z.B. muss man die Datenbankfelder definieren und übergeben

Aufruf:
Code:
Private Sub ButtonDesign_Click()
    
    ADOCON.ConnectionTimeout = 0
    ADOCON.CursorLocation = adUseClient
    ADOCON.Open COMADOCon

    SQL_Suchstring = " SELECT * FROM Interessenten_Berichte itb, Interessenten_Stammdaten its "
    SQL_Suchstring = SQL_Suchstring & " where itb.InteressentenNr = its.InteressentenNr "
    SQL_Suchstring = SQL_Suchstring & " order by itb.Wiedervorlage_am desc"
    ADORS1.Open SQL_Suchstring, ADOCON, adOpenKeyset, adLockReadOnly
    If ADORS1.RecordCount = 0 Then
        ADORS1.Close
        ADOCON.Close
        Exit Sub
        End If

    ADORS1.MoveFirst

    'D:   Startet den Designer mit dem Titel "Desgin reports und der Datei "simple.lst"
    
    ListLabel1.Design 2, hWnd, "Design reports", LL_PROJECT_LIST, "Test2.lst", 0

    ADOCON.Close
   
End Sub

Funktion zum definieren und übergeben der Felder:
Code:
Private Sub ListLabel1_CmndDefineFields(ByVal nUserData As Long, ByVal bDummy As Long, pnProgressInPerc As Long, pbLastRecord As Long)

Dim para As String
Dim content As String
Dim nRet As String
Dim i As Integer
    
    'D:   Wiederholung für alle Felder eines Datensatzen
    'UR: Loop for each field in the present recordset
    For i = 0 To ADORS1.RecordCount - 1
        
        'D:   Wiederholung für alle Felder eines Datensatzen
        'UR: Loop for each field in the present recordset
        
        For X = 0 To ADORS1.Fields.Count
        
            Select Case ADORS1.Fields(i).Type
                                                
                'D:   Numerisches Feld
                'US: Numeric field
                Case 3, 4, 6, 7:     para = LL_NUMERIC:      content = ADORS1.Fields(i)
                
                'D:   Falls der Datentyp "Datum" ist, Umwandlun in einen numerischen Datumswert
                'US: If datatyp "Date" convert to numeric date-value
                Case 8:             para = LL_DATE_MS:      content = CDate(ADORS1.Fields(i))
                
                'D:   Entscheidungsfeld (Ja/Nein), Boolean
                'US: True/False field, boolean
                Case 1:            para = LL_BOOLEAN:      content = ADORS1.Fields(i)
                
                'D:   Zeichenformat = Text
                'US: Characterformat = Text
                Case Else:          para = LL_TEXT:
                If Not IsNull(ADORS1.Fields(i)) Then
                    content = ADORS1.Fields(i)
                    End If
            
            End Select
        
            nRet = ListLabel1.LlDefineFieldExt(ADORS1.Fields(i).Name, content, para)
        Next X
        
    Next i

    'D:   Werden Echt-Daten benötigt? (nicht bei Designer-Aufruf)
    'US: Is real data needed? (not when method Design has been called)
    If bDummy = 0 Then

        'D:   Gehe zum nächsten Datensatz
        'US: Jump to next record
        ADORS1.MoveNext

        'D:   Wenn kein weiterer Datensatz mehr folgt, dann wird der Druck beendet
        'US: If there is no more recordset printing will be finished
        If ADORS1.EOF = True Then pbLastRecord = 1
        
    End If

End Sub

Die Funktion hab ich aus einen Beispiel kopiert allerdings wurde beim Beispiel mit der Komponente ADO gearbeitet. Ich habs dann so umgeändert wie ich standartmäßig mich verbinde.

Problem:
Die Felder werden zwar richtig definiert aber das Problem ist er übergibt nicht alle Felder.

Beispiel:
2 Datensätze sind in einer Tabelle vorhanden => er übergibt nur die ersten 2 Felder (Obwohl es eigentlich gehen sollte, da ich ne Schleife mit Fields(i).count mach)

Weiß evtl. jemand wo der Fehler liegen könnte ?

mfg
 
Zuletzt bearbeitet:
Hab den Fehler gefunden :). Die Schleife mit den RecordCount komplett entfernen und statt X die Variable I in der Field.count Schleife

So sieht es dann aus:
Code:
Private Sub ListLabel1_CmndDefineFields(ByVal nUserData As Long, ByVal bDummy As Long, pnProgressInPerc As Long, pbLastRecord As Long)

Dim para As String
Dim content As String
Dim nRet As String
Dim i As Integer
            
    For i = 0 To ADORS1.Fields.Count - 1

        Select Case ADORS1.Fields(i).Type
                                            
            'Numerisches Feld
            Case 3, 4, 6, 7:     para = LL_NUMERIC:      content = ADORS1.Fields(i)
            
            'Falls der Datentyp "Datum" ist, Umwandlun in einen numerischen Datumswert
            Case 8:             para = LL_DATE_MS:      content = CDate(ADORS1.Fields(i))
            
            'Entscheidungsfeld (Ja/Nein), Boolean
            Case 1:            para = LL_BOOLEAN:      content = ADORS1.Fields(i)
            
            'Zeichenformat = Text
            Case Else:          para = LL_TEXT:
            If Not IsNull(ADORS1.Fields(i)) Then
                content = ADORS1.Fields(i)
                End If
        
        End Select
    
        nRet = ListLabel1.LlDefineFieldExt(ADORS1.Fields(i).Name, content, para)
    Next i
        
    
    If bDummy = 0 Then
        ADORS1.MoveNext

        'Wenn kein weiterer Datensatz mehr folgt, dann wird der Druck beendet
        If ADORS1.EOF = True Then pbLastRecord = 1
        
    End If

End Sub

mfg
 
Zurück