Import aus Excel / Daten in Zeilen oder Spalten

Hallo,

PostgreSQL wird, wenn ich es richtig verstehe, lediglich zum Speichern von Daten genutzt. Zum Auswerten oder zur Ansicht wird ein weiteres Produkt benötigt?

Bei Access habe ich die DB in zwei Dateien geteilt. Wo ist da der Unterschied? Und dort kann doch auch ein SQL-Server genutzt werden.

Ich glaube wir denken in unterschiedlichen Dimensionen. Es handelt sich um kleine private Datenbanken und nicht um professionelles Projekt mit vielen Benutzern und Anwendern.

Wie schon geschrieben trage ich täglich etwa 50 Werte ein. Lästig ist dabei nur, dass ich dies für Excel und Access mache und die Werte einmal als Spalten und einmal als Zeilen benötige. Eine Lösung zum Konvertieren habe ich mit "Mtrans" gefunden. Fehlt mir nur noch die Einfüge-Abfrage für Access. und ich hätte meinen Aufwand halbiert.
 
Werbung:
Ich glaube wir denken in unterschiedlichen Dimensionen.
Jein.
Access spricht auch SQL, dazu bietet es Formulare, Reports, VBA, ..

Der Nachteil von Access ist neben den Kosten, dass es proprietär ist, (also man weiß nie, was die nächste Version (nicht mehr) bringt. Vor allem aber:
Es ist File basiert, deine 1 oder 2 mdb files für Daten und Formulare.

Ein SQL Server wie Postgres bietet idr "nur" Datenhaltung, viele auch Programmierung, das aber auf einem anderen Level (Dimension), als Access. Tatsächlich ist ein professioneller DB Server rein auf die Datenmenge bei Dir bezogen ein Overkill. Aber:
Das Prinzip ist es nicht.
Ein Datenbankserver kommuniziert über ein Protokoll mit dem Client und empfängt / schickt immer nur wenige, benötigte Daten. So kann er remote sehr gut funktionieren.
Keiner dieser Server bietet aber selbst Formulare usw. an.

Um mit Access zu arbeiten, musst Du diese MDB Dateien im Zugriff haben. Lokal / in der Firma (meist) kein Problem. Alles andere wird schwierig.

Du kannst PHP nehmen, CYPEX (da kenne ich die Lizenz und die Kosten nicht) oder dutzende andere Verfahren.

Ein Kompromiss ist die Kombination von Access als Frontend und die Arbeit mit verknüpften Tabellen. Du hängst also den DB Server hinter Access.

Ich kenne Deine Skills und Deine Bereitschaft zu Veränderung nicht. Du musst schon einige Zeit da rein stecken. Grundlagen lernen und die konkrete Umsetzung für Dich.

Aber andererseits hast Du dann diese Probleme mit der Transformation, Dateneingabe in Excel usw. nicht mehr. (Ich weiß nicht, wieviel Zeit Du da rein steckst)
Wenn Du im Urlaub oder sonstwo ein Funktionsdefizit durch die derzeitige Lösung hast. Oder durch Doppeleingabe Inkonsistenzen oder Fehler in Deinen Daten hast, kann ich den "Preis" auch nicht beziffern.

Hier gibt es von Postgres ein Paper zu Access (erster google Treffer):
Vielleicht hilft es Dir, das alles einzuschätzen.

Was auf jeden Fall passieren wird, wenn Du Access behälst und eine richtige DB dran hängst, Access Abfragen werden u.U. nicht mehr funktionieren, weil es sich nicht so gut an SQL Standards hält.
 
Hallo,
vielen Dank für die ausführliche Antwort.

Grundsätzlich bin ich immer bereit für zukunftsorientierte Veränderungen, auch wenn es mit größerem Aufwand verbunden ist.

In diesem Fall würde der Aufwand meines Erachtens in keinem Verhältnis zum Nutzen stehen. Ich bräuchte ein neues Frontend (da müsste viel programmiert werden) und meine Daten liegen auf einem externen Server (halte ich eher für einen Nachteil).

Es sind eh nur kleine DBs, Excel hat aktuell 83000 KB und die beiden Access Dateien jeweils rund 34000 KB. Und alles immer nur nur für 1 Anwender.

Der tägliche Aufwand zur Datenpflege (ca. 50 Werte) ist in wenigen Minuten erledigt. Lediglich nach einem Urlaub wird es eintönig. Da fallen nach nur 4 Wochen schon 1000 Werte an. In Excel mit Copy und Paste schnell erledigt. Nur Access macht mir da Probleme, da ich die Daten in Spalten und nicht in Zeilen benötige. Wie schon oben geschrieben habe ich dazu mit "Mtrans" eine Lösung zur Konvertierung gefunden.

Nun muss ich noch eine Einfüge-Abfrage zum Import der Daten nach Access erstellen.
 
Also nochmal zum Grundproblem:

- Die Datenhaltung in Access ist korrekt normalisiert, die in Excel nicht.
- PIVOT bzw. in diesem Fall UNPIVOT ist das richtige Stichwort um aus den Excel-Daten einen Import für Access machen zu können.
- Access unterstützt kein PIVOT / UNPIVOT oder dynamisches SQL. Daher sollte man versuchen in Excel ein UNPIVOT mit Formeln in ein weiteres Tabellenblatt zu machen.
- Man kann in Excel schon halbwegs brauchbare Datenerfassungs-Masken bauen, auch einiges an Feldern sperren und andere Sicherheiten einbauen.
- Ganz gegen Dummheit kann man sich da eher nicht schützen aber es ist nicht so schrecklich, das es keiner machen würde.
 
Hallo,

- Die Datenhaltung in Access ist korrekt normalisiert, die in Excel nicht.
- PIVOT bzw. in diesem Fall UNPIVOT ist das richtige Stichwort um aus den Excel-Daten einen Import für Access machen zu können.
- Access unterstützt kein PIVOT / UNPIVOT oder dynamisches SQL. Daher sollte man versuchen in Excel ein UNPIVOT mit Formeln in ein weiteres Tabellenblatt zu machen.

Genau das scheint mein Problem zu sein.

Wie schon zu Beginn geschrieben liegen die Werte zum Datum in Excel in einer Zeile. Eine Umwandlung von Zeile zu Spalte habe ich mit "Mtrans" hinbekommen.
Ich hatte angenommen, dass ich die Werte daraus nach Access importieren könnte und anschließend mit einer Anfüge- oder Aktualisierungsabfrage in meine Tabelle übernehmen könnte.

Leider beiße ich mir daran die Zähne aus.


Screenshot (208).png

Ob die Aufbereitung oder Umwandlung der Daten oder Tabellen in Excel oder Access erfogt ist mir egal. Wichtig ist nur, dass ich die Daten zum Datum in Excel eintragen kann.

Vielen Dank für Eure Hilfe
 
Also du hast ein normalisiertes Ergebnis durch mtrans(), das müsste dann aussehen wie in deinem Bild die Tabelle "Tabelle in Access". Das willst du jetzt mit SQL abgleichen oder soll das einfach zusätzlich neu in SQL geschrieben werden?

Machst du das mittels SQL aus Access heraus und greifst auf die Excel-Datei zu? Das müsste gehen, ich bin aber auch kein Access Profi. Man hat dann zwei Tabellen und kann die Daten aktualisieren, anpassen oder löschen. MSSQL kennt dafür MERGE, allerdings halte ich da wenig von und ich glaube auch nicht, das Access das kann.

Ich kann dir in SQL mal ein Beispiel aus einer Funktion geben, die Tabelle A nach A_clone "spiegelt". Dabei kann sich alles bis auf der PK ändern. Wenn die Daten einfach nur zusätzlich sind, braucht man kein UPDATE oder DELETE.
Code:
    INSERT INTO A_clone([rechid],[auftrnr],[aj],[tanummer])
    SELECT    s.[rechid],
            s.[auftrnr],
            s.[aj],
            s.[tanummer]
    FROM    A s
    WHERE NOT EXISTS (    SELECT    1/0
                        FROM    A_clone t
                        WHERE    t.[aj] = s.[aj]
                        AND        t.[auftrnr] = s.[auftrnr]
                        AND        t.[tanummer] = s.[tanummer]
                        AND        t.[rechid] = s.[rechid] )

    DELETE    A_clone
    FROM    A_clone
    LEFT JOIN A s
    ON        A_clone.[aj] = s.[aj]
    AND        A_clone.[auftrnr] = s.[auftrnr]
    AND        A_clone.[tanummer] = s.[tanummer]
    AND        A_clone.[rechid] = s.[rechid]
    WHERE    s.[aj] IS NULL
t = target, s = source
 
Hallo,

vielen Dank für Deine Antwort.

Leider genau anders herum.
Machst du das mittels SQL aus Access heraus und greifst auf die Excel-Datei zu?

Die Daten gebe ich in Excel ein. Ich habe leider nicht immer Zugriff auf Access.

Bevorzugen würde ich das in der Form "Werte in Zeile" machen.
In Excel kann ich mit der Funktion "Mtrans" das Umwandeln in "Werte in Spalte". (Wäre auch andersherum möglich)

Beide Tabellen kann ich nach Access importieren.
Die in Access vorliegenden Tabellen sehen dann aus wie die entsprechenden Tabellen in Excell.

Die für die Daten benutzte Access-Tabbelle hat allerdings mehr Datensätze. Ein Datensatz enthält für jedes Produkt das Datum und den Wert.

Ich finde keine Lösung, wie ich die Datensätze aus der importierten Tabelle in die Access-Tabelle entweder einfüge, oder aktualisiere.

So etwa habe ich mir das vorgestellt, funktioniert aber nicht, vermutlich weil die Tabellen einen andern Aufbau haben.

INSERT INTO tblXY ( IdfProdukt, DatumWert, Wert )
SELECT tblImport.IdfProdukt, tblImport.DatumWert, tblImport.Wert
FROM tblImport;
 
Die Daten gebe ich in Excel ein. Ich habe leider nicht immer Zugriff auf Access.
Die Daten kannst du ja auch in Excel eingeben. Du gibst der Datei einen festen Namen und Ablageort. Wenn du dann Zugriff auf Access hast, startest du Access und feuerst deinen Import-Code ab.

Ich glaube das geht, könnte es jetzt aber nur aus MSSQL heraus.
Bevorzugen würde ich das in der Form "Werte in Zeile" machen.
In Excel kann ich mit der Funktion "Mtrans" das Umwandeln in "Werte in Spalte". (Wäre auch andersherum möglich)
Leider ist sowohl "Werte in Zeilen" als auch "Werte in Spalte" nicht in einer Normalform, sondern eine Form von PIVOT, nur eben gedreht.

Wenn die Anzahl der Werte so klein ist und fix bleibt, ist das kein Problem. Dann musst du einfach nur mehr Code erstellen für mehr Datensätze aber das ist simpel.
Beide Tabellen kann ich nach Access importieren.
Die in Access vorliegenden Tabellen sehen dann aus wie die entsprechenden Tabellen in Excell.
Ja das ist nicht so geil. Dann ist ja dein Spaltenname ein Datum, das wird mit Access nicht klappen, höchstens mittels Visual Basic.


Ich dachte bei dem ganzen an sowas hier:
Scheint aber wirklich nicht so einfach. Auf jeden Fall solltest du versuchen das Datum aus der Spalten Überschrift von "Werte in Spalten" als Datensatz zu importieren. zusätzlich vielleicht noch eine Zeilennummer, dann kann man sich SQL-Code zusammen stricken der daraus das gewünschte Format macht.

Eigentlich bin ich aber immer noch der Meinung das Excel das UNPIVOT machen sollte. mtrans() ist dann nicht geeignet, aber es geht:
 
Hallo,

@ukulele

Entpivotieren ist Wohl das Zauberwort. Leider bekomme ich es nicht auf die Reihe :-(

Für die Hilfe von Microsoft ist mein Englisch leider nicht ausreichend.

Ich benutze Office Excell 2007

Im Anhang eine Excell-Datei. Darin ist ein Beispiel wie ich die Tabelle für Access benötige. Für die Datenherkunft würde ich gerne die bevorzugte Tabelle benutzen. Alternativ wäre auch die Tabelle mit der möglichen Datenherkunft nutzbar.

Für Eure Hilfe im Voraus besten Dank.
 

Anhänge

  • 2024 04 19 Pivot.zip
    7,5 KB · Aufrufe: 1
UNPIVOT = "entpivotisieren" und der Microsoft Artikel ist doch sogar auf Deutsch (wenn auch MS-Deutsch).

Deine Beispiel-Tabelle kannst du entpivotisieren.
- öffnen in Excel
- Klick in eine Zelle
- Daten \ Abfragen & Verbindungen \ Aus Tabelle/ Bereich
- In dem Fenster dann nochmal den Bereich festlegen (vorsicht bei mehrzeiligen Überschriften, einfach nur eine Zeile nehmen)
- Dann kommt der Powerquery Editor
- Transformieren \ Beliebige Spalte \ Spalten entpivotieren \ Andere Spalten entpivotieren
- Start \ Schließen und Laden

Ich weiß nicht genau in wie weit sich das automatisieren lässt, die Abfrage bleibt scheinbar bestehen.
 
Hallo,
UNPIVOT = "entpivotisieren" und der Microsoft Artikel ist doch sogar auf Deutsch (wenn auch MS-Deutsch).
Vielen Dank für Deine Antwort.

Einige Links bezogen sich auf englische Beiträge. Und die Microsoft-Hilfe bezieht sich auf neuere Office-Versionen. Daher habe ich geschrieben, dass ich Excel 2007 benutze. Und darin gibt es den Powerquery-Editor anscheinend noch nicht.

Alles was ich finde, kann ich in der Version leider nicht verwenden.

Ich finde immer wieder Hinweise, dass man es auch mit VBA oder SQL in Access möglich sein soll. Leider finde ich nirgendwo einen entsprechenden Lösungsansatz.

Access-Abfragen bauen doch auch auf SQL auf. Kann man eine Excel-Tabelle nach Access importieren, dort entpovitieren und anschließend mit einer Aktualisierungsabfrage die Daten in die entsprechende Access-Tabelle einfügen?
 
Einige Links bezogen sich auf englische Beiträge. Und die Microsoft-Hilfe bezieht sich auf neuere Office-Versionen. Daher habe ich geschrieben, dass ich Excel 2007 benutze. Und darin gibt es den Powerquery-Editor anscheinend noch nicht.

Wie wäre es mit einem aktuellen Excel, welches auch noch Support hat?

Listing
Start Date​
Mainstream End Date​
Extended End Date​
Microsoft Office 2007
Jan 27, 2007​
Oct 9, 2012​
Oct 10, 2017​
 
Werbung:
Also Access kann meines Wissens nach kein PIVOT oder UNPIVOT über SQL, auch nicht in der aktuellsten Version. Du hast definitiv die falsche Software für deine Anforderungen. Du kannst das höchstens in VBA programmieren, da kann ich nicht helfen.

Alternativ kannst du z.B. die Datenbank wechseln oder dein Excel oder deine Eingabemethode.
 
Zurück
Oben