DataGrid Inhalte per Mail versenden

Supervreni

Grünschnabel
Hallo zusammen!

Ich habe eine Form mit Kundendaten und Fahrzeugdaten. Die Daten des Kunden werden ganz normal in lbl-Feldern angezeigt und die jeweiligen Fahrzeuge die ein Kunde hat werden in einem Datagrid angezeigt!
So weit, so gut!

Nun möchte ich Die Inhalte meiner Form per Mail versenden und das funktioniert auch schon einigermaßen nur die Daten aus dem DataGrid machen mir Schwierigkeiten da hier wenn in dem DataGrid 2 Zeilen drin sind der erste Datensatz 2 mal verschickt wird.

Ich habe folgenden Code:

Dim m As Integer
Dim N As Integer, O As Integer
Dim Zeile As String

If fzgdat.State <> adStateOpen Then
fzgdat.Open "select * from fahrzeug where kundennummer = " + lbl_knr + "", conn,
adOpenDynamic, adLockPessimistic
End If

O = 0

Do Until fzgdat.EOF
For N = 0 To DataGrid3.Columns.Count - 1
Zeile = Zeile & Me.DataGrid3.Columns.Item(N).Text & "/ "
Next
Zeile = Mid(Zeile, 1, Len(Zeile) - 2)
Zeile = Zeile & vbCrLf

O = O + 1
fzgdat.MoveNext
'DataGrid3.col´´

Loop
fzgdat.Close

---------------------------------------

In der Email die generiert wird steht dann bei .body nur noch
"Der Kunde hat folgende Fahrzeuge: " & vbCrLf & _
Zeile & vbCrLf & _

Jedoch bekomme ich nun wenn der Kunde 2 Fahrzeuge besitzt zwar 2 Datensätze gemeldet, doch wird beide male nur der erste Datensatz aus dem Datagrid angedruckt!
Hat ein Kunde 3 Fahrzeuge dann bekomme ich den ersten Datensatz 3 mal angedruckt usw. wobei es ja 2 bzw. 3 verschiedene Fahrzeuge sein müssten.

Vielleicht sieht einer von euch auf Anhieb den Fehler und kann mir helfen.
Mit der .row-methode hab ich es auch versucht nur kommt da immer das die Methode oder Mitgliedsdaten nicht vorhanden sind.

Bitte helft mit ;) denn ich probier irgendwie schon seit Ewigkeiten dran rum und wenn das fertig ist dann kanns auch endlich damit in "Produktion" gehen ;-)

Dankeschön
 
Hi

wenn ich mir deinen Code so anschaue, fällt mir foldendes auf:
Du holst dir aus der Datenbank mit der Kundennummer einen Datensatz, aber anschiessend arbeitest du mit ner Schleife. Warum? Wieviele Datensätze mit derselben KndNr erwartest Du denn?
Nun taucht "DataGrid3.Columns.Count" auf. Was ja eigendlich nur bedeuten kann, das mehrere "Spalten" in der DB sind und Du nun die 3. (oder so) brauchst.
Versteh ich also auch nicht, da ja mit "select * from fahrzeug where kundennummer ="
schon nach den Fahrzeugen gefragt wird.
Hab leider keine Zeit um dir den Code zu schreiben und wäre dann halt auch nicht da, wenn ein Fehler in meinem Code wäre.
 
Also ich hole mir aus der Tabelle Kunden den datensatz des Kunden! Danach fülle ich das Datagrid mit den Fahrzeugdaten des Kunden! Da ein Kunde ja meherere Autos besitzen kann ist die Kundennummer also mehrmals vorhanden. das heisst es gäbe in der Tabelle Fahrzeuge mehrere Datensätze mit der gleichen Kundennummer (Primärschlüssel ist in diesem Fall die Fargestellnummer falls das interessiert!)
Heisst also ich erhalte in meinem Datagrid beispielsweise 3 Zeilen mit 3 verschiedenen Fahrzeugtypen.
Nun will ich also die 3 Zeilen die sich in meinem Datagrid befinden in einer Mail verschicken! Ich lese also die Spalten (8 Stück) aus! Und da liegt ja irgendwo mein fehler weil der MoveNext nicht in die nächste Zeile springt sondern eben 3mal die erste Zeile wiedergegeben wird.

Verstanden? Ich weiss es klingt ein wenig wirr, aber nun ja ... ;-]
 
Hallo supervreni,

das liegt daran, dass Du durch Dein Recordset läufst, was jedoch nicht automatisch bedeutet, dass im Grid in die nächste Zeile gesprungen wird.

Viel besser ist es so:
Visual Basic:
Do Until fzgdat.EOF
        Zeile = Zeile & fzgdat.Fields("Auto") & "/ "
        Zeile = Mid(Zeile, 1, Len(Zeile) - 2)
        Zeile = Zeile & vbCrLf
        fzgdat.MoveNext
Loop

Du musst doch nicht die Werte aus dem Grid holen, wenn Du ohnehin das Recordset im Zugriff hast.

Nebenbei noch ein kleiner Tipp hier fürs Forum: Wenn Du mit Code-Tags arbeitest, ist Dein Beispiel besser zu lesen.

Viele Grüsse
Ronald
 
Zurück