Hallo, ich habe folgendes Problem! Eine Access Tabelle mit den Spalten Lieferant, Lieferant1, Lieferant2 möchte ich zusammenfassen in eine Tabelle mit nur einer Spalte Lieferant-Anfrage in der die Werte aus Lierant, Lieferant1, Lieferant2 als Zeilen aufgeführt sind. Software ist Access 2003. Ich hoffe mir kann jemand helfen!!
mfg
Klaus
Office - Word, Excel und Co. 9.753 Themen, 41.606 Beiträge
Irgendwie steh ich auf dem Schlauch. kannst du bitte versuchen, etwas ausführlicher und verstäöndlicher zu erklären, was du möchtest?
Volker
Hi Klaus,
Ich kann dir nicht sagen, ob es hierfür eine Access-interne Lösung gibt, dafür kenne ich mich damit zu wenig aus. Unter Zuhilfenahme von Excel klappt es m.E. auf jeden Fall.
Zunächst markierst du den kompletten Inhalt der Access-Tabelle und kopierst diesen in ein leeres Excelsheet. Dann kopierst du den kompletten Inhalt der Spalte Lieferant2 unter das Ende von Lieferant1, danach die komplette Spalte Lieferant1 unter Lieferant. Die Spaltenüberschriften lässt du natürlich weg. Außerdem solltest du Strg-X statt -C benutzen.
Jetzt hast du alle Lieferanten in nur einer Spalte, der Spalte A, die restlichen Spalten sollten jetzt leer sein, wenn nicht, einfach löschen. Nachdem du die nicht benötigten Arbeitsblätter 2 und 3 gelöscht hast, speichere das Excel-Sheet z.B. unter dem Namen Lieferanten.xls.
Wenn du jetzt die Lieferanten.xls mit Access öffnest, müsstest du eigentlich am Ziel deiner Wünsche sein.
CU
Olaf
Olaf, dein Versuch in allen Ehren, aber bei so einer "Bastellösung" dreht sich mir der Magen um ;) auch weil deine Lösung ab einer gewissen anzahl Datensätzen schlicht nicht mehr praktikabel ist (mach das mal, wenn diese Tabelle 100 Datensätze hat, bei denen alle 3 Felder gefüllt sind)
Wenn er wirklich jetzt alle Lieferanten in nur eine Spalte haben möchte, dann kann er das selbstverständlich mit einer Access-internen Lösung machen, das Stichwort heisst hier "Anfügeabfrage".
Allerdings wird er davon 3 Stück brauchen bzw. die einmal gebaute 3x mal ausführen müssen - nämlich jeweils einmal für jedes "Lieferant"-Feld in der Quelltabelle.
Folgendes müsste tun (achtung "Luftcode")
eine neue Query öffnen, in die SQL-Ansicht wechseln und da schreiben:
INSERT INTO tabLieferanten(Lieferant-Anfrage)
SELECT Lieferant
FROM tblLieferanten_alt;
"tablieferanten" muss er durch den Namen seiner *neuen* Tabelle ersetzen, "tblLieferanten_alt" durch den Namen seiner bisherigen Tabelle.
Dann auf das rote Ausrufezeichen in der Symbolleiste klicken und gut ist.
Danach das "Lieferant" hinter "SELECT" durch "Lieferant1" ersetzen, wieder das "!" drücken und zum guten Schluss statt "Lieferant1" noch "Lieferant2" schreiben und wieder "!" drücken.
Das sollte es gewesen sein.
Eines sollte allerdings in der neuen Tabelle vorhanden sein: eine weitere Spalte, genannt z.B. LieferantID, Typ "Autowert", Eigenschaften: indiziert = ja (keine duplikate)
Volker
Und wenn die Tabelle 20.000 Datensätze hätte - so what! Er soll sie ja nicht abschreiben.
Mit Strg-Shift-CursorDown kann ich z.B. ab Zeile 2 bis ganz nach unten alle Datensätze markieren um sie in eine andere Spalte zu kopieren - ob das viele oder wenige sind, spielt ja keine Geige.
Deine Lösung ist natürlich insofern besser, als du die Access-Ebene dabei nicht verlassen musst.
CU
Olaf
Und bei 23k Datensätzen kommst du mit deiner lösung nicht mehr klar, weil du hier die Grenzen von Excel03 sprengen würdest :-P
Zudem hat meine Lösung eine weiteren Vorteil:
wenn er sowas öfters machen muss, lässt sie sich problemlos automatisieren, in dem er drei queries erstellt und speichert: für jedes zu übertragende Feld eine.
Dann schreibt er sich eine VBA-Routine, die diese Queries nacheinander ausführt, erstellt ein kleines Formular mit einem Button drauf und weist die Routine diesem Button zu (Ereigniseigenschaft "Beim Klicken").
Jedesmal wenn eine Übertragung notwendig wird ruft er jetzt das Formular auf, klickt den Button - das wars.
Volker
PS: meine Anmerkung war keineswegs abwertend gemeint. ich bin bei solchen Dingen nur etwas "eigen", als jemand, der sich mit Datenbanken allgemein und Access im speziellen doch einigermaßen gut auskennt ,)
Hallo Neanderix und Olaf,
danke für Eure Tips. Grund für diese Frage ist ein Anfrage-Formular indem ich mehrere Lieferanten anwählen will um einen Artikel anzufragen. Das ganze soll dann per Button als Anfrage versendet werden. Später will ich dann die erhaltenen Preise eintragen und vermerken wer den Auftrag erhalten hat.
Hat noch jemand Tips,dann her damit!!
Gruß
Klaus
Mit lieferanten und Artikeln hast du den klassiker einer sogenannten n : m Beziehung vorliegen.
Bei solcher Art Daten macht es keinen Sinn, in die Artikeldatei n Felder für die Lieferantennummern vorzusehen, das wiederspricht dem Normalisierungsgedanken.
Teile diese Tabelle auf in eine, die Nur die Artikel enthält und erstelle eine weitere mit den Feldern
Artikelnummer
Lieferantennummer
Das Feld "Artikelnummer" aus deiner Atikeltabelle verweist auf das gleichnamig Feld in dieser neuen Tabelle. Stell um "Beziehungen" Fenster die Beziehung so ein, dass die "1-seite" der Beziehung in der Artikeltabelle liegt, die "n-Seite", erkennbar an der liegenden 8, in dieser neun Tabelle.
Dasselbe machst du mit dem Feld "lieferantennummer"
*beide Felder zusammen* bilden den Primärschlüssel dieser Tabelle
An die Daten kommst du jetzt mit einer Abfrage, und das sogar sauber und ohne Tricks ;)
Da ein Beispiel mehr sagt, als tausend Worte hier ein link zu einer Beispieldatei für Access 2003 (von Access-home.de)
http://www.access-home.de/dlfiles/dbs/03nzum.zip
Falls du Acces 97 oder Access XP verwendest: auch dafür gyps dort Beispiele.
Volker
Danke Volker,
ich werde das Ganze mal probieren. Gibt es ein Buch welches Access Programmierung gut beschreibt? Schaue mir gerade das Buch Access Visual Basic "Schritt für Schritt" an.
Gruß
Klaus
Ja, gibt es:
Suche bei den diversen Online-Buchhändlern mal nach den Access-Büchern von Ralf albrecht und Natascha Nicol.
Und wenn du etwas fortgeschrittener bist, solltes du dir das "Access Entwicklerbuch" von André Minhorst zulegen.
Letzteres kannst du auch Online einsehen:
http://www.access-entwicklerbuch.de/2007/