Is´n MS-ACCESS-Profi hier?

Begonnen von Mr.Ioes, 12. Mai 2003, 22:50:59 Uhr

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

Mr.Ioes

12. Mai 2003, 22:50:59 Uhr Letzte Bearbeitung: 12. Mai 2003, 22:51:44 Uhr von Mr.Ioes
Hallo,

nachdem ich mal bei der Volkshochschule einen ACCESS-Grundlagenkurs gemacht habe, bin ich der Idee verfallen mir (zunächst mal) eine eigene Hausverwaltungsdatenbank zu schreiben (sollen später noch mehr Aufgbaben werden). Leider tu´ ich mich doch schwerer damit als ursprünglich gedacht. Z. Bsp. häng´ ich jetzt schon seit geraumer Zeit am Erstellen von Formularen, damit ich die DB überhaupt gefüttert kriege.

Bevor ich jetzt meine ganzen kleinen Einzelfragen hier breittrete, die sich bei eurer Antwort möglicherweise schon überholt haben, frage ich einfach mal ganz direkt: Hat jemand eine offene mdb-Hausverwaltungsdatenbank mit den Grundfunktionen an der Hand, die ich dann nur noch für meine Bedürfnisse weiter zu entwickeln brauche?? Denn darum geht es mir letztlich. Es gibt viele gute Software zu akzeptabelen Preisen. Ich will die Datenbank aber selbst konfigurieren können.

Mal sehen, ob sich jemand meldet.

Database3

Hi,

