Hi Dieter,
also erstmal was positives: das Anzeigen der Daten geschieht im Recordsetmodus hammerschnell (und leise). Vorher habe ich eine sevListBox benutzt und die Daten über eine Schleife in die Liste geladen... das hat bei rappelnder Festplatte schon mal gut 10-15 Sekunden gedauert.
Nun zu meinem Problem: Erstmal ein paar grundsätzliche Sachen die du wissen solltest. Ich habe eine Datenbank mit einer Tabelle Mails die folgendermaßen angelegt ist:
Feldname | Datentyp
=====================
FileName | String
MailFrom | String
MailDate | String
MailTime | String
Subject | String
Status | Byte
WithAttachment | Ja/Nein (Boolean in VB)
Mit der sevListBox habe ich es so gemacht:
Set Rs = DB.OpenRecordset(strSQL)
While Not Rs.EOF
strFileName = Rs.Fields("FileName")
If FileExists(strFileName) Then
strBetreff = Rs.Fields("Subject")
strFrom = Rs.Fields("MailFrom")
If InStr(1, strFrom, "<") > 0 Then
strSender = Trim(Mid(strFrom, 1, InStr(1, strFrom, "<") _
- 1))
Else
strSender = strFrom
End If
strDatum = Rs.Fields("MailDate")
strZeit = Rs.Fields("MailTime")
roLstMails.AddItem GetFileName(strFileName), vbTab & _
strBetreff & _
vbTab & strSender & vbTab & strDatum & " " & strZeit & _
vbTab & _
Format(strDatum, "yyyymmdd") & Format(strZeit, "hhmmss")
Else
'Eintrag aus DB löschen, da überflüssig
Rs.Delete
Rs.Update
End If
Rs.MoveNext
Wend Ein paar Zeilen habe ich ausgelassen, da sie unwichtig sind. So hat es bisher ganz gut funktioniert, nur das es halt ein bisschen langsam war. Hier sieht man auch, dass ich vor der Anzeige noch ein paar Daten verändere die so nicht in der Datenbank stehen. Genau das gleiche hatte ich jetzt mit dem sDG auch vor. Also habe ich die Spalten so erzeugt (roLstMails ist jetzt das sevDG):
roLstMails.ColumnAdd "image", " ", 250, , , TYP_IMAGE
roLstMails.ColumnAdd "betreff", "Betreff", 4000
roLstMails.ColumnAdd "empfabs", "Absender", 1800
roLstMails.ColumnAdd "datum", "Datum", 1800
roLstMails.ColumnAdd "sort", "", , , False Dann habe ich die Daten über das Recordset anzeigen lassen:
Set Rs = DB.OpenRecordSet(strSQL)
roLstMails.LockUpdate True
Set roLstMails.Recordset = Rs
roLstMails.LockUpdate False
roLstMails.Refresh Von der Geschwindigkeit her ist das schon ziemlich überzeugend, allerdings habe ich ja so überhaupt keine Möglichkeit mehr vor der Anzeige der Daten einzugreifen und ein paar Einträge umzuändern. Zum Beispiel sind in der Datenbank das Datum und die Zeit einer Mail als zwei Felder gespeichert, im sevDG sollen diese beiden Felder aber z.B. nur in einer Spalte angezeigt werden. Nur wie kann ich das steuern? Muss ich über DAO erst eine neue Tabelle anlegen, alle Rows im RecordSet in einer While...Wend-Schleife wieder durchgehen und in das neue RS kopieren? Wenn ja, wie kann ich das machen (bin kein DAO-Experte, habe sonst immer ADO benutzt, aber DAO ist ja von der Runtime her kleiner)?
Ich hoffe du weißt, was ich erreichen will und hoffe du kannst mir helfen. Im Notfall würde ich dir das Projekt auch per Mail schicken...
MfG
vb__ |