Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: AvalonStealth am Juli 21, 2011, 12:20:56

Titel: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: AvalonStealth am Juli 21, 2011, 12:20:56
Hallo,

bin gerade etwas am Verzweifeln ???. Versuche seit geraumer Zeit eine strSQL-Anweisung zu realisieren und kriege es einfach nicht hin.
Vielleicht sehe ich schon den Wald von lauter Bäumen nicht. Vielleicht kann mir jemand helfen.

Folgender Code funktioniert in einer normalen Abfrage korrekt. Datensätze werden nach Kriterium gefiltert!

SELECT tblBestandsVeränderung.BestandsVeränderungID, tblBestandsVeränderung.[Derzeit auf Lager], tblBestandsVeränderung.BestellNrSelters FROM tblBestandsVeränderung WHERE tblBestandsVeränderung.BestellNrSelters = [Formulare]![frmArtikelNeuerBestand]![BestellNrSelters] ORDER BY tblBestandsVeränderung.BestandsVeränderungID;

Setze ich diesen aber in eine strSQL Anweisung:
strSQL = "SELECT tblBestandsVeränderung.BestandsVeränderungID, tblBestandsVeränderung.[Derzeit auf Lager], tblBestandsVeränderung.BestellNrSelters FROM tblBestandsVeränderung WHERE tblBestandsVeränderung.BestellNrSelters = [Formulare]![frmArtikelNeuerBestand]![BestellNrSelters] ORDER BY tblBestandsVeränderung.BestandsVeränderungID;"

Dann bekomme ich eine Fehlermeldung: "1 Parameter wurde erwartet, aber es wurden zu wenig Parameter übergeben!  Code 3061

Nun habe ich verschiedene Sachen ausprobiert. Der Fehler liegt wohl im WHERE Kriterium. Setzt ich dort einen einfachen Wert ein, z.B. '5414' funktioniert es! Dieser Wert soll aber abgefragt werden da er sich ändert. So wie laut code. Setze ich das ganze Kriterium in einfache Anführungsstriche, bekomme ich die Meldung "Keine Datensätze vorhanden" obwohl welche da sind. Ich gehe mal davon aus, dass er dann die Formel als Text einsetzt, und natürlich nichts findet.

bin mit meiner Weisheit ziemlich am Ende. Es kann eigentlich nur eine Kleinigkeit sein.

Bitte um Hilfestellung ...  ???
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: database am Juli 21, 2011, 13:11:32
Hallo,

versuch mal den String auf diese Weise aufzubauen:

strSQL = "SELECT tblBestandsVeränderung.BestandsVeränderungID, tblBestandsVeränderung.[Derzeit auf Lager], tblBestandsVeränderung.BestellNrSelters
FROM tblBestandsVeränderung WHERE tblBestandsVeränderung.BestellNrSelters =" & Forms!frmArtikelNeuerBestand!BestellNrSelters & " ORDER BY tblBestandsVeränderung.BestandsVeränderungID;"

bzw. wenn sich der Code im Formular 'frmArtikelNeuerBestand' befindet:

strSQL = "SELECT tblBestandsVeränderung.BestandsVeränderungID, tblBestandsVeränderung.[Derzeit auf Lager], tblBestandsVeränderung.BestellNrSelters FROM tblBestandsVeränderung WHERE tblBestandsVeränderung.BestellNrSelters =" & Me!BestellNrSelters & " ORDER BY tblBestandsVeränderung.BestandsVeränderungID;"

.... alles unter der Voraussetzung dass das Feld 'tblBestandsVeränderung.BestellNrSelters ' ein Zahlenfeld ist -

sollte es ein Textfeld sein und das Formularfeld 'BestellNrSelters' enthält Text dann muss der
Verweis auf das Formularfeld ZUSÄTZLICH in einfache Hochkommata eingeschlossen werden:

strSQL = "SELECT tblBestandsVeränderung.BestandsVeränderungID, tblBestandsVeränderung.[Derzeit auf Lager], tblBestandsVeränderung.BestellNrSelters
FROM tblBestandsVeränderung WHERE tblBestandsVeränderung.BestellNrSelters ='" & Forms!frmArtikelNeuerBestand!BestellNrSelters & "' ORDER BY tblBestandsVeränderung.BestandsVeränderungID;"

bzw:

