MS-Office-Forum
Google
   

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > Microsoft Access
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads Der Renner, 11 Entwicklertools für Access, Tipps & Trick und offene Datenbanken zum einzigartigen Preis.
Themen-Optionen Ansicht
Alt 08.09.2017, 14:29   #1
Haxnwirt
MOF User
MOF User
Standard Acc2013 - Immer noch Probleme mit SQL Anweisungen

Hallo beisammen,

ich probier grad verschiedene Strings aus, nach dem er die Edit Anweisung nicht geschluckt hat.

Code:

Dim AnzahlTag As Date
Dim InSQLIn As String
Dim Woche As Double
Dim dateFertFull As Double

Set db = CurrentDb
Set rsPlanday = db.OpenRecordset("Planung", dbOpenDynaset)

z = 0
Cm = 0

Woche = (Nz(Forms!Frontendoberfläche!cbfAuswahlWochePP, 0))

MontagDerWoche = CDate(DateSerial(2017, 1, 4) + Woche * 7 - 7 - (DateSerial(2017, 1, 2) Mod 7))

EndeData = Nz(DMax("[Menge]", "Planung", "[Plan_FertTag] Is Null"))

Do Until rsPlanday.EOF

dateFertFull = Nz(DLookup("[BearbeitungsSch]", "Planung", "Menge = " & EndeData), 0) 'And "KalenderW = " & Woche
AnzahlTag = Format(DateAdd("d", Cm, MontagDerWoche), "yyyy-mm-dd")
k = z + m
If k < 1800 Then
    ZahlMax = DMax("[Menge]", "Planung", "[Plan_FertTag] Is Null")
    Debug.Print z, ZahlMax
    Debug.Print AnzahlTag
    
    strSQLIn = "UPDATE Fertigung SET Plan_FertTag =  '" & AnzahlTag & "' WHERE BearbeitungsSch = " & dateFertFull & " AND KalenderW = " & Woche & ";" 'Füge das aktuelle Datum und die aktuelle Uhrzeit in das Feld Fert_Saw_Start ein
    'strSQLIn = "UPDATE Fertigung SET Plan_FertTag =  " & AnzahlTag & " WHERE BearbeitungsSch = " & dateFertFull & " AND KalenderW = " & Woche & ";" 
    'strSQLIn = "UPDATE Fertigung SET Plan_FertTag =  AnzahlTag WHERE BearbeitungsSch = " & dateFertFull & " AND KalenderW = " & Woche & ";" 
    'strSQLIn = "UPDATE Fertigung SET Plan_FertTag =  " & AnzahlTag WHERE BearbeitungsSch = " & dateFertFull & " AND KalenderW = " & Woche & ";" 
   
    Debug.Print strSQLIn 'Zeige im Direktbereich
    CurrentDb.Execute strSQLIn, dbFailOnError
    
        'rsPlanday.Edit
        'Debug.Print rsPlanday.Fields("BearbeitungsSch")
        'rsPlanday.Fields("Plan_FertTag") = AnzahlTag ' Es wird kein Wert eingetragen
        'rsPlanday.Update
    z = z + ZahlMax
End If
rsPlanday.MoveNext
Loop
End Sub
Ich weiß nicht mehr weiter. Die SQL Anweisung strSQLIn wird immer bemängelt "Erwarte 3 Parameter..."

Bei dem unteren Versuch, der auskommentiert ist:

Code:

'rsPlanday.Edit
        'Debug.Print rsPlanday.Fields("BearbeitungsSch")
        'rsPlanday.Fields("Plan_FertTag") = AnzahlTag ' Es wird kein Wert eingetragen
        'rsPlanday.Update
wurde nie ein Wert eingetragen.


Ich weiß, sieht nicht gut aus. Wenn es das macht was es soll mache ich es schön.
Servus

Haxnwirt

Geändert von Haxnwirt (08.09.2017 um 14:32 Uhr).
Haxnwirt ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 08.09.2017, 14:58   #2
maikek
MOF Guru
MOF Guru
Standard

