|
Update für mde: Neues Feld in Tabelle einfügen
|
| Autor |
Nachricht |
Louis_Paris
Anfänger
Verfasst am: 22. Sep 2009, 14:59 Rufname:
|
|
| Version: Office 2k (2000) |
|
Hi,
ich habe eine Applikation.mde die mit der Daten.mde verbunden ist, in der nur Tabellen sind.
Die Änderungen in der Applikation.mde kann ich durch einfaches Ersetzen dieser Datei bewerkstelligen. In der Daten.mde sind die vom User angelegten Daten. Diese Datei darf ich nicht ersetzen, sondern muss sie updaten.
Wie kann ich jetzt ein Update schreiben um ein neues Feld in eine bestehende Tabelle einzufügen?
_________________ Danke und Salü
Louis
|
|
KlausMz
Moderator Access

Verfasst am: 22. Sep 2009, 15:04 Rufname:
Wohnort: Irgendwo in der Pfalz
|
| |
| Version: Office 2k (2000) |
|
Hallo,
gar nicht. Eine MDE ist geschlossen.
Du musst das Feld in der MDB einfügen. Die Daten aus der MDE importieren.
Die MDB wieder in eine MDE wandeln.
Nachtrag:
Habe gerade gesehen, ist ja schon getrennt.
Du musst das Feld in der Daten.mdb hinzufügen. Ansonsten gleiches Vorgehen.
_________________ Gruß
Klaus . . . . . Der sich über Feedback freut.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.
Zuletzt bearbeitet von KlausMz am 22. Sep 2009, 15:30, insgesamt einmal bearbeitet |
|
ebs17
Learning by Doing - Bastler
Verfasst am: 22. Sep 2009, 15:11 Rufname:
Wohnort: Reinsberg
|
|
| Version: Office 2k (2000) |
|
@Klaus: Das ist falsch. Der Tabellen- und der Abfrageentwurf sind in einer MDE nicht gesperrt.
Es gibt wohl aber auch keinen Grund, ein Backend als MDE zu verwenden.
@Louis_Paris: In der folgenden Funktionssammlung solltest Du alles finden, was Du zur BE-Pflege benötigst. Und immer: Erst prüfen, dann handeln. Eine Updateprozedur könnte auch (versehentlich) mehrfach ausgeführt werden.
Strukturänderungen an der Datenbank (DAO, ADOX, DDL)
_________________ Mit freundlichem Glück Auf!
Eberhard
|
|
KlausMz
Moderator Access

Verfasst am: 22. Sep 2009, 15:35 Rufname:
Wohnort: Irgendwo in der Pfalz
|
|
| Version: Office 2k (2000) |
|
@ebs17
| Zitat: | | Der Tabellen- und der Abfrageentwurf sind in einer MDE nicht gesperrt. | tatsächlich, da ich das noch nie gebraucht habe, war mir das nicht bewusst. Danke für den Hinweis.
_________________ Gruß
Klaus . . . . . Der sich über Feedback freut.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.
|
|
Louis_Paris
Anfänger
Verfasst am: 22. Sep 2009, 16:19 Rufname:
|
| |
| Version: Office 2k (2000) |
|
Hi Eberhard,
danke für den Tipp.
Unter www.kulpa-online.com/tutorial-ddl.html fand ich für das Einfügen eines neuen Feldes in eine bestehende Tabelle:
| Code: | Public Function DAO_CreateField(pdbs As DAO.Database, _
psTable As String, _
psFieldName As String, _
plFieldType As DAO.DataTypeEnum, _
Optional plFieldSize As Long = 0) _
As Boolean
' Benötigte Objektvariablen
On Error GoTo HandleErr
Dim tdef As DAO.TableDef
Dim tfld As DAO.Field
'// Tabelle zuweisen
Set tdef = pdbs.TableDefs(psTable)
'// Neues Feld anlegen
If plFieldType = dbText Then
' Wenn Textfeld, dann
Set tfld = tdef.CreateField(psFieldName, plFieldType, plFieldSize)
Else
Set tfld = tdef.CreateField(psFieldName, plFieldType)
End If
'// Neues Feld in die Tabelle einfügen
tdef.Fields.Append tfld
'// Erfolgreich
DAO_CreateField = True
HandleExit:
'// Speicher freigeben
If Not tdef Is Nothing Then Set tdef = Nothing
If Not tfld Is Nothing Then Set tfld = Nothing
Exit Function
HandleErr:
Select Case Err.Number
Case Else
MsgBox "Fehler " & Err.Number & ": " & _
Err.Description, vbCritical, _
"modKap02.DAO_CreateField"
End Select
DAO_CreateField = False
Resume HandleExit
End Function |
Leider erkenne ich keinen Hinweis wo ich die Namen für die MDE, Tabelle und Feldnamen angebe. Außerdem möchte ich kein Textfeld, sondern ein Währungsfeld ohne Standardwert einfügen.
Könnte ich den Code dann aus der Application.mde starten um in der Daten.mde das Feld einzufügen?
_________________ Danke und Salü
Louis
|
|
Sinister
Access-Programmierer