strSQL = "SELECT tblBestandsVeränderung.BestandsVeränderungID, tblBestandsVeränderung.[Derzeit auf Lager], tblBestandsVeränderung.BestellNrSelters FROM tblBestandsVeränderung WHERE tblBestandsVeränderung.BestellNrSelters ='" & Me!BestellNrSelters & "' ORDER BY tblBestandsVeränderung.BestandsVeränderungID;"



HTH
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: AvalonStealth am Juli 21, 2011, 15:57:10
Hallo database,

;D das wars!!! Es war die Variante mit den Hochkommata. Außerdem fehlte mir das "&"!!! Wird allerdings in keiner Dokumentation als erforderlich so dargestellt.
Super, nun Funktioniert es einwandfrei.

Hab vielen Dank.

Gruß
AvalonStealth
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: DF6GL am Juli 21, 2011, 16:06:16
Hallo,

der eigentliche Knackpunkt in Deiner Version mit dem eingebetteten Formularverweis liegt in der "deutschen" Schreibweise..  Es müsste so lauten:

..
.
tblBestandsVeränderung.BestellNrSelters = [Forms]![frmArtikelNeuerBestand]![BestellNrSelters] ORDER BY
.
.

wobei der Version von database natürlich der Vorzug zu geben ist (und auch nur dort der &-Operator vonnöten ist).
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: database am Juli 21, 2011, 16:15:44
Hi,

ZitatWird allerdings in keiner Dokumentation als erforderlich so dargestellt

Der Suchbegriff 'Variablen String VBA' googelts hervor ...   ;) ;D

Bitte den Thread in DEINEM ERSTEN Beitrag auf gelöst setzen - dann ist's auch in der Übersicht erkennbar - DANKE
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: elvodia am Dezember 27, 2011, 09:39:28
Ich habe quasi das gleiche Problem bei dieser Abfrage.

UPDATE tbl_rezepte SET tbl_rezepte.RZ_Behandlungen_ist = [tbl_rezepte]![RZ_Behandlungen_ist]+1
WHERE (((tbl_rezepte.RZ_ID)= [Formulare]![FM_behandlung_eingabeform]![tf_RZ_ID]));


Wenn ich das formular offen habe und die abfrage aufrufe sagt er er möchte einen Datensatz Aktualisieren was er dann auch macht. Rufe ich die Abfrage über


Private Sub button_behandlung_bearbeiten_save_Click()

    If IsNull(Me.tf_patient) = True Then
        MsgBox ("Patient auswählen.")
    Else
        If IsNull(Me.tf_behandlungsart) = True Then
            MsgBox ("Behandlung auswählen.")
        Else
            If IsNull(Me.tf_RZ_ID) = True Then
                MsgBox ("Rezept auswählen.")
            Else
                CurrentDb.Execute "AKT_ABF_behandlung_plus_1"   <---Aufruf der Abfrage
                DoCmd.RunCommand acCmdSaveRecord
                DoCmd.Close acDefault
                DoCmd.Requery FM_behandlungen
                MsgBox ("Änderung gespeichert.")
               
            End If
        End If
    End If

End Sub

auf brignt er mir Laufzeit 3061 1 parameter wurder erwartet .....
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: DF6GL am Dezember 27, 2011, 11:37:29
Hallo,

Hast Du meine Erklärung nicht gelesen?


Alternativ benutz statt dem Abfragenamen den SQL-String und bau den Formularverweis (bzw. gleich den Variablenwert) mit VBA ein.


CurrentDb.Execute "UPDATE tbl_rezepte SET RZ_Behandlungen_ist = [RZ_Behandlungen_ist]+1 WHERE RZ_ID = " & Me![tf_RZ_ID]




Was bezweckst Du mit solchem Code (bzw. dem programmtechnischen Konzept )?


Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: elvodia am Dezember 27, 2011, 11:49:27
Gelesen habe ich dies. Jedoch frage ich mich warum kann ich dir Abfrage bei geöffnettem Form manuel starten und sie Funktioniert und wenn ich sie über VBA Aufrufe nicht?

Ich möchte damit einen Zähler auslösen. Wird eine Bahandlung hinzugefügt zähle den Aktuellen Wert von tbl_rezepte.BH_einheiten_ist +1

EDIT: Code hat funkioniert. Vielen Dank
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: DF6GL am Dezember 27, 2011, 12:01:50
Hallo,

Naja, auch hier die Frage: Warum brauchst Du einen Zähler?

Wie auch immer, wenn es so geht, ist es ja ok.


