Tabelle im formular abfragen und berechnen

Hallo

Ich habe folgendes problem ich habe eine tabelle die ich nicht ändern darf (wegen den vielen leerzeichen) mit folgenden relevanten feldern.

Tabelle „Lieferfeuchten Schlagmann“
Felder: „LS Nr“ , „Vol“ , „Gew“

Im Formular „Dateneningabe 0/3 hydrophobiert“ habe ich folgende felder „LS_Nr“ mit der eingegebenen Lieferscheinnummer und „lkw_sd_text“ welches mit dem Rechenergebnis von „Vol“ und „Gew“ gefüllt werden soll wenn die Lieferscheinnummer vorhanden ist.
„Auswertung_Superlite_0/3_hyd“ ist die eigentliche Datenquelle des Formulars

Meine bisherigen vergeblichen versuche ergaben folgendes:

Me.RecordSource = ("SELECT LS Nr, Vol, Gew FROM Lieferfeuchten Schlagmann WHERE (LS Nr)=[forms]![Dateneningabe 0/3 hydrophobiert].[LS\_Nr];")  
  
Me.lkw\_sd\_text.Text = Me.RecordSource  
Me.RecordSource = "Auswertung\_Superlite\_0/3\_hyd"  

Hallo

Ich habe folgendes problem ich habe eine tabelle die ich nicht
ändern darf (wegen den vielen leerzeichen) mit folgenden

was willst du denn ändern? leerzeichen stören normalerweise nicht

relevanten feldern.

Tabelle „Lieferfeuchten Schlagmann“
Felder: „LS Nr“ , „Vol“ , „Gew“

Im Formular „Dateneningabe 0/3 hydrophobiert“ habe ich
folgende felder „LS_Nr“ mit der eingegebenen
Lieferscheinnummer und „lkw_sd_text“ welches mit dem
Rechenergebnis von „Vol“ und „Gew“ gefüllt werden soll wenn
die Lieferscheinnummer vorhanden ist.
„Auswertung_Superlite_0/3_hyd“ ist die eigentliche Datenquelle
des Formulars

Meine bisherigen vergeblichen versuche ergaben folgendes:

[code]
Me.RecordSource = („SELECT LS Nr, Vol, Gew FROM Lieferfeuchten
Schlagmann WHERE (LS Nr)=[forms]![Dateneningabe 0/3
hydrophobiert].[LS_Nr];“)

Ist ok, kannst du aber auch gleich im Entwurfsmodus fix einstellen, nicht erst zur Laufzeit. Das Ganze muss in der Ereignisprozedur OnOpen (Bzw. BeimÖffnen) stehen

Me.lkw_sd_text.Text = Me.RecordSource

Das ist falsch. Damit wird obiger SQL im Textfeld angezeigt, was du ja nicht willst, nehme ich an. Ausserdem sollte es so heißen: Me!lkw_sd_text = Me.Recordsource

Me.RecordSource = „Auswertung_Superlite_0/3_hyd“

Wieso willst du die Datenherkunft jetzt ändern? was steht in „Auswertung_Superlite_0/3_hyd“?

[/code]

