Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

DFirst funktioniert nicht

Begonnen von thorstens1304, Dezember 27, 2011, 12:15:50

⏪ vorheriges - nächstes ⏩

thorstens1304

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?

DF6GL

Hallo,


was ist die "erste" OrderID  ?


AuftragsNr = DLookup("OrderID", "TransferedOrders", "Updatedate is Null")
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

thorstens1304

Hallo,

er soll mir den ersten Wert aus dem Feld OrderID geben wenn UpdateDate ist null.

thorstens1304

Mit AuftragsNr = DLookup("OrderID", "TransferedOrders", "Updatedate is Null") erhalte ich immer einen Überlauffehler.

DF6GL

#4
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.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

thorstens1304

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?

thorstens1304

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?

DF6GL

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?


Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

thorstens1304

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?

DF6GL

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
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

thorstens1304

Hallo,

Danke für die Hilfe. Ich habe gestern Abend noch eine Lösung des Problems hinbekommen.

DF6GL

Hallo,

verätst Du die uns noch?
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

thorstens1304

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

DF6GL

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....
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access