Zum Formularverweis:

Die Umsetzung einer SQL (Abfrage) in die eigentliche Ausführung in der Jet-Engine (DB-System von Access) durchläuft einige Prüfungen/Optimierungen und weitere Massnahmen zur fehlerfreien Ausführung.   Dabei werden  auch die Formular-Feld-Referenzen aufgelöst, sobald die Abfrage von Access selber gestartet wird.   Hier greift die richtige (englische) Schreibweise von FORMS als Referenz auf das Formular-Objekt.

Wird die Abfrage über eine andere Zugriffsmethode (hier:  DAO.Execute)  angestoßen, kann es sein, dass solche Formularverweise nicht bearbeitet werden und somit ein Fehler entsteht.


Wenn tatsächlich "Forms" in der SQL-Ansicht der Abfrage steht und Currentdb.Execute nicht funktioniert (sofern das Form geöffnet ist)  , dann kannst Du anstelle
Docmd.RunSQL
mal probieren. Diese Methode weist im Gegensatz zu Execute  Access an, die Abfrage auszuführen, wobei oben erklärter Ablauf angestoßen wird.


Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: elvodia am Dezember 27, 2011, 12:32:12
Ist das mit dem Zähler so unverständlich?

Es gibt eien Tabelle mit rezepten. Das rezept enhält 20 einheiten. Bei jeder behandlung soll eine dazugezählt werden. und wenn ist = soll ist das rezept voll.

Oder meinst du ich sollte die anzahl der einträge ober eine abfrage auszählen udn vergleichen?
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: DF6GL am Dezember 27, 2011, 12:44:45
Hallo,

solche "Zähler" (eher eigentlich Laufende Nummer) sind in diesem Zusammenhang ja berechnete Werte und sollten  nicht in der DB (Tabelle) gespeichert werden.
Wenn der Tabellenaufbau stimmt, kann jederzeit die akt. Anzahl von Datensätzen (hier Behandlungen zu einem Rezept) per Abfrage (bzw. Domänenfunktion) ermittelt werden. (entspr. Deinem letzten Satz)
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: elvodia am Dezember 27, 2011, 13:26:03
Hast du eigendlich recht dann spar ich mir auch das ganze programieren wenn man eine bahndlung ändert sonnst hät ich ja bei rezept a einen wieder zu rechnen müssen und rezept B dann einen weg. Werd mal sehen ob ich das so verarbeiten kann wie ich mir das vorstelle.
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: DF6GL am Dezember 27, 2011, 13:47:37
Hallo,
stelle mal (in einem neuen Thread) den Tabellenaufbau hier rein und beschreibe unabhängig von den Tabellen und möglichst datailliert, was Du gerne mit der DB anstellen möchtest.
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: elvodia am Dezember 27, 2011, 21:13:06
Ich möchte Patienten Kranken Kassen Behandlungen Rezepte erstellen bearbeiten können. geht soweit.

Woran ich gerade Arbeite ist die Funktion das man nur Behandlungen erstellen kann wenn ein entsprechendes Rezept vorhanden ist. Geht auch soweit. ABER: wenn die Behandlungseinheiten erreicht sind soll man keine mehr eintragen können sondern muss entweder die Einheiten erhöhen oder ein neues Rezept eintragen.



[Anhang gelöscht durch Administrator]
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: elvodia am Dezember 27, 2011, 21:58:37
Habe es hinbekommen das nun nur Einträge erstellt werden können wenn die Behandlungen noch nicht ausgeschöpft sind.
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: DF6GL am Dezember 27, 2011, 22:13:33
Hallo,

gut, wenn es geht..

Trotzdem solltest Du nochmal die Datenbeziehungen überprüfen, ob die wirklich so abgebildet sind, wie sie in der Realität zusammenhängen.

(Speziell die Beziehung der Behandlungen zu den Rezepten..)
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: elvodia am Dezember 29, 2011, 11:07:26
In php mit Mysql gab es die Möglichkeit sich den SQL string mit werten anstatt der variablen anzeigen zulassen. So finde ich sieht man besser wo man einen fehler hat was Hoch und Gäsne betrifft. Gib es sowas bei access auch?
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: DF6GL am Dezember 29, 2011, 11:26:47
Hallo,