Du musst weitere 2 Textfelder im Formular hinzufügen, und diese Felder an die beiden Tabellenfelder Vol bzw. Gew binden.
Im LS-Nr. Feld musst du eine Ereignisprozedur ‚AfterUpdate‘ bzw. das deutsche Äquivalent davon (Weiss ich jetzt nicht auswendig) erstellen, wo du aus Vol und Gew dein berechnetes Ergebnis ermittelst. (Gehe in das Eigenschaften-Fenster von dem Textfeld und wähle dann bei AfterUpdate ‚[Ereignisprozedur]‘ aus und klicke dann auf die 3 Punkte daneben.

Das Ergebnis schreibst du dann in lkw_sd_text mit:

me!lkw_sd_text = [Hier die Formel schreiben]

Das SQL ist absoluter Unsinn! Bitte die Tabellenstruktur Posten.
Frank

http://home.arcor.de/jedoschmidt/access.rar

Das SQL ist absoluter Unsinn! Bitte die Tabellenstruktur
Posten.
Frank

Hallo jedoschmidt

Da kann ich dir leider nicht helfen.

Gruss Stürgen

Sorry, kann Dir aus zeitlichen Gründen nicht helfen.
Trotzdem viel Erfolg.

Hallo,

wenn du im Feld „lkw_sd_text“ nur das Rechenergebnis anzeigen willst, so reicht es, wenn du die Eigenschaft „Steuerelementinhalt“ von diesem Feld entsprechend füllst (z.B.: =[Vol]/[Gew]).

Viele Grüße

Jochen

Tabelle „Lieferfeuchten Schlagmann“
Felder: „LS Nr“ , „Vol“ , „Gew“

Im Formular „Dateneningabe 0/3 hydrophobiert“ habe ich
folgende felder „LS_Nr“ mit der eingegebenen
Lieferscheinnummer und „lkw_sd_text“ welches mit dem
Rechenergebnis von „Vol“ und „Gew“ gefüllt werden soll wenn
die Lieferscheinnummer vorhanden ist.
„Auswertung_Superlite_0/3_hyd“ ist die eigentliche Datenquelle
des Formulars

Meine bisherigen vergeblichen versuche ergaben folgendes:

Me.RecordSource = ("SELECT LS Nr, Vol, Gew FROM Lieferfeuchten  
> Schlagmann WHERE (LS Nr)=[forms]![Dateneningabe 0/3  
> hydrophobiert].[LS\_Nr];")  
>   
> Me.lkw\_sd\_text.Text = Me.RecordSource  
> Me.RecordSource = "Auswertung\_Superlite\_0/3\_hyd"  

Hallo

So klappt dies ja auch nicht. Schon das SQL-Statement ist so nicht korrekt, denn z.B. Feldnamen mit Leerzeichen müssen in rechteckige Klammern gesetzt werden, also z.B. so:
SELECT [LS Nr], Vol, Gew FROM [Lieferfeuchten
Schlagmann] WHERE [LS Nr] =[forms]![Dateneningabe 0/3
hydrophobiert].[LS_Nr];

Um das Ergebnis dieser SQL-Abfrage auswerten zu können, kann man das mittels DAO machen:

Zunächst muss ein Verweis auf die Microsoft DAO Libraty gesetzt werden. Dazu im Codeeingabefenster auf den Menüpunkt Extras klicken und hier Verweise auswählen. Dann den entsprechen Microsoft DAO - Eintrag suchen und aktivieren.

Danach könnte der folgenden Code verwendet werden:

Dim rs As Dao.Recordset
Dim SQL As String
Dim zVol As Integer
Dim zGew As Integer
SQL = „SELECT [LS Nr], Vol, Gew FROM [Lieferfeuchten
Schlagmann] WHERE [LS Nr] =[forms]![Dateneningabe 0/3
hydrophobiert].[LS_Nr];“
Set rs = CurrentDB.OpenRecordSet(SQL)
sVol = rs(„Vol“)
sGew = rs(„Gew“)

In den Variablen sVol steht jetzt das Ergebnis des SQL-Statements für Vol und in sGew das für Gew (Vorausgesetzt Vol und/oder Gew sind Integerwerte
ansonsten sVol und/oder sGew als String festlegen.)

In das Textfeld Me.lkw_sd_text kann jetzt das
Rechenergebnis aus sVol und sGew eingelesen werden.

Gruß Wolfgang

Hallo jedoschmitt
Vorerst mal: alle Felder und Tabellen mit Leerzeichen müssen in [eckige Klammern] eingefasst werden damit sie in SQL erkannt werden.
Dann: der Befehl „RecordSource“ verändert nur die Datenbasis des Formulars, und das ist sicher nicht der erwünschte Effekt (die Formular Felder würden ja nicht mehr übereinstimmen).
Das einfachsteWeg um zum erwünschten Resultat zu kommen ist m.E. die Datenbasis des Formulars zu erweitern indem die Tabelle [Lieferfeuchten Schlagmann] darin aufgenommen wird (1:n Verbindung von [Auswertung_Superlite_0/3_hy].[LS_Nr] zu [Lieferfeuchten Schlagmann].[LS Nr]). Die Felder Vol und Gew in das Formular aufnehmen, dann könnte über einen Command Button mit
If not isnull(me!vol) and not isnull(me!gew) then
me!lkw_sd_text = me!vol * me!gew ‘(als Beispiel der Formel)
end if

der entsprechende Wert direkt zugeteilt werden (falls kein Record in „Lieferfeuchten Schlagmann“ da ist, sind die entsprechenden Felder einfach blank, oder falls die beiden Tabellen 1:1 verbunden werden, sind nur die Records ersichtlich, die auf beiden Seiten vorhanden sind)
(Ich nehme mal an, dass LS_Nr und LS Nr je nur einmal vorkommen, sonst müsste eine andere Lösung gesucht werden)
Freundliche Grüsse
Fonti46

Hallo

er schreibt in der zeile

Set rs = CurrentDB.OpenRecordSet(SQL)

Laufzeitfehler ‚3061‘
1 Parameter wurde erwartet, aber es wurden zu wenige Parameter übergeben

obwohl die parameter wol optional sind

auch wenn ich da eintrage:

Set rs = CurrentDb.OpenRecordSet(SQL, dbOpenDynaset, dbReadOnly, dbReadOnly)

kommt komischer weise der selbe fehler

Hallo
Diese Fehlermeldung kommt normalerweise, wenn ein Datensatz nicht zugeordnet werden kann (ist die Tabelle
[Lieferfeuchten Schlagmann]
überhaupt in der aktuellen Access-DB vorhanden oder richtig geschrieben?) und/oder ist im SQL-Statement irgendein Datentyp nicht korrekt (z.B. ist in DB ein Textfeld, wird im SQL-Statement aber als Zahl angesprochen).

Am warscheinlichsten ist es aber, das der Eintrag [forms]![Dateneningabe 0/3 hydrophobiert].[LS_Nr]
im SQL-Statement falsch eingetragen ist, denn im SQL-Statement wird an dieser Stelle ein Integerwert
(Zahl) erwartet. Gibt das Control LS_Nr einen Stringwert zurück, so kann mittels CINT( … ) gewandelt werden.

Dim rs As Dao.Recordset
Dim SQL As String
Dim zVol As Integer
Dim zGew As Integer
Dim LS As Integer
'ohne CINT( … )
'----------------
LS = [forms]![Dateneningabe 0/3 hydrophobiert].[LS_Nr].Value

'Mit CINT( … )
'---------------
'LS = CINT([forms]![Dateneningabe 0/3 hydrophobiert].[LS_Nr].Value)

SQL = „SELECT [LS Nr], Vol, Gew FROM [Lieferfeuchten
Schlagmann] WHERE [LS Nr] =“ & LS
Set rs = CurrentDB.OpenRecordSet(SQL)
sVol = rs(„Vol“)
sGew = rs(„Gew“)

Ich würde im Debugmodus kontrollieren, ob dieser SQL-String überhaupt korrekt zusammengesetzt ist
d.h. wird z.B. in der WHERE-Klausel überhaupt ein Wert richtig übergeben?
Es kann auch versucht werden, mit Hilfe des SQL-Fensters der Access-Abfrage auf Richtigkeit zu kontrollieren (Hier aber dann mit richtigen Zahlen
arbeiten also z.B.
SELECT [LS Nr], Vol, Gew FROM [Lieferfeuchten
Schlagmann] WHERE [LS Nr] = 1111
Wenn der String richtig ist, müsste dann eine entsprechende Rückgabe erfolgen und das Statement ist korrekt anderenfalls Fehler gefunden.

Ich habe Dies ausprobiert (wenn auch mit anderen Tabellen und Feldern) und es hat wie erwartet astrein funktioniert.

Gruß Wolfgang

1 Like

Hallo,

das muss ich passen

Frank Seiler

Hallo,
sollen die Daten aus der eigentlichen Datenquelle weiter im Formular vorhanden bleiben?
Wenn ja, probie es mal mit dem Befehl DLookup um die gewünschten Daten zu ziehen.
Beispiel:
svVol = dlookup("[Vol]",„Lieferfeuchten Schlagmann“,"[LS Nr]="&Forms(„Dateneningabe 0/3 hydrophobiert“).[LS_Nr])
if isnull(svVol) then
msgbox „Keine Vol. Daten vorhanden“,vbOk
exit sub
end if
Das ganze für Gew wieder holen und dann die Rechnung fürs Ausgabefeld vornehmen und dann anzeigen.
Gruß

danke für die hilfe ich will dir natürlich nicht vorenthalten wie ichs nun im endefekt gemacht hab.

Me.lkw_sd_text.Value = „“
If IsNull(Me.LS_Nr.Value) = False Then
Dim rs As DAO.Recordset

Set rs = CurrentDb.OpenRecordSet("SELECT * FROM [Lieferfeuchten Schlagmann] WHERE [LS Nr] = " & Me.LS_Nr.Value & „;“)

If rs.RecordCount = 1 Then Me.lkw_sd_text.Value = rs(„Gew“) / rs(„Vol“)
Set rs = Nothing
End If

Hallo,

sorry, war im Urlaub. Hab gesehen, dass die Anfrage bereits beantwortet ist.

schönen Gruß
Stefan Klinger

Hallo

leider kann ich Dir im Augenblick mangels Zeit nicht helfen. Solltest Du das Problem Mitte Sept.12 noch haben, schreib mich nochmal an.

Sorry

Gruß
LukBaumann

zur zeıt befınde ıchm mıch ım urlaub und kann aud dıe frage nıcht qualıfızıert antworten