Moin,
du solltest im VBA Editor oben unter Compare Database auch "Option Explicit" angeben, das zwingt dich, die Variablen zu deklarieren und macht dich auf Fehler aufmerksam.

Was ist Cm? Wieso addierst du 0 Tage?
Was ist k und welchen Wert hat k?

Was ist AnzahlTag? Ist als Date deklariert, du formatierst es allerdings als String und so sollte es dann auch deklariert sein. Welchen Datentyp hat das Tabellenfeld Plan_FertTag?

Ist BearbeitungsSch in der Tabelle ein Feld vom Typ Zahl (Double)?

Hast du mal probiert, den von Debug.Print ausgegebenen SQL-String in den Abfrageentwurf in die SQL-Ansicht zu kopieren und auf die Entwurfsansicht umgeschaltet?

maike

__________________

Bitte dein Thema auf erledigt setzen, wenn's durch ist!
MOF Access Stammtisch in Bremen
maikek ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 08.09.2017, 15:18   #3
Beaker s.a.
MOF Koryphäe
MOF Koryphäe
Standard

Hallo,
Hast du dir denn das Ergebnis von
Code:

Debug.Print strSQLIn
auch mal angeschaut? Das ist nämlich der Sinn der Sache, dass man dort den String
so sieht (Variable aufgelöst), wie er an die JET übergeben wird.
Vielleicht hilft dir mein gerade fertiggestelltes AddIn, das du hier herunterladen kannst:
http://access-codelib.net/download/a...DebugPrint.zip
(Lies die ReadMe-Datei, da ist Installation und Verwendung erklärt)
Das zeigt dir zwar zunächst auch nur die gleiche Fehlermeldung an, aber gleichzeitig
auch den SQL-String wie mit Debug.Print, den du dann eben analysieren musst um
dem Fehler auf die Spur zu kommen. Ich vermute hier überflüssige ' und falsche
Datumsformatierung.
gruss ekkehard

__________________

--
S.M.I.²L.E.
Beaker s.a. ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 08.09.2017, 15:37   #4
Haxnwirt
Threadstarter Threadstarter
MOF User
MOF User
Standard

Servus,

Ja hab ich er gibt das gleiche Ergebnis aus. "Plan_FertTag" stimmt nicht.
Haxnwirt ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 08.09.2017, 15:39   #5
Haxnwirt
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo Beaker s. a.,

damit hast du vollständig recht. Falsche Datumskonvention. Was falsch ist weiß ich leider auch nicht.
Haxnwirt ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 08.09.2017, 15:45   #6
sonic8
MOF Profi
MOF Profi
Standard

Zitat: von Haxnwirt Beitrag anzeigen

Ich weiß nicht mehr weiter. Die SQL Anweisung strSQLIn wird immer bemängelt "Erwarte 3 Parameter..."

Vielleicht magst du dir bei Gelegenheit mal mein Video zum Aufbau von SQL-Strings anschauen.
sonic8 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 08.09.2017, 15:50   #7
Haxnwirt
Threadstarter Threadstarter
MOF User
MOF User
Standard

Zitat: von sonic8 Beitrag anzeigen

Vielleicht magst du dir bei Gelegenheit mal mein Video zum Aufbau von SQL-Strings anschauen.

Hallo sonic8, Danke für deine Unterstützung: elmar aus Cloppenburg hat mir mit seiner Hilfe schon sehr weitergeholfen.

Leonard
Haxnwirt ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 08.09.2017, 16:11   #8
Haxnwirt
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo maikek,

ich habe 2 verschiede Codes, der obere funktioniert, der untere nicht.

Code:

Set db = CurrentDb
Set rsA = db.OpenRecordset("Planung", dbOpenSnapshot)
Set rsM = db.OpenRecordset("Planung", dbOpenDynaset)

If GesamtzahlPN100 < 5000 Then

rsA.MoveFirst