"Drucke" den SQL-String (bzw. den Inhalt einer entspr. Variablen) mit Debug.Print in das Direktfenster im VBA-Editor.
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: elvodia am Dezember 29, 2011, 12:15:34
Danke den befehl hatte ich sogar schon drin nur das Fenster nciht offen.

Allerdings weis ich cniht wie ich den fehler beheben soll.

If Var_hausbesuch = True Then
                            MsgBox "HB"
                            strSQL = "UPDATE tbl_behandlungen SET " _
                                    & "tbl_behandlungen.BH_Patienten_ID = '" & [Forms]![FM_behandlung_eingabeform]![tf_patient] & "', " _
                                    & "tbl_behandlungen.BH_Leistungs_ID = '" & [Forms]![FM_behandlung_eingabeform]![tf_behandlungsart] & "', " _
                                    & "tbl_behandlungen.BH_Datum = '" & [Forms]![FM_behandlung_eingabeform]![tf_behandlungsdatum] & "', " _
                                    & "tbl_behandlungen.BH_RZ_ID = '" & [Forms]![FM_behandlung_eingabeform]![tf_RZ_ID] & "', " _
                                    & "tbl_behandlungen.BH_HB = ' & Var_hausbesuch & ', " _
                                    & "tbl_behandlungen.BH_HB_Leistungs_ID = '" & Var_hausbesuchsnummer & "' WHERE " _
                                    & "tbl_behandlungen.BH_ID = " & [Forms]![FM_behandlung_eingabeform]![TF_BH_ID] & ""
                                   
                            Debug.Print strSQL
                           
                            CurrentDb.Execute strSQL
                        Else



Resultat

UPDATE tbl_behandlungen SET tbl_behandlungen.BH_Patienten_ID = '13', tbl_behandlungen.BH_Leistungs_ID = '28', tbl_behandlungen.BH_Datum = '29.12.2011', tbl_behandlungen.BH_RZ_ID = '6', tbl_behandlungen.BH_HB = 'Wahr', tbl_behandlungen.BH_HB_Leistungs_ID = '37' WHERE tbl_behandlungen.BH_ID = 333

Habe versucht es alleine hinzubekommen durch setzen von Hochkommas Gänse aber es will einfach nicht. Er setzt mir das ja/nein feld immer aus Falsch
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: daolix am Dezember 29, 2011, 12:30:48
bin mir nicht sicher aber müsste Wahr nicht True lauten?
Auch sind die Hochkommata überflüssig wenn du Zahlenwerte übergibst wenn das Feld eine integer/float-Class ist
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: elvodia am Dezember 29, 2011, 12:57:59
Der wert wird aus einer Variable bezogen die ich aus einem Ja7Nein feld auslese. Sollte stimmen.
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: daolix am Dezember 29, 2011, 13:31:33
Zitat von: elvodia am Dezember 29, 2011, 12:57:59
Der wert wird aus einer Variable bezogen die ich aus einem Ja7Nein feld auslese. Sollte stimmen.
Nun das Problem ist das VBA in diesem Fall alles eindeutscht, was aber für den sql-string nicht richtig sein muss ( siehe z.B Übergabe einer Date - Variablen) richtiger ist True ohne Hochkommata.
& "tbl_behandlungen.BH_HB = True, " _

Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: elvodia am Dezember 29, 2011, 14:12:39
Also das mit dem True schein jetzt zu funktionieren. Er änder auch die Daten aber das Ja/nein Feld ändert er nciht alles andere ja.

ich poste mal die Sub.Nicht erschrecken ist massig viel veilleicht kann man es Verkleinern aber dazu sind meine Kenntnisse zu gering.

