Hallo,
ich möchte aus einer Tabelle die erste OrderID raussuchen bei der ein bestimmtes Datum noch nicht gesetzt ist. Dazu habe ich folgenden Code genutzt: AuftragsNr = DFirst("OrderID", "TransferedOrders", "Updatedate=''")
Es funktioniert aber nicht. Was mache ich falsch?
Hallo,
was ist die "erste" OrderID ?
AuftragsNr = DLookup("OrderID", "TransferedOrders", "Updatedate is Null")
Hallo,
er soll mir den ersten Wert aus dem Feld OrderID geben wenn UpdateDate ist null.
Mit AuftragsNr = DLookup("OrderID", "TransferedOrders", "Updatedate is Null") erhalte ich immer einen Überlauffehler.
Hallo,
das hab ich schon verstanden... ;) Nur, was ist der ERSTE Wert? Wenn das der Wert aus dem Datensatz ist, der kein Datum besitzt, dann liefert Dlookup genau den. Dieser Wert ist aber nicht zwingend auch der, der sich aus einer aufsteigenden Sortierung der OrderID ergibt.
Soll also die NIEDRIGSTE OrderID aus allen Datensätzen, bei denen das Datum leer ist, ausgelesen werden, dann wäre:
AuftragsNr = DMin("OrderID", "TransferedOrders", "Updatedate is Null")
anzuwenden.
ps.
Überlauffehler:
Dann ist wohl AuftragsNr zu "klein" deklariert. Besser so:
Dim AuftragsNr as LONG
Unter der Annahme, dass OrderID in der Tabelle den Datentyp Autowert, bzw. Zahl, Long besitzt.
Hallo,
Bingo, dass funktioniert super. Vielleicht kannst du mir noch sagen wie ich diese gefiterte OrderID für den Excel Export anwenden kann.
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "NewOrders_Microsoft_Techdata", Datei, , ""
Ich muss ja für die Abfrage irgendwo ein Kriterium definieren können, oder?
Hallo,
und das Gleiche benötige ich für eine Aktualisierungsabfrage. Ich möchte in einer Tabelle beim Datansatz dieser Order ein Datum setzen. Wie kann ich die Aktualisierungsabfrage aufrufen und auf diese OrderID beschränken?
Hallo,
erstell eine Public -Funktion, die die OrderID zurückliefert. Diese Funktion ruft Du im Kriterium der Abfrage auf (schreibst den Aufruf in die Where-Condition ).
Ich kann dem Ablauf aber nicht richtig folgen...
Die OrderID ist doch nur durch das fehlende Datum charakterisiert. Woher weißt Du das für diese akt. OrderID gültige Datum?
Hallo,
ich habe folgenden Prozess:
1.) alle neuen Aufträge filtern und deren OrderID in die Tabelle "TransferedOrders" schreiben
DoCmd.OpenQuery ("AddOrder_Microsoft_Techdata_ToTable")
2.) Schleife eröffnen um neue Aufträge einzeln zu exportieren.
If DCount("ErsterWertvonOrderID", "FirstOrders_Microsoft_Techdata") > 0 Then
2a.) ersten neuen (noch nicht gesendeten) Auftrag filtern
AuftragsNr = DMin("OrderID", "TransferedOrders", "Senddate is Null")
2b.) Auftrag in ExcelSheet exportieren hier muss ich die [AuftragsNr] filtern
Datei = "D:\TransferData\000000_Microsoft_Order" & [AuftragsNr] & ".xls"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "SendOrders_Microsoft_Techdata", Datei, , ""
2c.) Mail mit Excel Datei im Anang versenden.
Call SendMail("Mailadresse", Datei, "000000 - Orderdetails " & AuftragsNr)
Public Function SendMail(Empfaenger, Anhang, Betreff As String)
Dim ool As Outlook.Application
Dim oMail As Outlook.MailItem
'Anhang
Dim myattachments As Variant
' Verweis zu Outlook + neue Nachricht
Set ool = CreateObject("Outlook.Application")
Set oMail = ool.CreateItem(olMailItem)
Set myattachments = oMail.Attachments
' Befreff-Zeile
oMail.Subject = Betreff
' An-Zeile (Empfänger)
oMail.To = Empfaenger
' Texteingabe (Nachricht selbst)
oMail.Body = "Hallo, anbei finden Sie die Kundendaten zu den Ihnen aktuell übersandten Lizenzbestellungen."
myattachments.Add Anhang
'-------- Mail versenden -----
oMail.Send
'----------------------------------
End Function
2d.) Versanddatum in "TransferedOrders" setzen hier muss ich die [AuftragsNr] filtern
DoCmd.OpenQuery ("Update_Microsoft_Techdata")
Wie kann ich meine roten Anmerkungen umsetzen?
Hallo,
1) benutze zum Ausführen einer Aktions-Abfrage Currentdb.Execute, bzw. bei bestimmten Verfahren Docmd.RunSQL und nicht OpenQuery.
2) versteh nicht (den Zweck der vermutlich gruppierenden Abfrage)
2b) sagte ich bereits: in die Abfrage den Aufruf einer Public-Funktion im Kriterium einbauen.
oder der SQL-Eigenschaft der Abfrage "SendOrders_Microsoft_Techdata" einen per VBA zusammengesetzten SQL-String zuweisen, z. B.:
Currentdb.Querydefs!SendOrders_Microsoft_Techdata.SQL = " Select * from TransferedOrders Where OrderID= " & AuftragsNr
DoCmd.TransferSpreadsheet ...
2c) Objekt-Variable auch als Object deklarieren:
Dim myattachments As Object
Objekt-Variable am Ende der Prozedur zerstören:
Set oMail = Nothing: Set ool = Nothing
2d) wie 1) und dabei den SQL-String mit der AuftragsNr zusammenbauen.
z. B.:
Currentdb.Execute " Update TransferedOrders set Versanddatum =Date() Where OrderID= " & AuftragsNr
Hallo,
Danke für die Hilfe. Ich habe gestern Abend noch eine Lösung des Problems hinbekommen.
Hallo,
verätst Du die uns noch?
Hallo,
ich habe jetzt folgende Funkton gebaut.
Public Function Update_Microsoft_Lizenzen()
Dim AuftragsNr As Long
Call set_logfile("Start Export-Anfrage")
'Ermittle alle offene Bestellungen
DoCmd.OpenQuery ("AddNewOrders_Microsoft_Techdata")
While DCount("OrderID", "FindOpenOrders_Microsoft_Techdata") > 0
'Ermittle erste offene Bestellung
AuftragsNr = DMin("OrderID", "FindOpenOrders_Microsoft_Techdata")
DoCmd.Minimize
DoCmd.OpenForm "frm_Dummy"
Forms![frm_Dummy].[FeldOrderID] = AuftragsNr
'Export in Datei
Call set_logfile("Export Microsoft Lizenzdaten")
Datei = "P:\ProduktManagement\Datenbanken\TransferLicenseOrders\Export\Microsoft_Order" & [AuftragsNr] & ".xls"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "ExportOrders_Microsoft_Techdata", Datei, , ""
'Mail-Versand
Call set_logfile("Microsoft-Sales@techdata.de")
Call SendMail("Microsoft-Sales@techdata.de", Datei, "Orderdetails " & AuftragsNr)
Call set_logfile("SetSendDate_Microsoft_Techdata")
'Versanddatum in Tabelle setzen.
DoCmd.OpenQuery ("SetSendDate_Microsoft_Techdata")
DoCmd.Close acForm, "frm_Dummy"
Wend
End Function
Ich fixiere die AuftragsNr mit einem Formular und nutze dies als "Zwischenspeicher".
Hallo,
zu empfehlen:
http://www.dbwiki.net/wiki/Access_Design:Formularbez%C3%BCge
und
http://www.dbwiki.net/wiki/Access_Designtipps
neben der gesamten Seite....