collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 77
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 0

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 14542
  • stats Beiträge insgesamt: 72939
  • stats Themen insgesamt: 9848
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 443

Autor Thema: Format eines neuen Tabellenfeldes per VBA auf Uhrzeit Lang setzen  (Gelesen 3617 mal)

Offline tragger

  • Access-User
  • *
  • Beiträge: 96
Hallo Leute,

mal wieder ein Problem bei mir.

Vorweg, ich weiß, dass man an einer Tabellenstruktur im Backend nachträglich nichts verändern sollte. Nun ist aber nachträglich der Wunsch einer Vorgangshistorie entstanden, die ich umsetzen möchte. Da ich immer nur eine neue Frontend-Version erstellen kann, muss ich aus dieser mittels VBA an den Tabellen im Backend arbeiten.

Ich kann mit dem unten angegebenen Code problemlos die Tabelle erstellen und mit dem Fontend verbinden, sowie den Primärschlüssel setzen. Jedoch soll auch eine Uhrzeit protokolliert werden. Hierzu muss ich bei einem neu erstellten Feld "Vorgangszeit" das Format irgendwie auf Lange Zeit einstellen. Ich finde aber keine richtige Lösung. Die Versuche scheitern.... Ich hoffe auf eure tatkräftige Unterstützung oder Idee für eine andere Umsetzung. Den Weg über ALTER TABLE habe ich irgendwie nicht verstanden und umsetzen können, deshalb habe ich diese Weg gewählt....

Dim db As Database
    Dim SQL$
    Dim SQL2$
    Dim SQL3$
    Dim rs As DAO.Recordset
    Dim rs2 As DAO.Recordset
    Dim rs3 As DAO.Recordset
    Dim merker As String
   
    merker = CurrentProject.Path & "\Verwaltung _be.accdb"
    Set db = OpenDatabase(merker)
    Dim tabDef As DAO.TableDef
    Dim tabField As DAO.Field
    Dim tabProp As DAO.Property
    Dim tidx As DAO.Index
    Dim strFile As String
    Dim TabelleBack As String
    Dim TabelleFront As String

If fct_TabelleVorhanden(merker, "tabVorgangshistorie") = False Then
      ' 1. Tabelle und Felder erstellen
        Set td = db.CreateTableDef("tabVorgangshistorie")  'Tabelle wird erstellt
        Set f = td.CreateField("VorgangsNr", dbLong) 'ID Feld wird erstellt.
        'f.Attributes = dbAutoIncrField '->AutoWert
        td.Fields.Append f
        Set f = td.CreateField("Vorgangsart", dbText)
        td.Fields.Append f
        db.TableDefs.Append td
        Set f = td.CreateField("Vorgangsdatum", dbDate)
        td.Fields.Append f
        Set f = td.CreateField("Vorgangszeit", dbDate)
        td.Fields.Append f
' ---->> hier beginnt die Problematik
        Set tabProp = td.CreateProperty("Format", LongTime)
        td.Properties.Append tabProp
' ----->> ab hier geht alles wieder
        Set f = td.CreateField("MitgliedsNr", dbLong)
        td.Fields.Append f
        Set f = td.CreateField("Tabelle", dbText)
        td.Fields.Append f
        Set f = td.CreateField("Feld", dbText)
        td.Fields.Append f
        Set f = td.CreateField("Alter_Wert", dbText)
        td.Fields.Append f
        Set f = td.CreateField("Neuer_Wert", dbText)
        td.Fields.Append f
        db.TableDefs.Append td
        Set f = td.CreateField("Kategorie", dbText)
        td.Fields.Append f
        Set f = td.CreateField("Bemerkungstext", dbText)
        td.Fields.Append f
        db.TableDefs.Refresh
      ' 2. Index (Primärschlüssel) erstellen
        Set tidx = td.CreateIndex
        tidx.Name = "VorgangsNr_Index"
        tidx.Primary = True
        tidx.Unique = True
        Set f = tidx.CreateField("VorgangsNr")
        tidx.Fields.Append f
        td.Indexes.Append tidx
        td.Indexes.Refresh
   
        'pfad
        strFile = merker
        ' Tabellenname Backend
        TabelleBack = "tabtabVorgangshistorie"
        ' Tabellenname Frontend
        TabelleFront = "tabtabVorgangshistorie"
       'Tabellen Verknüpfung erstellen
        DoCmd.TransferDatabase acLink, "Microsoft Access", strFile, acTable, _
                               TabelleBack, TabelleFront
    End If
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 8179
Re: Format eines neuen Tabellenfeldes per VBA auf Uhrzeit Lang setzen
« Antwort #1 am: Februar 27, 2013, 17:55:59 »
Hallo,
zu was willst Du in der Tabelle ein Format einstellen?
Formate sind Schall und Rauch und sollten nur dort eingestellt werden, wo man diese auch anzeigt. Z.B. Formular oder Bericht.
Meiner Meinung nach haben Formate in Tabellen nichts zu suchen, da man auf die Tabellen nie direkt zugreift, da das im Regelfall die langsamste Methode ist.
Daher kannst Du notfalls auch in einer Abfrage das gewünschte Format einfach einstellen.
Gruß
Klaus
 

Offline tragger

  • Access-User
  • *
  • Beiträge: 96
Re: Format eines neuen Tabellenfeldes per VBA auf Uhrzeit Lang setzen
« Antwort #2 am: Februar 27, 2013, 18:00:24 »
Jetzt muss ich noch einmal detaillierter nachfragen.

Ich benötige hinterher in der Abfrage die genaue Änderungszeit. Deshalb wollte ich diese speichern. Wenn ich im Feld Vorgangsdatum Daten speichere, wird dann die Systemzeit auch automatisch mitgeloggt?