Private Sub button_behandlung_bearbeiten_save_Click()

    If Var_modus = "neu" Then   'Wenn neu Modus
   
        If IsNull(Me.tf_patient) = True Then
            MsgBox ("Patient auswählen.")
        Else
            If IsNull(Me.tf_behandlungsart) = True Then
                MsgBox ("Behandlung auswählen.")
            Else
                If IsNull(Me.tf_RZ_ID) = True Then
                    MsgBox ("Rezept auswählen.")
                Else
                    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
                    Var_hausbesuch = Nz(DLookup("[RZ_HB]", "[tbl_rezepte]", "[RZ_ID] = " & Me.tf_RZ_ID), False)
               
                        If Var_hausbesuch = True Then
                            strSQL = "INSERT INTO tbl_behandlungen (BH_Patienten_ID,BH_Leistungs_ID,BH_Datum,BH_RZ_ID,BH_HB,BH_HB_Leistungs_ID) VALUES ('" & Me.tf_patient & "','" & Me.tf_behandlungsart & "','" & Me.tf_behandlungsdatum & "','" & Me.tf_RZ_ID & "', -1,'" & Var_hausbesuchsnummer & "')"
                            Debug.Print strSQL
                            CurrentDb.Execute strSQL
                        Else
                            strSQL = "INSERT INTO tbl_behandlungen (BH_Patienten_ID,BH_Leistungs_ID,BH_Datum,BH_RZ_ID) VALUES ('" & Me.tf_patient & "','" & Me.tf_behandlungsart & "','" & Me.tf_behandlungsdatum & "','" & Me.tf_RZ_ID & "')"
                            Debug.Print strSQL
                            CurrentDb.Execute strSQL
                   
                        End If
               
                    Me.Undo
                    DoCmd.Close acDefault
                    DoCmd.Requery
                    MsgBox ("Gespeichert.")
               
                End If
            End If
        End If
    Else                                                'Wenn bearbeiten modus
   
            If IsNull(Me.tf_patient) = True Then
            MsgBox ("Patient auswählen.")
        Else
            If IsNull(Me.tf_behandlungsart) = True Then
                MsgBox ("Behandlung auswählen.")
            Else
                If IsNull(Me.tf_RZ_ID) = True Then
                    MsgBox ("Rezept auswählen.")
                Else
                    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
                    Var_hausbesuch = Nz(DLookup("[RZ_HB]", "[tbl_rezepte]", "[RZ_ID] = " & Me.tf_RZ_ID), False)
               
                        If Var_hausbesuch = True Then
                            MsgBox "HB"
                            strSQL = "UPDATE tbl_behandlungen SET " _
                                    & "tbl_behandlungen.BH_Patienten_ID = '" & [Forms]![FM_behandlung_eingabeform]![tf_patient] & "', " _
                                    & "tbl_behandlungen.BH_Leistungs_ID = '" & [Forms]![FM_behandlung_eingabeform]![tf_behandlungsart] & "', " _
                                    & "tbl_behandlungen.BH_Datum = '" & [Forms]![FM_behandlung_eingabeform]![tf_behandlungsdatum] & "', " _
                                    & "tbl_behandlungen.BH_RZ_ID = '" & [Forms]![FM_behandlung_eingabeform]![tf_RZ_ID] & "', " _
                                    & "tbl_behandlungen.BH_HB = True, " _
                                    & "tbl_behandlungen.BH_HB_Leistungs_ID = '" & Var_hausbesuchsnummer & "' WHERE " _
                                    & "tbl_behandlungen.BH_ID = " & [Forms]![FM_behandlung_eingabeform]![TF_BH_ID] & ""
                                   
                            Debug.Print strSQL
                           
                            CurrentDb.Execute strSQL
                        Else
                            MsgBox "kein HB"
                            strSQL = "UPDATE tbl_behandlungen SET " _
                                    & "tbl_behandlungen.BH_Patienten_ID = '" & [Forms]![FM_behandlung_eingabeform]![tf_patient] & "', " _
                                    & "tbl_behandlungen.BH_Leistungs_ID = '" & [Forms]![FM_behandlung_eingabeform]![tf_behandlungsart] & "', " _
                                    & "tbl_behandlungen.BH_Datum = '" & [Forms]![FM_behandlung_eingabeform]![tf_behandlungsdatum] & "', " _
                                    & "tbl_behandlungen.BH_RZ_ID = '" & [Forms]![FM_behandlung_eingabeform]![tf_RZ_ID] & "', " _
                                    & "tbl_behandlungen.BH_HB = False, " _
                                    & "tbl_behandlungen.BH_HB_Leistungs_ID = 0 WHERE " _
                                    & "tbl_behandlungen.BH_ID = " & [Forms]![FM_behandlung_eingabeform]![TF_BH_ID] & ""
                            Debug.Print strSQL
                            CurrentDb.Execute strSQL
                   
                        End If
               
                   
                    DoCmd.Close acDefault
                    DoCmd.Requery
                    MsgBox ("Gespeichert.")
               
                End If
            End If
        End If
    End If
End Sub

Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: database am Dezember 29, 2011, 14:36:26
Hallo,

du verwendest doch immer keine Variablendeklaration!

Versuch mal:

