MS-Office-Forum
Google
   

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > SQL
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 09.01.2017, 17:31   #1
stay92
Neuer Benutzer
Neuer Benutzer
Standard MySQL - SQl Update in VBA

Hallo,

habe folgendes Anliegen: Ich möchte ein Feld aktualisieren, welches sich aus einem Recordset und einer Berechnung zusammensetzt.

Code:

Dim rsA As DAO.Recordset
Dim db As Database

Set dbs = Currentdb

Set rsA = dbs.OpenRecordset("SELECT ID, Datumvon, Datumbis, nZahl as ZahlVortag " & _
                            "FROM tbl_Test" & _
                            "WHERE Datumvon=Datumbis;")

dbs.Execute("Update tbl_Test " _
            & Set Zahl = ZahlVortag + (Zahl1-Zahl2) " _
            & WHERE tbl_Test.Datum = Date();")
Es ist so, dass ZahlVortag bereits in den Tabellen existiert, nur mit dem Datum vom Vortag. Allerdings funktioniert das ganze noch nicht so wie gedacht. Ich erhalte die Meldung, dass zu wenig Paramter übergeben wurden o. Ä..

Oder ist dies der falsche Weg und ich muss das über eine Do While Schleife lösen?

Danke im Voraus

Geändert von stay92 (09.01.2017 um 17:34 Uhr).
stay92 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.01.2017, 09:15   #2
sonic8
MOF Profi
MOF Profi
Standard

Zitat: von stay92 Beitrag anzeigen

Code:

Dim rsA As DAO.Recordset
Dim db As Database

Set dbs = Currentdb

Set rsA = dbs.OpenRecordset("SELECT ID, Datumvon, Datumbis, nZahl as ZahlVortag " & _
                            "FROM tbl_Test" & _
                            "WHERE Datumvon=Datumbis;")

dbs.Execute("Update tbl_Test " _
            & Set Zahl = ZahlVortag + (Zahl1-Zahl2) " _
            & WHERE tbl_Test.Datum = Date();")
Es ist so, dass ZahlVortag bereits in den Tabellen existiert, nur mit dem Datum vom Vortag. Allerdings funktioniert das ganze noch nicht so wie gedacht. Ich erhalte die Meldung, dass zu wenig Paramter übergeben wurden o. Ä..

Deine ZahlVortag ist ein Feld im Recordset. Darauf kannst du dich nicht direkt in einem nachfolgendem SQL-Statement beziehen.
Du musst entweder den Wert von ZahlVortag in eine Variable auslesen und diese in den SQL-String verketten, oder beide SQL-Staments kombinieren, so dass die Ermittlung von ZahlVortag und die Aktualisierung zusammen ausgeführt werden kann.

__________________

Better VBA - Videoserie - Episode 9 - Bessere Code-Lesbarkeit durch Prozeduren
sonic8 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.01.2017, 12:20   #3
stay92
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Danke!
Wenn ich es so mit einer Variablen mache klappt es aber leider auch noch nicht ganz oder verkette ich die falsch?

Code:

Dim rsA As DAO.Recordset
Dim db As Database

Set dbs = Currentdb
Dim vZahl as Integer

Set rsA = dbs.OpenRecordset("SELECT ID, Datumvon, Datumbis, nZahl as ZahlVortag " & _
                            "FROM tbl_Test" & _
                            "WHERE Datumvon=Datumbis;")
vZahl = rsA!ZahlVortag
dbs.Execute("Update tbl_Test " _
            & Set Zahl = vZahl + (Zahl1-Zahl2) " _
            & WHERE tbl_Test.Datum = Date();")
stay92 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.01.2017, 13:04   #4
sonic8
MOF Profi
MOF Profi
Standard

Zitat: von stay92 Beitrag anzeigen

Code:

dbs.Execute("Update tbl_Test " _
            & Set Zahl = vZahl + (Zahl1-Zahl2) " _
            & WHERE tbl_Test.Datum = Date();")

Ich weiß nicht, ob das vielleicht nur beim Posten hier im Forum passiert ist, aber es fehlen die öffnenden Anführungszeichen in der 2. und 3. Zeile der Anweisung.
Außerdem ist keine Verkettung mit der VBA-Variablen zu erkennen. Innerhalb eines Strings wird diese nur als reiner Text behandelt, und nicht der Wert der Variablen verwendet.
Code:

dbs.Execute("Update tbl_Test " _
            & " Set Zahl = " & vZahl & " + (Zahl1-Zahl2) " _
            & " WHERE tbl_Test.Datum = Date();")
Um Fehler zu finden ist es hilfreich, eine SQL-Anweisung erst in einer String-Variablen zwischenzuspeichern, deren Inhalt man sich dann im Direktfenster ausgeben lassen kann.

__________________

Better VBA - Videoserie - Episode 9 - Bessere Code-Lesbarkeit durch Prozeduren
sonic8 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.01.2017, 09:01   #5
stay92
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Das Ganze funktioniert zwar jetzt ohne Fehlermeldung, aber er rechnet nicht den richtigen Wert...
Er rechnet jetzt nur die Differenz von Zahl1-Zahl2, aber ignoriert den Wert des Vortags...

Wenn ich das Recordset als Abfrage erstelle, zeigt er mir die richtigen Werte an, aber er zieht sie nicht
stay92 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.01.2017, 10:36   #6
hcscherzer
MOF Guru
MOF Guru
Standard

Einerseits liest Du im Recordset das Feld nZahl aus und andererseits geht das Update auf das Feld zahl - das scheint mir widersprüchlich.

Statt mit einem Recordset, dass jeden einzelnen Datensatz abarbeitet und einer zusätzlichen Variable, könnte man das auch mit einer einzigen Updateanweisung erledigen, die den Wert vom Vortag in einer Unterabfrage ermittelt.
Um Eberhard zu zitieren: SQL ist Massendatenverarbeitung.
Code:

dim sqlc as string
  sqlc = "update tbl_test " & _
         "set zahl = (select zahl from tbl_test where Datum = Date() - 1) + zahl1 - zahl2 " & _
         "where datum = date()"
  ' hier kannst Du den SQL String kontrollieren, wenn es nicht klappt
  dbs.execute sqlc, dbfailonerror

__________________

Freundlichen Gruß
Hans-Christian
-----------------------------------------
Oft erwünscht, selten beachtet: nach Erledigung des Problems den Thread als erledigt zu markieren
-----------------------------------------
Ich möchte nur Mitglied in einem Verein sein, der Leute wie mich nicht als Mitglied aufnimmt (Groucho Marx).
-----------------------------------------
Ab sofort regelmässig: MOF Stammtisch in Bremen. Näheres hier.
hcscherzer 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 08:11 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.