Do Until rsA.EOF

    With rsM
    
        Do Until .EOF
            m = .Fields("Menge")
            Key = .Fields("BearbeitungsSch")
            AnzahlTag = Format(DateAdd("d", Cm, MontagDerWoche), "yyyy-mm-dd")
            k = z + m
            If k < 1000 Then
                If .Fields("Dekor") = "620" Or .Fields("Dekor") = 622 Or .Fields("Dekor") = 624 Or .Fields("Dekor") = 625 Or .Fields("Dekor") = 634 Or .Fields("Dekor") = 644 Or .Fields("Dekor") = 645 Or .Fields("Dekor") = 646 Or .Fields("Dekor") = 730 Or .Fields("Dekor") = 844 Or .Fields("Dekor") = 847 Or .Fields("Dekor") = 854 Then
                    Debug.Print z, m
                    Debug.Print Key
                    Debug.Print AnzahlTag
                    .Edit
                  .Fields("Maschine") = "HK1KAL1"
                  .Fields("Plan_FertTag") = AnzahlTag
                  .Update
                  z = z + m
                Else
                  
                End If
            ElseIf k > 700 Then 'sonst Ende und nächster Arbeitsplatz
            Exit Do
                End If
               .MoveNext
       Loop
    End With

rsA.MoveNext 'Nächster Arbeitsplatz
z = 0
Cm = Cm + 1
Loop

rsA.Close
rsM.Close
ElseIf GesamtzahlPN100 > 5000 Then

MsgBox ("Nicht mehr im Zwei-Schicht-System zu schaffen")
End If

Forms!Frontendoberfläche!ListProdPlanung.Requery
Forms!Frontendoberfläche!TextKAL1.Requery
Forms!Frontendoberfläche!Text140.Requery
End Sub
------------------------------------------------------

Do Until rsTag.EOF
AnzahlTag = Format(DateAdd("d", Cm, DateMontagDerWoche), "yyyy-mm-dd")

    Do Until rsPlanDay.EOF
            EndeData = Nz(DMax("[Menge]", "Planung", "[Plan_FertTag] Is Null"))
            dblBearbSch = Nz(DLookup("[BearbeitungsSch]", "Planung", "Menge = " & EndeData), 0) 'And "KalenderW = " & Woche
            
            k = z + m
            If k < 1800 Then
                ZahlMax = DMax("[Menge]", "Planung", "[Plan_FertTag] Is Null")
                Debug.Print z, ZahlMax
                Debug.Print AnzahlTag
                
                'strSQLIn = "UPDATE Fertigung SET Plan_FertTag =  '" & AnzahlTag & "' WHERE BearbeitungsSch = " & dateFertFull & " AND KalenderW = " & Woche & ";" 'Füge das aktuelle Datum und die aktuelle Uhrzeit in das Feld Fert_Saw_Start ein
                'strSQLIn = "UPDATE Fertigung SET Plan_FertTag =  " & AnzahlTag & " WHERE BearbeitungsSch = " & dateFertFull & " AND KalenderW = " & Woche & ";" 'Füge das aktuelle Datum und die aktuelle Uhrzeit in das Feld Fert_Saw_Start ein
                'strSQLIn = "UPDATE Fertigung SET Plan_FertTag =  AnzahlTag WHERE BearbeitungsSch = " & dateFertFull & " AND KalenderW = " & Woche & ";" 'Füge das aktuelle Datum und die aktuelle Uhrzeit in das Feld Fert_Saw_Start ein
                'strSQLIn = "UPDATE Fertigung SET Plan_FertTag =  " & AnzahlTag WHERE BearbeitungsSch = " & dateFertFull & " AND KalenderW = " & Woche & ";" 'Füge das aktuelle Datum und die aktuelle Uhrzeit in das Feld Fert_Saw_Start ein
               
                'Debug.Print strSQLIn 'Zeige im Direktbereich
                'CurrentDb.Execute strSQLIn, dbFailOnError
                
                rsPlanDay.Edit
                Debug.Print rsPlanDay.Fields("BearbeitungsSch")
                rsPlanDay.Fields("Plan_FertTag") = AnzahlTag ' Es wird kein Wert eingetragen
                rsPlanDay.Update
                z = z + ZahlMax
            End If
            rsPlanDay.MoveNext
    
    Loop