Verfasst am: 22. Sep 2009, 17:18 Rufname:
|
|
| Version: Office 2k (2000) |
|
Hallo,
Louis, ein Feld kannst du ganz schnell ohne Code hinzufügen.
Falls doch der Code: die Namen musst du als Parameter übergeben (erste Zeile: "...DAO_CreateField(pdbs As DAO.Database, psTable As String..."). Aber du kannst keinen Code zu MDE hinzufügen.
_________________ Warum einfach, wenn es kompliziert geht!?
|
|
Louis_Paris
Anfänger
Verfasst am: 22. Sep 2009, 18:06 Rufname:
|
|
| Version: Office 2k (2000) |
|
Hi Sinister,
solange ich die Datenbanken bei mir habe ist das freilich einfacher ohne Code. Auf meinem PC konnte ich die Daten.mde leicht ergänzen. Jetzt habe ich sie aber ausgeliefert und es sind Änderungen per Update nötig 8)
Mit deinem Hinweis komme ich nicht wirklich weiter An welche Stelle muss ich nun "Daten.mde", Tabelle "Musik", neues WährungsFeld "Gebühr" ohne Standardwert schreiben?
Für Hilfe wäre ich sehr dankbar.
_________________ Danke und Salü
Louis
|
|
ebs17
Learning by Doing - Bastler
Verfasst am: 22. Sep 2009, 18:07 Rufname:
Wohnort: Reinsberg
|
|
| Version: Office 2k (2000) |
|
| Zitat: | | Könnte ich den Code dann aus der Application.mde starten um in der Daten.mde das Feld einzufügen? |
Ja, wenn Du den Code (und weiteren) der Application.mdb hinzufügst und dann daraus eine MDE erstellst.
Es geht aber auch eine zusätzliche Update-MDB, die einfach mit Ausführung des Codes gestartet wird und die sich im Abschluss selber schließt.
| Code: |
Dim dbX As DAO.Database
Set dbX = OpenDatabase("C:\irgendwo\Daten.mde")
' erst prüfen
If DAO_FieldExists(dbX, "DeineTabelle", "DeinFeld") = False Then
' Feld einfügen
DAO_CreateField dbX, "DeineTabelle", "DeinFeld", dbCurrency
' Standardwert setzen
dbX.TableDefs("DeineTabelle").Fields("DeinFeld").DefaultValue = 0
' Wert für bereits vorhandene Datensätze nachtragen
dbX.Execute "UPDATE DeineTabelle SET DeineTabelle.DeinFeld = 0"
End If
dbX.Close
Set dbX = Nothing |
Inklusive der Prüfen-Funktion kann die Anweisung beliebig oft ausgeführt werden
- zur Fehlervermeidung bei versehentlicher Wiederholung
- zur Erstellung eines kumulativen Updates
_________________ Mit freundlichem Glück Auf!
Eberhard
|
|
Louis_Paris
Anfänger
Verfasst am: 22. Sep 2009, 18:52 Rufname:
|
|
| Version: Office 2k (2000) |
|
Hi ebs17,
danke super Ansatz
Ich erstellte eine Update.mdb mit folgendem Code:
| Code: | Private Sub OK_Click()
If CInt(Mid(LizenzNr, 2, 1)) + CInt(Mid(LizenzNr, 3, 1)) + ..... = 4711 Then
DoCmd.GoToControl "OK"
'--- Update Anfang ---
Dim dbX As DAO.Database
Set dbX = OpenDatabase("C:\irgendwo\Daten.mde")
' erst prüfen
If DAO_FieldExists(dbX, "Gehaltsbuchungen", "Rückvergütung") = False Then
' Feld einfügen
DAO_CreateField dbX, "Gehaltsbuchungen", "Rückvergütung", dbCurrency
' Standardwert setzen
dbX.TableDefs("Gehaltsbuchungen").Fields("Rückvergütung").DefaultValue = 0
' Wert für bereits vorhandene Datensätze nachtragen
dbX.Execute "UPDATE Gehaltsbuchungen SET Gehaltsbuchungen.Rückvergütung = 0"
End If
dbX.Close
Set dbX = Nothing
'--- Update Ende ---
Else:
Me!LizenzText = "Falsche LizenzNr. Bitte korrigieren."
DoCmd.GoToControl "LizenzNr"
End If
End Sub |
Leider erhalte ich die Fehlermeldung:
| Zitat: | | Fehler beim Kompilieren: Sub oder Function nicht definiert |
Gelb markiert wird die erste Zeile: Private Sub OK_Click()
Wenn ich die Zeilen beginnend mit DIM und SET direkt unter die erste Zeile setze, erhalte ich das selbe Ergebnis.
_________________ Danke und Salü
Louis
|
|
ebs17
Learning by Doing - Bastler
Verfasst am: 22. Sep 2009, 22:32 Rufname:
Wohnort: Reinsberg
|
|
| Version: Office 2k (2000) |
|
Private Sub OK_Click() - wo liegt das?
Ich würde auf eine Benutzerinteraktion und damit auf Formulare generell verzichten.
AutoExec schiebt Prozedur an, fertig. (Einstieg für Entwickler offen lassen)
_________________ Mit freundlichem Glück Auf!
Eberhard
|
|
Louis_Paris
Anfänger
Verfasst am: 23. Sep 2009, 08:43 Rufname:
|
|
| Version: Office 2k (2000) |
|
Hi ebs17,
ich weiß eigentlich gar nicht wie ich das sonst einbinden soll.
| Code: | | Private Sub OK_Click() |
ist eine Schaltfläche auf dem Startformular.
Jetzt habe ich das Modul "Update" angelegt:
| Code: | Option Compare Database
Dim dbX As DAO.Database
Set dbX = OpenDatabase("C:\Eigene Dateien\irgendwo\Daten.mde")
' erst prüfen
If DAO_FieldExists(dbX, "Gehaltsbuchungen", "Rückvergütung") = False Then
' Feld einfügen
DAO_CreateField dbX, "Gehaltsbuchungen", "Rückvergütung", dbCurrency
' Standardwert setzen
dbX.TableDefs("Gehaltsbuchungen").Fields("Rückvergütung").DefaultValue = 0
' Wert für bereits vorhandene Datensätze nachtragen
dbX.Execute "UPDATE Gehaltsbuchungen SET Gehaltsbuchungen.Rückvergütung = 0"
End If
dbX.Close
Set dbX = Nothing |
Die Schaltfläche erhielt den Code
Jetzt erhalte ich die Fehlermeldung:
| Zitat: | | Fehler beim Kompilieren: Außerhalb einer Prozedur ungültig |
Wie kann ich mein Update verwenden? Eigentlich darf es nur laufen, wenn der User die korrekte Lizenznummer eingegeben hat.
_________________ Danke und Salü
Louis
|
|
ebs17
Learning by Doing - Bastler
Verfasst am: 23. Sep 2009, 10:03 Rufname:
Wohnort: Reinsberg
|
| |
| Version: Office 2k (2000) |
|
Das sind jetzt aber völlig andere Fragen als die des ursprünglichen Themas, das ich als gelöst betrachte.
(1) Ein Modul sollte neben Code auch eine Funktions-/Subdeklaration enthalten, ein Option Explicit sowieso. Das sehe ich bei Dir nicht. Mehr Sorgfalt statt Aktionismus scheint angeraten zu sein.
(2) Es gibt Varianten, wo ein Lizenzschlüssel nur einmalig eingegeben werden muss und dieser dann in irgendeiner Form im System des Anwenders abgelegt wird.
Somit könnte die Updateprozedur diesen Schlüssel auslesen und auswerten.
Näher habe ich mich damit nicht befasst, bei mir gibt es eine schlichte Laufzeitbeschränkung auf ein Datum bezogen, und berechtigte Anwender erhalten inklusive einem Update eine Laufzeitverlängerung.
Bezüglich Lizenzen kannst Du Dich bei Thomas Keßler umsehen: http://www.tksoft-online.de/
_________________ Mit freundlichem Glück Auf!
Eberhard
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum nicht posten Du kannst Dateien in diesem Forum herunterladen
|
| |