als Nachschlagewerk zur Verwendung von Access würde ich Dir die im LINK (http://www.uni-essen.de/hrz/vortrag/access8/) befindliche Seite empfehlen.

Des weiteren würde ich mir zuerst ein Konzept auf Papier erstellen, welches alle notwendigen Spalten, Tabellen u. Verwaltungsdaten enthaltet, wobei meine Empfehlung ist, je mehr Tabellen zu hast, desto einfacher ist später eine Abfrage über ein Statement.

Gruss
Database3

PS: von DataBecker gibt es einige CDs mit Verwaltungsprogrammen. www.databecker.de

Mr.Ioes

Hallo Database,

erst mal vielen Dank für den Tipp mit dem Link zur Uni-Essen. Hab´ ihn mir direkt mal in meine Favorieten genommen.

Aber ich denke Litereatur und Erklärungen zu MS-ACCESS ist nicht mein Problem. Da hab´ ich schon ´ne Menge hier rumliegen. Um die systematisch durchzulesen bräuchte ich schon ´ne Woche und das ohne an der DB weitergekommen zu sein. Außerdem ist das doch ´n bischen viel auf einmal, so dass ich auch die eine oder andere Kleinigkeit sofort wieder vergessen würde.

Es sind ja oft die kleinen Optionen, die falsch gewählt sind und einem dann die Probleme machen.

Bei´m ersten Blick auf die Databecker-Seite hab´ ich deren e-m@il-Adresse nicht sofort finden können. Denn ich müsste die ja ausdrücklich Fragen, ob sie mir eine offene Datenbank auf MS-ACCESS-Basis verkaufen würden. Das kann ich mir aber nicht vorstellen, weil sie mir danach nix mehr dazu verkaufen könnten und somit auch kein Geld mehr an mir verdienen würden.

Ich bastell jetzt mal weiter - bis zum nächsten Tipp.



Mr.Ioes

Hiermit stelle ich meine in einem andren Forum gestellte etwas speziellere Frage auch mal auszugsweise hier rein, in der Hoffnung dass doch ma jemand vorbeikommt der sich damit auskennt.

Ausgangslage:
Ich habe meine Tabellen wo es nur geht referentiel mit Aktualisierungsweitergabe verknüpft. Zudem habe überall dort wo es möglich war, bei der Bezugnahme auf Datensätze Listenfelder verwendet, so dass z.Bsp. in meiner AdressTab nur Straßennamen aufgenommern werden können, für die in der StrassenTab bereits ein Datensatz hinterlegt ist. Nur da ist ja noch gar nichts hinterlegt.

Ziel:
Nun wünsche ich mir ein Formular, bei dem ich eine Adresse (nach Nationenschlüssel, PLZ, Straßenname, Hausnummer) eingeben kann. Daraufhin soll ACCESS zunächst vergleichen, ob die einzelnen Datenfelder schon in den jeweiligen Mastertabellen (NationenTab das Nationenkuerzel, PLZTab die PLZ, StrassenNamenTab der StrassenName u.s.w.) existieren und wenn nicht eben da reinschreiben (etwaige weitere Informationen (Datenfelder) im Masterdatensatz - z.Bsp. irgendwelche Bemerkungen - kann ich gerne per Hand nachpflegen). In einem weitern Schritt soll (in diesem Beispiel) ein zusammenhängender AdressDatensatz erstellt werden, wobei zuvor auch hier wieder zu prüfen ist, ob der Datensatz nicht schon existiert (viele Mieter wohnen in genau dem einen verwalteten Objekt). Dann wünsche ich mir in einem dritten Schritt, dass die daraufhin entstehende ID - möglichst automatisch - in einem weiteren Datensatz (insb. der Personen- oder ObjektTab) hinterlegt wird, und zwar insbesondere wenn das Anschriftenformular ein Unterformular (hier im Bsp.) eines Personeneingabeformulars ist.

Kann mir jemand sagen unter welchem - bitte möglichst genauen - Stichwort ich nachlesen muss, um die (von mir hier sog.) Vergleichsroutinen (gibt´s den Datensatz schon?) und den jeweiligen Anfüge-Befehl im Anschluss an ein Ereignis starten zu lassen oder - für die ganz alten Profis - mir sogar kurz den Code zu schreiben?

Ich habe hier diverse Skripte vom Herdt-Verlag (notfalls auch zu VBA und SQL) und das ACCESS 2000 prof.-Buch aus´m ADDISON-WESLEY Verlag.

Schon mal Danke allein für´s lesen!  :o

Database3

Hallo nochmal,

arbeite zwar mit DB2 und SQL2000 (=fast gleich wie Access)
und vermute Du möchtest die Felder in den Spalten als Schlüsselfelder definieren, welche durch Aufruf der PLZ (z.B) die Nationenbezeichnung und den Ort autom in die Felder ergänzt. Od. wenn Du die Strasse anwählst bzw. eingibst, dass der Ort, die PLZ u. die Nationenbezeichnung autom ergänzt wird.

Diese Felder bezeichnet man als "Schlüsselfelder"

Hier ein Link (http://www.uni-forst.gwdg.de/forst/fbi/lehre/skripten/angewandte_inf/access/tag1/tag1.htm), wie Du diese in die Datenbank implementierst.

Weitere Links (http://www.google.at/search?q=schl%C3%BCsselfelder+u.+access&ie=UTF-8&oe=UTF-8&hl=de&meta=) findest Du hier.

Gruss
Database3

Mr.Ioes

15. Mai 2003, 16:11:47 Uhr #5 Letzte Bearbeitung: 15. Mai 2003, 16:49:26 Uhr von Mr.Ioes
Hallo Database3 und Ihr übrigen (hoffentlich) Neugierigen!

Also erstmal danke für die Links. Aber ich denke, dass ich die wesentlichen Grundstruckturen bei der Verknüpfung von Tabellen schon verstanden habe. Mein Problem liegt dann doch eher bei VBA und SQL. Dazu hab´ ich jetzt noch andere Foren gefunden, die sagen wir mal nach meinem ersten Eindruck ´n bischen spezialisierter sind.

Aber die, die bis hierhin mitgelesen haben möchte ich gerne auf´m laufenden halten:

A: Zunächst noch mal kurz/auszugsweise zur Strucktur meines DB-Entwurfs.

Fangen wir mal unten an, die DPLZ:Tab (Deutsche Postleitzahlen) besteht im Wesentlichen aus: 5-Stelliger PLZ (pk), einer Verknüpfung mit der OrtsTab durch die OrtsID.

Die StassenNamenTab besteht im Wesentlichen aus: Autowert (pk), StraßenName (Txt) und einer Verknüpfung mit der DPLZ_Tab sowie der AuslPLZ_Tab (ausländische Postleitzahlen) durch die entsprechenden PLZen.

Eine neue Straße soll demnach (nur) angelegt werden, wenn Straßennamentext und PLZen (Dt. oder ausl.) nicht bereits in dieser Kombination bestehen.

Die AdressTab wiederum besteht im Wesentlichen aus Autowert (pk), StrassenName (FremdID), HausNr (ausgeschriebene Hausnummer mit von bis und a,b, u.s.w.), HausNrZahl (nur die erste Zahl zum Sortieren und Suchen) und noch einem Bemerkungs-Text-Feld z.Bsp. für HH (=Hinterhaus) etc.

Damit dürfte ein neue Adresse nur angelegt werden, wenn StraßenName (FremdID), HausNrZahl und Bemerkung (HinterHaus, Eingang C etc.) nicht bereits in dieser Kombination existieren.

Dass mein Konzept ein bischen umständlich sein mag (insb. bei den HausNrn) liegt zum einen daran, dass´s mein erster Entwurf ist und ich beabsichtige, die Daten später u.a. auch für Maklersuchabfragen zu nutzen.

B. Da ich wie gesagt mit VBA noch so meine erheblichen Schwierigkeiten habe schildere ich hier mal kurz wie ich mir das vorstelle:

1. Ich erstelle eine einfache Abfrage in die ich (mittels *) alle Felder der AdressTab aufnehme und klicke Anzeigen an.

2. Diese Abfrage speichere ich als Formular ab.

3. Ich klicke mit der Maus in das Textfeld des Steuerelements DPLZ und gehe im Eigenschaftsfenster auf Ereignis.

4. Dort klicke ich in die Zeile "Vor Aktualisierung" und wähle Ereignisprozedur. Dann lasse ich mir über die ... die VBA-Entwicklungsumgebung öffnen.

5. Dort würde ich folgenden Code eingeben:

Private Sub DPLZ_Tab_DPLZ_BeforeUpdate(Cancel As Integer)

Dim Db As Database, Rcst As Recordset, SQL As String
Dim check As Integer

Set Db = CurrentDb()
SQL = "Select * from DPLZ_Tab where DPLZ = '" & Forms![Form_Anschriften]![AdressTab.DPLZ] & "'"

Set Rcst = dbs.openrecordset(SQL)
check = Rcst.RecordCount

If check = 0 Then ???
'Für die Fälle, dass check = 0 ist, sollten mir die Ortsnamen (OrtsTab) samt Bundeslandkuerzel und RegBez angezeigt werden, und zwar nach Möglichkeit grob vorsortiert in der Weise, dass z.Bsp. zur neuen PLZ 51065 die nächstliegende schon vorhanden z.Bsp. 50672 mit Ortsnamen, Bundeslandkuerzel und RegBez angezeigt wird.
'P1: Wie geht das?
'Unterfall a): Der richtige Ort wird angezeigt, dann neue DPLZ samt OrtsID als neuen Datensatz in die DPLZ_Tab eintragen
'P2: Wie geht das?
'Unterfall b): Der Ort wird (noch) nicht angezeigt, dann müsste ein "Eingabefeld" geöffnet werden, bzw. sein, um den Ort einzutragen und zusammen mit der DPLZ als neuen Datensatz in die DPLZ einzutragen.
'P3: Das geht aber (noch) nicht weil in der DPLZ keine Ortsnamen sonden nur OrtsIDs hinterlget werden. Also müsste zunächst ein neuer Datensatz in der OrtsTab angelegt werden.
'P4: Um einen eindeutigen Datensatz in der OrtsTab zu erstellen, weitere Angaben benötigt. Darüber welche ich hier endgültig wählen soll, bin ich mir noch nicht shlüssig. Da die Sache mit den ausländischen Adressen für´s Erste noch viel Zeit hat, würde es mir sehr weiterhelfen, wenn ich den neuen Ort zusammen mit Bundeslandkuerzel und (optional) RegBez in der Ortstab anlegen könnte. Und wie das geht, weiß ich natürlich auch noch nicht!

End If

Rcst.Close
Set Db = Nothing

End Sub

6. Jetzt - so meine ich - brauche ich kein VBA mehr, dass Steuerelement sollte nun (irgendwie halt automatisch) die im Textfeld erscheinende PLZ in einen neuen AdressDatensatz eintragen.

7. Nochmal Verständnisfrage: Wann genau wird den der Adressdatensatz erzeugt. Wenn ich mich recht erinnere habe ich die AdressTab so angelegt, dass zur Erstellung eines Datensatzes zumindest PLZ und Straßennamen erforderlich sind?

Database3

16. Mai 2003, 13:31:37 Uhr #6 Letzte Bearbeitung: 16. Mai 2003, 13:52:20 Uhr von Database3
Hi,
kenne mich mit VBA nicht aus, aber das SQL-Statement macht mir etwas Kopfzerbrechen.  ???

Du selektierst alles aus der Tabelle 'DPLZ_Tab', wo das Feld in der Spalte DPLZ 'NULL' ist & ((?)AND) jetzt komme ich nicht mehr mit...
..soll Forms die Spalte bezeichnen,...

...für was seht das Ausrufezeichen (Ungleich? - !=),...

...wenn AdressTab.DPLZ eine Tabelle bezeichnet wirst Du vermutlich Probleme bekommen, denn eine WHERE-Klausel mit einer Vergleichs-Abfrage auf 2 Tabellen lautet:
...WHERE tabelle1.spalte != tabelle2.spalte, wobei die Werte der beiden Spalten in den Tabellen gleich sein müssen ...

...oder
SELECT *
FROM tab_DPLZ
WHERE spalte_BUNDESGEBIET IN
  (SELECT spalte_BUNDESGEBIET FROM tab_ORT, tab_STRASSE  
   WHERE ...);


... und am Ende muss Du das Semlikon (;) setzen, welches das Ende des Statements bezeichnet.

Gruss u. schönes WE  :D
Database3

PS: Sag mir bitte, was Du mit diesem Statement ausdrücken willst!

Mr.Ioes

16. Mai 2003, 16:47:26 Uhr #7 Letzte Bearbeitung: 16. Mai 2003, 16:55:02 Uhr von Mr.Ioes
Super dass Du dran bleibst Database3!

also eigentlich weiß ich von VBA und SQL ja auch nur, dass es dass gibt und hab´ deswegen mit diesen eigentlich grundlegenden Sachen schon so meine Probleme.

Also was ich oben geschrieben habe ist´n Vorschlag aus´nm anderen Forum. Aber ich meine die SQL-Abfrage macht schon Sinn, denn ich meine dass heißt:

Gib mir alles aus der Tabelle DPLZ_Tab, wo das Datenfeld in der Spalte PLZ gleich dem gerade in das Formular eingegebenen Wert ist. Also Forms = Formulare (die genaue VBA-Syntax, insbesondere dass mit den Ausrufezeichen versteh ich ja auch nicht).

Da dieses Feld mit einem eindeutigen Index belegt ist, kann als Ergebnis dieser Wert oder 0, bzw. nichts rauskommen. Wenn der Wert schon vorhanden ist, is´es gut und ich kann schon wieder raus aus der Routine (oder wie man das schreibt).

Also ich meine/hoffe, dass der Code bis dahin schon ok ist. Jetzt brauche ich nur VBA-Code um ACCESS zu erklären wie es in dem Fall dass dei PLZ noch nicht hinterlegt ist weitergeht, und zwar erstmal wie unten schon beschrieben:

if check = 0 Then '=Für den Fall, dass die Postleitzahl noch nicht in der DPLZ_Tab hinterlegt ist, dann ...

'soll ´ne InputBox - wenn möglich direkt mit 3 Eingabefeldern aufpopen. In den Feldern soll bereits der nächstliegende DPLZ-Datensatz hinterlegt sein (Bsp.: 50672 gibts noch nicht, aber 51065), und zwar 1. Ortsname, 2. Bundeslandkürzel und 3. Regierungsbezirk (diese Felder sind in der DPLZ_Tab zur jeweiligen PLZ hinterlegt, ob gefüllt ist ´ne andere Frage).

'Kleines Problem: Ortsname und Regierungsbezirk ist nur als ID der jeweiligen MasterTabellen hinterlegt (OrtsTab und RegBezTab). Im Gegensatz dazu ist in der BundeslandTab das Kürzel eindeutig und als Primarykey verwandt. Für eine sinnvolle Anzeige muss also auf den jeweiligen Datensatz anderen (Master-)Tabellen zurückgeriffen werden.

'Unterfall a): Wenn wie im obigen Bsp. der nächstliegende Postleitzahldatensatz die richtige Stadt und damit gleichzeitig das richtige Bundesland und den Regierungsbezirk anzeigt, dann will ich über einen - möglichst bereits fokussierten - OK-Butten die neue, gerade geprüfte PLZ als neuen Datensatz zusammen mit der OrtsID, dem Bundeslandkürzel und der RegBezID in der DPLZ abspeichern.

'Unterfall b): Der Ort wird (noch) nicht angezeigt, dann will ich die in der InputBox angezeigten Daten überschreiben können und dann ebenso über OK-Button den gänzlich neuen Datensatz in der DPLZ anfügen.

'Hier kann sich aber das Problem stellen, dass der Ort, den ich gerade zur neuen PLZ eingegeben habe, noch nicht in der OrtsTab hinterlegt ist. Hier taucht also wieder genau dasselbe Problem auf, dass ich aber wieder auf dem gleichen Wege - sozusagen geschachtelt - lösen können müsste.

'So und nun noch mal kurz zum Lösungsansatz dieser Aufgabe:
'Um die nächstliegende PLZ zu finden kann ich entweder eine neue (von mir hier sog.) unscharfe Abfrage starten (wohl der schellere Weg) oder über VBA mittels einer Schleife hoch- oder runterzählen lassen, bis die nächste PLZ gefunden ist.

'Das aufspringen der InputBox ist ein VBA-Standardbefehl, den ich eigentlich schnell in meinen Büchern finden müsste. Ich hab´s allerdings noch nie mit 3 Feldern gesehen.

'Ja und wie ich dem Programm im einzelen beibringe, wo es die jeweiligen Daten herholen und später anfügen soll, dass muss ich eben auch noch verstehen.

So dass reicht für´s erste.

Bis zu Deinem Statement Database3

Database3

Hi,
sorry, war beruflich verhindert weiter am Ball zu bleiben!

Konntest Du das Problem zwischenzeitlich selbst lösen od. sollen wir jetzt weitermachen??

Schöne Grüsse
Database3

Mr.Ioes

Hallo Database,

nein ich konnte mein Problem noch nicht lösen. Ein Freund hat mir zwar schon einen Vorschlag gemacht, aber der löst eigentlich nur das Problem mit den Postleitzahlen.

Ich selber hab´ im Monent auch wieder anderes zu tun und muss mich wohl erstmal für eine Übergangszeit von einigen Monaten mit einem gekauften Hausverwaltungsprogramm über Wasser halten.

Ich schlage vor, dass ich sobald ich mich wieder ein paar Stunden mit dem Problem beschäftigen konnte, hier wieder meine dann etwas aktuallisierte Fragestellung reinstelle.

Danke für Dein Angebot!