Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Abfrage funktioniert aber als SQL-Anweisung Fehler 3061

Begonnen von AvalonStealth, Juli 21, 2011, 12:20:56

⏪ vorheriges - nächstes ⏩

AvalonStealth

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 ...  ???
Powered by AvalonStealth

database

#1
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

AvalonStealth

#2
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
Powered by AvalonStealth

DF6GL

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).

database

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

elvodia

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 .....

DF6GL

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 )?



elvodia

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

DF6GL

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.



elvodia

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?

DF6GL

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)

elvodia

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.

DF6GL

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.

elvodia

#13
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]

elvodia

Habe es hinbekommen das nun nur Einträge erstellt werden können wenn die Behandlungen noch nicht ausgeschöpft sind.