Cm = Cm + 1
Loop
End Sub
Darüber brüte ich gerade.

Schönes Wochenende

Pfia'eich

Haxnwirt
Haxnwirt ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 08.09.2017, 16:17   #9
maikek
MOF Guru
MOF Guru
Standard

Option Explicit hast du eingefügt und bist beim Debuggen entsprechend angemeckert worden ?
Beantwortest du dann bitte noch meine Fragen nach den Datentypen, dem Inhalt von Variablen etc., und zeigst das Ergebnis von Debug.Print?
maike

__________________

Bitte dein Thema auf erledigt setzen, wenn's durch ist!
MOF Access Stammtisch in Bremen
maikek ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 08.09.2017, 16:46   #10
ebs17
MOF Guru
MOF Guru
Standard

Zitat:

Darüber brüte ich gerade.

Sich den Sinn einer Maßnahme aus einem langwierigen Code, der zudem nicht vollständig funktioniert, zu erschließen ist eine Variante. Und typischerweise sollte man erst die Maßnahme verstehen, ehe man am Code schraubt.

Eine andere Variante wäre darzustellen, wie aus einem hinreichend beschriebenen Ausgangszustand ein Zielzustand zu erstellen ist. Dort würde man einen eigenen Lösungsweg wählen können, der nach Möglichkeit einfach, direkt und schnell ist. Zudem könnte es sein, dass Fehlerursachen im Ursprungscode gar nicht berührt werden und somit deren Fehler nicht auftreten.

Nach oberflächlicher Betrachtung wdes dargestellten würde ich auf die Schleifen verzichten wollen und dafür eins, zwei Abfragen einsetzen.

Sowie dann: Das Thema heißt "Immer noch Probleme mit SQL Anweisungen".
Was sollen da ellenlange VBA-Codes, die alles andere machen als SQL?
SQL ist einfach. Man vergegenwärtigt sich, wie eine korrekte SQL-Anweisung aussehen müsste, und damit vergleicht man dann sein eigenes Werk, das man per VBA zusammengesetzt hat und mit Debug.Print ins Direktfenster ausgegeben hat. Auf Abweichungen=Fehler kann man dann gezielt reagieren.
Referenzabfrage:
Code:

UPDATE 
   TabelleX 
SET 
   Zieltextfeld = "MeinInhalt" 
WHERE 
   Ganzzahlenfeld = 234 
      AND 
   Dezimalzahlenfeld = 4.567 
      AND 
   Textfeld = "OhneWorte" 
      AND 
   Datumsfeld = #2017-09-08# 
      AND 
   Booleanfeld = True
Bei den Kriterien wird verdeutlicht, dass Felder Datentypen haben und dass zugewiesene Werte passend formatiert, bezogen auf den jeweiligen Datentyp, sein müssen. Die Fehlermeldung "Parameter erwartet" resultiert in aller Regel auf falschen Feldbezeichnungen oder auf falsch formatierten zugewiesenen Werten.
Also sollte ,man im zweiten Fall sich darüber klar werden, welche Datentypen verwendete felder haben und was man wie zuweist.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}
Dein Dankeschön: DBWiki=>Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.09.2017, 07:40   #11
Haxnwirt
Threadstarter Threadstarter
MOF User
MOF User
Standard

Zitat: von maikek Beitrag anzeigen

Option Explicit hast du eingefügt und bist beim Debuggen entsprechend angemeckert worden ?
Beantwortest du dann bitte noch meine Fragen nach den Datentypen, dem Inhalt von Variablen etc., und zeigst das Ergebnis von Debug.Print?
maike

Option Explicit habe ich eingefügt.

Code:

dateAnzahlTag = Format(DateAdd("d", Cm, DateMontagDerWoche), "#yyyy-mm-dd#")
Code:

