# SQL Befehl in Visual Basic 6.0



## itsection (24. April 2003)

Hallöchen,

ich habe da ein paar Probleme.
Also ich habe da eine Datenbank (database.mdb) die drei Tabellen hat (Mitarbeiter, Arbeitsort und WerWoWannWieviel).
In der Tabelle Mitarbeiter sind die ganzen Miterabeiterdaten enthalten also zum Beispiel, Nachname, Vorname, Adresse und so weiter.
In der Tabelle Arbeistort sind dann die Arbeitsorte enthalten.
Die Tabelle WerWoWannWieviel enthält folgende Felder:

Datum
Nachname
Vorname
Arbeitsort
Betrag

Der Nachname, Vorname und der Arbeitsort werden aus den zwei anderen Tabellen geholt. Dann kann man das Datum und den Betrag noch zusätzlich eingeben.
Nun kann ich mit folgendem SQL-Befehl
SELECT Datum, Arbeitsort, SUM (Betrag) AS Gesamtbetrag FROM WerWoWannWieviel GROUP BY Datum, Arbeitsort
die Beträge addieren, die am selben Tag am selben Arbeitsort reingekommen sind.
Mit Hilfe des Visual Data Manager funktioniert dieser SQL-Befehl auch. Doch jetzt will ich diesen Befehl, also somit die zusammengezählten Beiträge in einen String speichern, meinetwegen auch in einem Double, wenn dass besser ist.
Wie kann ich dass denn im Visual Basic machen? Wie muß denn der Quelltext dazu aussehen. Das ganze soll dann innerhalb des folgenden Quelltextes geschehen:

Private Sub Command1_Click()
    Dim Eingabe1 As String
    Dim Eingabe2 As String
    Dim SQLKommando As String
    Eingabe1 = Textfeld1.Text
    Eingabe2 = Textfeld3.Text

...
End Sub

Der String "SQLKommando" soll dann den addierten Betrag enthalten. Ich habe da schon ein bisschen rum experimentiert und habe es mit folgendem Code probiert:

    Dim Cn As ADODB.Connection
    Dim Rs As ADODB.Recordset

    Dim SQLKommando As String
    Set Rs = New ADODB.Recordset
    Set Cn = New ADODB.Connection
    SQLKommando = "SELECT Datum, Arbeitsort, SUM (Betrag) AS " & _
         "Gesamtbetrag FROM WerWoWannWieviel GROUP BY Datum, Arbeitsort"
    With Cn
        .Provider = "Microsoft.Jet.OLEDB.3.51;"
        .ConnectionString = "C:\pfad\database.mdb"
        .Open
    End With
    With Rs
        .Source = SQLKommando
        .ActiveConnection = Cn
        .Open
    End With
    Textfeld9.Text = "Der gesammt Betrag ist: " & _
    Rs.Fields("Betrag").Value & " Euro"

    Rs.Close
    Cn.Close

Nun würde der Betrag nicht in einen String gespeichert, sondern gleich in ein Textfeld schreiben, was ich eigentlich auch will.
Aber das klappt nicht so ganz. Irgendetwas stimmt da nicht, kommt immer folgende Fehlermeldung:

Laufzeitfehler '3265'
Ein Objekt, das dem angeforderten Namen oder dem Ordinalverweis entspricht, kann nicht gefunden werden.

Kann mir da bitte jemand helfen und evtl. den richtigen Code hinschreiben?

Ich muß dazu sagen das ich ein Anfänger bin, der noch nicht soviel mit Visual Basic gearbeitet hat.

Grüssle und einen großen Dank im voraus
Christian


----------



## Dario Linsky (24. April 2003)

Probier das mal so:

```
'Variablen
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim SQLKommando As String

'Objekte erstellen
Set Rs = New ADODB.Recordset
Set Cn = New ADODB.Connection

'Abfrage erstellen
SQLKommando = "SELECT Datum, Arbeitsort, SUM (Betrag) AS Gesamtbetrag FROM WerWoWannWieviel GROUP BY Datum, Arbeitsort"
'Verbindung öffnen
Cn.Open "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=database.mdb"
End With
Rs.Open SQLKommando, Cn
Textfeld9.Text = "Der gesammt Betrag ist: " & CStr(Rs.Fields("Gesamtbetrag")) & " Euro"

'Objekte schließen
Rs.Close
Cn.Close

'Objekte zerstören
Set Rs = Nothing
Set Cn = Nothing
```

Wenn Du in der Abfrage dem Feld ein Alias ("Betrag As Gesamtbetrag") gibst, also anders benennst, dann musst Du auch auf den angepassten Feldnamen zugreifen.


----------



## itsection (24. April 2003)

Hi Lirion,

ersteinmal vielen Dank für die schnelle Antwort.
Ok, war logisch. Das mit dem AS Gesamtbetrag. Danke, ich wäre da glaube ich nie draufgekommen.

Aber ich habe nochmal eine Frage.
Mit diesem SQL-Befehl:
SELECT Datum, Arbeitsort, SUM (Betrag) AS Gesamtbetrag FROM WerWoWannWieviel GROUP BY Datum, Arbeitsort
kann ich ja nicht abfragen welches Datum er mir Zusammenfassen soll.
Gibt es eine Möglichkeit anstatt dem "GROUP BY Datum, Arbeitsort" einen anderen String hinzugeben? Also wie folgt?
SELECT Datum, Arbeitsort, SUM (Betrag) AS Gesamtbetrag FROM WerWoWannWieviel GROUP BY Datumstring, Arbeitsortstring
Wobei dann der Datumsstring dann zum Beispiel 25.04.2003 ist.
Also der SQL-Befehl sollte dann praktisch alle Beträge addieren, die zum Beispiel am "25.04.2003" an einem bestimmten Arbeitsort, zum Beispiel "Kasse1" eingenommen worden sind.

Würde das irgendwie gehen? Also vielleicht so?

SQLKommando = "SELECT Datum, Arbeitsort, SUM (Betrag) AS Gesamtbetrag FROM WerWoWannWieviel GROUP BY " + Datumstring + ", " + Arbeitsort
Und der Datumsstring wäre dann "25.04.2003"
und der Arbeitsortstring wäre dann "Kasse1"

Grüssle
Christian


----------