Dann könnte ich in der Abfrage hinterher ja die Daten auseinandernehmen...

Ist meine Annahme richtig?
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 8179
Re: Format eines neuen Tabellenfeldes per VBA auf Uhrzeit Lang setzen
« Antwort #3 am: Februar 27, 2013, 18:28:13 »
Hallo,
nein, die Systemzeit wird nicht automatisch mit geloggt. Das musst Du selbst erledigen, durch Programmierung.
Z.B. über ein Formular das im Ereignis "Nach Aktualisierung" des Formulars oder eines Feldes das Datum in die Historie schreibt.
Eine andere Möglichkeit ist auch den Standardwert des Feldes auf das aktualle Dateum einzustellen, dann wird bei jedem neuen Datensatz das Datum/Zeitfeld automatisch gefüllt.

Was ich nicht verstehe, warum erstellst Du die Tabelle per Code und nicht einfach im Backend von Hand?

Um noch mal auf das Format zurückzukommen.
Zitat
Ich benötige hinterher in der Abfrage die genaue Änderungszeit. Deshalb wollte ich diese speichern.
Du kannst diese ja speichern, aber dazu benötigst Du nicht das Format. Ein Datumsformat in der Tabelle halte ich für völlig verzichtbar und bedeutungslos, egal was Du als Format einstellst, in der Tabelle steht immer eine reine Dezimalzahl (Double). Das ist so bei einem Access Datumsfeld.
Gruß
Klaus
 

Offline tragger

  • Access-User
  • *
  • Beiträge: 96
Re: Format eines neuen Tabellenfeldes per VBA auf Uhrzeit Lang setzen
« Antwort #4 am: Februar 27, 2013, 19:04:28 »
Also ich muss das per Code erstellen, da ich keinen direkten Zugriff auf das Backend habe / haben darf. Somit muss ich vorher mit einem Muster testen, das alles klappt. Einen anderen Weg als per Code kenne ich nicht..

Mir ist inzwischen die Idee gekommen, dass ich das Feld als normales Datumsfeld eingestellt lasse. Bei einer Änderung in einem Formular dann automatisch ein Datensatz in dieser Vorgangshistorie erzeugt wird und das Feld Vorgangsdatum einfach über Now() gefüllt wird und nicht über Date(). In einer Abfrage lasse ich das dann aufsplitten, damit jeder auch die genaue Änderungszeit sehen kann...

Oder bereite ich mir hiermit weitere Probleme?
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 8179
Re: Format eines neuen Tabellenfeldes per VBA auf Uhrzeit Lang setzen
« Antwort #5 am: Februar 27, 2013, 19:28:18 »
Hallo,
OK, wenn Du kein Zugriff hast OK, denn per Code.
Wobei es Unsinn ist, einem User keinen Zugriff auf eine DB zu geben aber Änderungen per Code zugelassen werden. Da kann man Dir auch gleich alle Rechte geben.
Und wenn Du keine Rechte am Backend hast, kannst Du auch per Code keine Änderungen machen.
Zitat
Bei einer Änderung in einem Formular dann automatisch ein Datensatz in dieser Vorgangshistorie erzeugt wird und das Feld Vorgangsdatum einfach über Now() gefüllt wird
Das meine ich doch die ganze Zeit. Und Aufsplitten musst Du doch auch nicht. Im Formular stellst Du das lange Datumsformat ein und fertig, mehr braucht es nicht.
Und wenn Du die Zeit haben willst, musst Du natürlich Now() bzw. Jetzt() verwenden. Jetzt() für ein deutsches Access.
Gruß
Klaus
 

Offline tragger

  • Access-User
  • *
  • Beiträge: 96
Re: Format eines neuen Tabellenfeldes per VBA auf Uhrzeit Lang setzen
« Antwort #6 am: Februar 27, 2013, 20:03:53 »
okay, vielen dank!!

Mit keinem Zugriff sollte einfach heißen, dass ich am Echtzeitbestand nicht arbeiten darf, damit die Aktualität immer gewahrt ist... aber egal...
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 8179
Re: Format eines neuen Tabellenfeldes per VBA auf Uhrzeit Lang setzen
« Antwort #7 am: Februar 27, 2013, 20:09:48 »
Hallo,
Zitat
dass ich am Echtzeitbestand nicht arbeiten darf,
aber genau das musst Du auch machen wenn Du das per Code machst. Das Fraontend muss exclusiv geöffnet sein und niemand sonst darf arbeiten damit. Du musst also in jedem Fall das Produktivsystem anhalten. Erst dann kannst Du die Tabelle ergänzen bzw. neu anlegen.
Gruß
Klaus
 

 

Format im Steuerelementinhalt

Begonnen von SG05Board Formular

Antworten: 1
Aufrufe: 4579
Letzter Beitrag Mai 21, 2010, 20:00:52
von database
Format Telefon in einer Abfrage

Begonnen von DorianBoard Tabelle/Abfrage

Antworten: 19
Aufrufe: 12426
Letzter Beitrag Mai 23, 2010, 14:26:57
von Dorian
Export in das MS-DOS-CSV-Format

Begonnen von heinz375Board Formular

Antworten: 1
Aufrufe: 3091
Letzter Beitrag Mai 27, 2010, 09:06:55
von DF6GL
Summe für Werte im Format h:nn

Begonnen von harvey186Board Bericht

Antworten: 18
Aufrufe: 8915
Letzter Beitrag August 27, 2010, 18:27:46
von oma
Datenexport aus access als csv format

Begonnen von VirgoBoard Access-Hilfe

Antworten: 2
Aufrufe: 2844
Letzter Beitrag November 26, 2010, 13:40:57
von Virgo

Advertisment / Werbung - Amazon Affiliate Links