strSQLIn = "UPDATE Fertigung SET Plan_FertTag =  " & dateAnzahlTag & " WHERE BearbeitungsSch = " & dblBearbSch & " AND KalenderW = " & Woche & ";"
Meldung: 2 Parameter wurden erwartet, es wurden zu wenige Parameter übergeben.

Debug Print dateAnzahlTag Ergebnis #2017-05-15#

Code:

CurrentDb.Execute strSQLIn, dbFailOnError
Ausgabe Dirketbereich: UPDATE Fertigung SET Plan_FertTag = #2017-05-15# WHERE BearbeitungsSch = 20180191650372 AND KalenderW = 20;

SQL-Anweisung wird nicht ausgeführt
Haxnwirt ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.09.2017, 08:18   #12
markusxy
MOF Koryphäe
MOF Koryphäe
Standard

@Haxnwirt
Du wurdest schon mehrfach gefragt von welchem Datentyp BearbeitungsSch ist.
Warum gehst du der Frage nicht nach?

Entweder existieren nicht alle Felder oder das Format für die Übergabe der Argumente ist falsch.

Eberhard versucht dich auf das Grundprinzip aufmerksam zu machen, damit du einmal in der Lage bist die simple Abfrage zu erstellen.

Geändert von markusxy (11.09.2017 um 08:34 Uhr).
markusxy ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.09.2017, 08:43   #13
Haxnwirt
Threadstarter Threadstarter
MOF User
MOF User
Standard

Zitat: von markusxy Beitrag anzeigen

@Haxnwirt
Du wurdest schon mehrfach gefragt von welchem Datentyp BearbeitungsSch ist.
Warum gehst du der Frage nicht nach?

Entweder existieren nicht alle Felder oder das Format für die Übergabe der Argumente ist falsch.

Eberhard versucht dich auf das Grundprinzip aufmerksam zu machen, damit du einmal in der Lage bist die simple Abfrage zu erstellen.

Danke für den Hinweis, so habe ich das nicht verstanden.

BearbeitungsSch ist Double = Tabellenfeldtyp
KalenderW ist Long = Tabellenfeldtyp
Plan_FertTag ist date im Tabellenfeldtyp
Haxnwirt ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.09.2017, 09:38   #14
markusxy
MOF Koryphäe
MOF Koryphäe
Standard

Zitat: von Haxnwirt Beitrag anzeigen

BearbeitungsSch ist Double = Tabellenfeldtyp
KalenderW ist Long = Tabellenfeldtyp
Plan_FertTag ist date im Tabellenfeldtyp

Dann müsste die Abfrage funktionieren.
Ich würde einmal testhalber eine Abfrage mit dem Abfrage-Entwurf Tool erstellen und die Argumente eintragen.
markusxy ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.09.2017, 10:25   #15
drambeldier
MOF Koryphäe
MOF Koryphäe
Standard

Moin,
Code:

UPDATE Fertigung SET Plan_FertTag = #2017-05-15# WHERE BearbeitungsSch = 20180191650372 AND KalenderW = 20;
kopiere diesen (dh deinen) String, mach eine neue Abfrage auf, schalte in SQL-Ansicht, füge den String ein und führe die Abfrage aus.

Meine Vermutung: anstatt #2017-05-15# müsste da #5/15/2017# stehen. Das wird jedenfalls korrekt umgesetzt in ein gültiges Datum.

PS: Anbei ein Minimalbeispiel, das ich mir zum Testen erstellt habe. Mein Traum: sowas vom Fragesteller zu kriegen ;-)
Angehängte Dateien
Dateityp: rar Datumsformat.rar (13,0 KB, 1x aufgerufen)

__________________

Gruß
Ralf

Geändert von drambeldier (11.09.2017 um 12:12 Uhr). Grund: PS
drambeldier ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:03 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Copyright ©2000-2010 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günther Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.
Beachten Sie bitte auch unsere Nutzungsbedingungen.