Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: elvodia am Dezember 27, 2011, 22:40:17

Titel: SQL Select Weiterverarbeiten
Beitrag von: elvodia am Dezember 27, 2011, 22:40:17
sqlStr = "SELECT tbl_kassenleistungen.KL_Leistungs_ID" _
                        & "FROM (tbl_kassendaten INNER JOIN tbl_kassenleistungen ON tbl_kassendaten.KK_Kassentyp = tbl_kassenleistungen.KL_Kassentyp)" _
                        & "INNER JOIN tbl_patientendaten ON tbl_kassendaten.KK_Kassennummer = tbl_patientendaten.PD_Kassennummer" _
                        & "WHERE (((tbl_patientendaten.PD_ID)=[Formulare]![FM_behandlung_eingabeform]![tf_patient]) " _
                        & "AND ((tbl_kassenleistungen.KL_Leistungsname) Like "" * hausbesuch * ""));"


Ich weis das aus dieser Abfrag nur genau 1 Wert herauskommt. Habe viel gegoogelt aber nix brauchbares gefunden. Ich möchte dieses einen Wert in eine Variable schreiben Mit der ich dann weiter arbeiten kann.
Titel: Re: SQL Select Weiterverarbeiten
Beitrag von: database am Dezember 27, 2011, 22:54:28
Hallo,

z.B.:


Dim rst As DAO.Recordset
Dim strSQL as String, lngKLeitID As Long

strSQL = "SELECT ..... "

set rst = CurrentDB.Openrecordset (strSQL)

If rst.RecordCount >0 Then
    lngKLeistID = rst.Fields(0).Value
Else
    MsgBox "Keine Daten vorhanden"
End If
...
..
.

Set rst = Nothing                
Titel: Re: SQL Select Weiterverarbeiten
Beitrag von: elvodia am Dezember 27, 2011, 23:15:51
strSQL = "SELECT KL_Leistungs_ID " _
                        & "FROM (tbl_kassendaten INNER JOIN tbl_kassenleistungen " _
                        & "ON tbl_kassendaten.KK_Kassentyp = tbl_kassenleistungen.KL_Kassentyp) " _
                        & "INNER JOIN tbl_patientendaten ON tbl_kassendaten.KK_Kassennummer = tbl_patientendaten.PD_Kassennummer " _
                        & "WHERE (((tbl_kassenleistungen.KL_Leistungsname) Like "" * hausbesuch * ""') AND ((tbl_patientendaten.PD_ID)= " & [Formulare]![FM_behandlung_eingabeform]![tf_patient] & "));"
           
            Set rst = CurrentDb.OpenRecordset(strSQL)

            Var_hausbesuchsnummer = rst.Fields(0).Value


Fehler 2465

Access kann das in Ihren Ausdruck angesprochene Feld '|1' nicht finden.

Was mcih auch wundert ist das ich

Like "" * hausbesuch * ""') in Doppel Gänse setzten musste damit es funktioniert.
Titel: Re: SQL Select Weiterverarbeiten
Beitrag von: database am Dezember 27, 2011, 23:49:51
Hallo,

"WHERE (((tbl_kassenleistungen.KL_Leistungsname) Like " & "'*hausbesuch*'" & ") AND ((tbl_patientendaten.PD_ID)= " & [Formulare]![FM_behandlung_eingabeform]![tf_patient] & "));"
Titel: Re: SQL Select Weiterverarbeiten
Beitrag von: elvodia am Dezember 28, 2011, 06:32:26
Leider immernoch selber fehler.

Wäre lieb wenn Ihr nen zusatz Schreibt wenn ihr am Code was ändert. ich möchte ja aus meinen Fehlern Lernen. Mich interesiert warum dies oder das geändert werden musste.
Titel: Re: SQL Select Weiterverarbeiten
Beitrag von: DF6GL am Dezember 28, 2011, 09:32:23
Hallo,


Bitte nimm Dir Ratschläge, die man Dir gibt, zu Herzen und setze die auch ein...


Fehler:  
-- Kein Option Explicit benutzt (sehr wahrscheinlich)
--"Formulare" muss "Forms" lauten. Wenn der Code in diesem Formular steht, dann ME anstelle Forms!MeinFormular nehmen.
-- Variablen IMMER mit dem passenden Datentyp deklarieren.  Datentyp Variant nur benutzen, wenn man das unbedingt braucht.
-- Hochkomma  zuviel vor "AND"



Dim  Var_hausbesuchsnummer  as Long   '????  Hängt von Datentyp des Tabellenfeldes "KL_Leistungs_ID" ab
strSQL = "SELECT KL_Leistungs_ID " _
                       & "FROM (tbl_kassendaten INNER JOIN tbl_kassenleistungen " _
                       & "ON tbl_kassendaten.KK_Kassentyp = tbl_kassenleistungen.KL_Kassentyp) " _
                       & "INNER JOIN tbl_patientendaten ON tbl_kassendaten.KK_Kassennummer = tbl_patientendaten.PD_Kassennummer " _
                       & "WHERE (((tbl_kassenleistungen.KL_Leistungsname) Like ""*hausbesuch*""   ) AND ((tbl_patientendaten.PD_ID)= " & [Forms]![FM_behandlung_eingabeform]![tf_patient] & "));"
           
           Set rst = CurrentDb.OpenRecordset(strSQL)

           Var_hausbesuchsnummer = rst.Fields(0).Value



Die Doppel-Gänse sind nötig, damit VBA die beiden als (einzelnes) Gänsefüsschen-Zeichen (im SQL-String)  auffasst und nicht  als Textbegrenzungszeichen in einer VBA-Codezeile.



Um diese Doppelgänse zu vermeiden, kann anstelle ein Hochkomma verwendet werden, wie database gezeigt hat, dabei vielleicht etwas einfacher geschrieben:


"WHERE (((tbl_kassenleistungen.KL_Leistungsname) Like '*hausbesuch*'    ) AND ((tbl_patientendaten.PD_ID)= " & [Forms]![FM_behandlung_eingabeform]![tf_patient] & "));"



"Unschön" ist die Verwendung von Text ("hausbesuch" ---> KL_Leistungsname) und dem LIKE-Operator einschliesslich der Sternchen : Besser wäre die konsequente Nutzung des Primärschlüssel(wertes).

Wenn trotzdem nach dem Leistungsnamen gefiltert werden soll, dann ist der  = - Operator  (und OHNE Sternchen) vorzuziehen:

WHERE (((tbl_kassenleistungen.KL_Leistungsname) = 'hausbesuch'     ) AND .....
Titel: Re: SQL Select Weiterverarbeiten
Beitrag von: elvodia am Dezember 28, 2011, 09:33:06
[Forms]![FM_behandlung_eingabeform]![tf_patient]

Das Problem war Forms anstatt Formulare zu benutzen.
Titel: Re: SQL Select Weiterverarbeiten
Beitrag von: DF6GL am Dezember 28, 2011, 09:44:39
Hallo,


Du meinst das sicher "anders herum" ..   ;)


"Formulare"    war falsch...


Was ist mit den anderen Punkten?
Titel: Re: SQL Select Weiterverarbeiten
Beitrag von: elvodia am Dezember 28, 2011, 10:21:07
Etwas blöd ausgedrück aber du hast recht. Formulare war falsch.