|
|
| Verwandte Themen |
| Forum / Themen |
Antworten |
Autor |
Aufrufe |
Letzter Beitrag |
 |
Access Tabellen & Abfragen: Bestimmte Daten aus 2 Tabellen an eine 3. Tabelle anfügen |
2 |
Voeman |
110 |
17. Mai 2010, 10:26 Voeman  |
 |
Access Berichte: Access 2007: Bild in Bericht mit Pfad aus Tabelle |
3 |
ehonk |
208 |
13. Apr 2010, 05:12 Willi Wipp  |
 |
Access Formulare: Listenfeld 1spalte->neues Form;alle Daten aus Tab übergeb |
27 |
Sadie007 |
412 |
02. Feb 2010, 13:32 käsebrot1234  |
 |
Access Programmierung / VBA: Per VBA Feld errechnen mit wert aus Folgezeile |
14 |
lbijl |
311 |
14. Dez 2009, 18:54 MiLie  |
 |
Access Tabellen & Abfragen: Dropdownbox in Tabelle - Werte aus anderen Tabellen anzeigen |
1 |
mrpinkrocks |
209 |
13. Aug 2009, 14:27 derArb  |
 |
Access Hilfe: Tabelle mit HTML als CSV exportieren |
1 |
Kai Mathieu |
418 |
29. Mai 2009, 17:51 steffen0815  |
 |
Access Programmierung / VBA: String Zeichen einfügen nach jedem dritten zeichen |
2 |
Ledge |
1320 |
27. Mai 2008, 19:36 Ledge  |
 |
Access Programmierung / VBA: Neuer Datensatz einfügen und Laufzeitfehler 3346 |
8 |
Honky |
1120 |
30. Jan 2008, 23:02 Honky  |
 |
Access Hilfe: Daten in bestimmte Stelle einer txt-datei einfügen |
5 |
Bladerunner |
408 |
18. Jul 2007, 00:10 Willi Wipp  |
 |
Access Programmierung / VBA: Daten aus der DB in eine Excel Tabelle schreiben?! |
1 |
Valor2002 |
409 |
19. Apr 2007, 19:34 steffen0815  |
 |
Access Programmierung / VBA: Access 2003 + Access XP + mde Problem |
2 |
Nerion |
1518 |
10. Feb 2007, 19:36 Nerion  |
 |
Access Programmierung / VBA: Max Wert aus Tabelle |
2 |
nathy84 |
2235 |
06. Okt 2006, 10:41 Nouba  |
| |
|