Dim Var_hausbesuch as boolean
Var_hausbesuch = Nz(DLookup("[RZ_HB]", "[tbl_rezepte]", "[RZ_ID] = " & Me.tf_RZ_ID), False)

Die Hochkommata bei Zahlenwerten solltest du ebenfalls weglassen und das Datum VBA-konform formatieren
siehe:
http://www.donkarl.com?FAQ6.8
(http://www.donkarl.com?FAQ6.8)

HTH
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: elvodia am Dezember 29, 2011, 19:09:06
Zitatdu verwendest doch immer keine Variablendeklaration!

Doch aber die sind in Kopf die habe ich nur net gepostet.

UPDATE tbl_behandlungen SET tbl_behandlungen.BH_Patienten_ID = 13, tbl_behandlungen.BH_Leistungs_ID = 28, tbl_behandlungen.BH_Datum = #2011-12-29#, tbl_behandlungen.BH_RZ_ID = 6, tbl_behandlungen.BH_HB = True, tbl_behandlungen.BH_HB_Leistungs_ID = 37 WHERE tbl_behandlungen.BH_ID = 337
UPDATE tbl_behandlungen SET tbl_behandlungen.BH_Patienten_ID = 13, tbl_behandlungen.BH_Leistungs_ID = 21, tbl_behandlungen.BH_Datum = #2011-12-29#, tbl_behandlungen.BH_RZ_ID = 1, tbl_behandlungen.BH_HB = False, tbl_behandlungen.BH_HB_Leistungs_ID = 0 WHERE tbl_behandlungen.BH_ID = 337


Das sieht für meine Verhältnisse nach einem Sauberen SQL aus jedoch ändert er das Ja nein Feld einfach nicht obwohl der Update Befehl kommt.
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: DF6GL am Dezember 29, 2011, 19:31:01
Hallo,



schreib mal (nur für  Testzweck)


Docmd.RunSQL strSQL

anstatt

CurrentDb.Execute strSQL, dbFailOnError    ' füg dbFailOnError  bei Execute noch hinzu.




Hast Du "Option Explicit" im Kopf dieses Formular-Modules?
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: elvodia am Dezember 29, 2011, 22:50:03
ZitatHast Du "Option Explicit" im Kopf dieses Formular-Modules?

Steht in jedem Kopf.

Habe gerade heraus gefunden das doch alles so funktioniert. Manchmal gewinnt man eben nur durch rumspielen.

Ich habe noch ein me.undo vor DoCmd.Close acDefault eingebaut. Er brachte nämlich immer das Fenster was im Anhang ist.

Ich möchte  hier "tbl_behandlungen.BH_HB_Leistungs_ID = 0" nicht 0 sonder nix also das feld soll leer sein reinschreiben. habe es mit tbl_behandlungen.BH_HB_Leistungs_ID = '""' versucht dann bringt er anhang bild 2

[Anhang gelöscht durch Administrator]
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: database am Dezember 29, 2011, 23:12:22
Hi,

was ist denn das Feld BH_HB IN DER TABELLE für ein Datentyp? Wenn das ein Ja/Nein Feld ist (was ich schwerstens hoffe) dann kannst du auch    -1   für JA  und 0  für NEIN übergeben.

tbl_behandlungen.BH_HB_Leistungs_ID = '""'    wird bei einem Felddatentyp Zahl wohl kaum funktionieren, du kannst so einem Feld nicht mitteilen, dass es keinen Text enthält!

tbl_behandlungen.BH_HB_Leistungs_ID = NULL   .... sollte da schon eher gehen

Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: elvodia am Dezember 30, 2011, 06:17:53
BH_HB ist ein Ja/nein feld. Das mit -1 und 0 weis ich jedoch True und False geht ja jetzt.

Das mit der NULL hab wunderbar funktioniert. Danke sehr.

Der fehler lag einfach darin das ich den Datensatz per SQL update und dann ein DoCmd.Close ausführe um das Form zu schließen und wieder in der Übersicht lande. Dabei will er natürlich die änderung nochmals speichern und meckert rum weil die daten schun ein Update erhalten haben. ich habe dann im Form einfach vorm Close ein Me.undo eingebaut und somit werden die Daten nur vom SQL geändert. Werde dies aber ncoh umbauen habe gestern überlegt wie ich das Übers Form machen könnte und werde dies mal ausprobieren. Dazu werde ich versuchen 2 Textfelder einzubauen muss mich nur mal mit visible auseinander setzen weil ich die felder nur sehen will wenn das Rezept ein HB rezept ist.
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: elvodia am Dezember 30, 2011, 06:43:03
Aus dem Ewig langen SQL Strings die ich oben gepostet habe wurde mal eben das:

Private Sub button_behandlung_bearbeiten_save_Click()
    If IsNull(Me.tf_patient) = True Then
            MsgBox ("Patient auswählen.")
        Else
            If IsNull(Me.tf_behandlungsart) = True Then
                MsgBox ("Behandlung auswählen.")
            Else
                If IsNull(Me.tf_RZ_ID) = True Then
                    MsgBox ("Rezept auswählen.")
                Else
                    DoCmd.RunCommand acCmdSaveRecord
                    DoCmd.Close acDefault
                    DoCmd.Requery
                End If
            End If
        End If
End Sub


Ich habe einfach das Eingabeform um 2 Felder erweitert. Nun habe ich auch nciht mehr das problen das ich herrausfinden muss ob ich neu oder bearbeiten mache. Ja Lerning by doing ist doch immer noch das beste.
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: elvodia am Januar 04, 2012, 20:46:31
Mal wieder ein 3061 Ich finde den Fehler einfach nicht wird mal wieder nur was kleines sein.

strSQL = "UPDATE tbl_behandlungen SET tbl_behandlungen.BH_HB = False, tbl_behandlungen.BH_HB_Leistungs_ID = NULL " _
                & "WHERE (tbl_behandlungen.BH_RZ_ID) = " & Me.tf_RZ_ID
        Debug.Print strSQL
        CurrentDb.Execute strSQL


UPDATE tbl_behandlungen SET tbl_behandlungen.BH_HB = False, tbl_behandlungen.BH_HB_Leistungs_ID = NULL WHERE (tbl_behandlungen.BH_RZ_ID) = 57

strSQL = "UPDATE tbl_behandlungen SET tbl_behandlungen.BH_HB = False, tbl_behandlungen.BH_HB_Leistungs_ID = NULL " _
                & "WHERE (tbl_behandlungen.BH_RZ_ID) = '" & Me.tf_RZ_ID &"'"
        Debug.Print strSQL
        CurrentDb.Execute strSQL


UPDATE tbl_behandlungen SET tbl_behandlungen.BH_HB = False, tbl_behandlungen.BH_HB_Leistungs_ID = NULL WHERE (tbl_behandlungen.BH_RZ_ID) = '57'

Er bekommt wieder 1 Parameter zu wenig.
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: database am Januar 06, 2012, 10:16:19
Hallo,

wenn du eine neue Frage an einen gelösten Thread hängst wirst du nur ganz selten eine Antwort bekommen!
Also künftig bitte unbedingt für neue Fragen auch einen Neuen Beitrag erstellen.


strSQL = "UPDATE tbl_behandlungen SET tbl_behandlungen.BH_HB = False, tbl_behandlungen.BH_HB_Leistungs_ID = NULL " _
               & "WHERE (tbl_behandlungen.BH_RZ_ID) = " & Me.tf_RZ_ID
       Debug.Print strSQL
       CurrentDb.Execute strSQL



Was passiert denn in dem Fall ?


strSQL = "UPDATE tbl_behandlungen SET tbl_behandlungen.BH_HB = False, tbl_behandlungen.BH_HB_Leistungs_ID = NULL " & _
               "WHERE (tbl_behandlungen.BH_RZ_ID) = " & Me.tf_RZ_ID
       Debug.Print strSQL
       CurrentDb.Execute strSQL


HTH
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: DF6GL am Januar 06, 2012, 10:33:46
Hallo,


ZitatEr bekommt wieder 1 Parameter zu wenig.

anhand der Fehlermeldung kann es ja eigentlich nur sein, dass eines der angegebenen Tabellenfelder nicht existiert...
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: elvodia am Januar 06, 2012, 12:10:29
Jap genau so wars. Allerdings habe ich gebraucht bis ich es bereits gestern abend gefunden habe. Ich hätte allerdings von Access erwartet das er mir das sagt wenn das Feld in der tabelle nciht existiert.
Titel: Re: Abfrage funktioniert aber als SQL-Anweisung Fehler 3061
Beitrag von: DF6GL am Januar 06, 2012, 18:07:48
Eigentlich tut es das ja, halt auf seine Ausdrucksweise...