Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

FeldformatÄndern

Begonnen von ACCESSLER, November 09, 2016, 15:12:33

⏪ vorheriges - nächstes ⏩

ACCESSLER

Hallo Profis,

nach dem Importieren kundenseitiger Exceltabellen muss ich aus Textstrings die Artikelnummer in ein neues Feld einlesen.
Dieses Feld [ArtNr] muss danach mit LongInteger formatiert werden.
Versuche mit AlterTable [1] AlterColumn [ArtNr] CINT haben bisher zu keinem brauchbaren Ergebnis geführt.

Gibt es ein Beispiel, das diese Abwicklung erklärt?

Danke für Tipps.

markusxy

#1
Das ist der falsche Weg.
Erstell eine Tabelle mit den richtigen Eigenschaften und füge die Daten dort ein.

LG Markus

Beispiele mit ALTER TABLE findest du auch in der VBA Hilfe.
Mit AlterTable [1]  kann der Interpreter natürlich nichts anfangen.

ACCESSLER

Danke für den Ratschlag, ich mache es momentan "von Hand" und da funktioniert es auch. Ich will lediglich den gesamten Ablauf automatisieren und da komme ich auch mit der VBA-Hilfe nicht so richtig weiter, deshalb habe ich um ein Beispiel gebeten. Die Tabelle heißt übrigens [1].

Darf ich deshalb nochmal fragen?


markusxy

Prinzip: ALTER TABLE table_name ALTER COLUMN column_name datatype

Datatype wäre dann long.

DF6GL

Hallo,

wenn Du ein konkretes Beispiel, bzw. eine annähernd passende Lösung möchtest, dann muss Du auch zunächst konkrete Beispiele zu den Tabellenfeldern (bzw. Excel-Zellen) und Feldinhalten geben.....

DF6GL

Hallo,


mit Alter Table ist wohl keine Teil-String-Extraktion möglich.

Dazu braucht es eine Aktualisierungsabfrage und einen Extrahierungs-Algoritmus....



Currentdb.Execute "Update tblTabelle set ArtNr = Mid([TextString],5,8)"

ACCESSLER

 :)Ich versuch es nochmal:
Im ersten Schritt importiere ich eine Exceltabelle in Access, in die Tabelle 1.
Im zweiten Schritt ergänze ich diese Tabelle um ein Feld "ArtNr."
Aus dem Feld KNDBESTNR z.B..(AB4711DE) der Exceltabelle extrahiere ich lediglich die Zahlen. .
Dieser dann im Feld "ArtNr" eintragener String (4711) muss danach als LongInteger umbenannt werden, damit ich die Daten mit unseren Stammdaten updaten kann.

Es geht also "nur" noch darum das Textfeld "ArtNr" per SQL auf LongInteger "umzupolen", das will mir nicht gelingen.

Vielleicht gibt es ja noch den entscheidenden Tipp.

Danke für die Geduld, ich weiß die Profis lachen sich fast tot wegen solchen Lappalien, aber als Unkundiger ist dies halt ein ungelöstes Problem.



Beaker s.a.

Hallo,
ZitatIm ersten Schritt importiere ich eine Exceltabelle in Access, in die Tabelle 1.
Im zweiten Schritt ergänze ich diese Tabelle um ein Feld "ArtNr."
Warum hat die Tebelle nicht von Anfang an ein Feld ArtNr vom Typ Long?
ZitatAus dem Feld KNDBESTNR z.B..(AB4711DE) der Exceltabelle extrahiere ich lediglich die Zahlen. .
Wie machst du das?
ZitatDieser dann im Feld "ArtNr" eintragener String (4711) muss danach als LongInteger umbenannt werden
Warum von hinten durch die Brust ins Auge? Wenn du das Feld also so hast, wie du
es brauchst (s.o.), kannst du doch auch den String aus/in deiner unbekannten Funktion
direkt in einen Longwert wandeln , und speichern.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

MzKlMu

Hallo,
Exceltabelle verknüpfen. Access Tabelle vorfertigen mit den richtigen Datentypen. Dann mit einer Anfügeabfrage die Daten in die Accesstabelle übertragen. In der Anfügeabfrage können auch die Anpassungen vorgenommen werden. Eine Typumwandlung ist damit überflüssig.

Das ist übrigens der übliche Weg Daten zu importieren wenn Datenanpassungen notwendig sind.

Gruß Klaus

ACCESSLER

Ihr habt ja so recht!  Aber:
Ich bekomme 40-50 von diversen Firme unterschiedlich aufgebaute Exceltabellen und muss diese nach dem Update wieder in der gleichen Struktur zurück geben. Es ist also unmöglich für alle unterschiedlichen Exceltabellen ein passendes Pendant aufzubauen.

Übrigens extrahiere ich mit folgender Aktualisierungsabfrage:
UPDATE KundenArtikel2016 SET KundenArtikel2016.ArtNr = Left(Replace([ArtNr],"-",""),8);

Vielleicht könnte ich hier bereits das Format auf LongInteger setzen - aber wie?

Schon mal vielen Dank für die Ideen.

DF6GL

Hallo,




Zitatmuss diese nach dem Update wieder in der gleichen Struktur zurück geben.

Dafür spielen doch die Access-Tabellenfeld-Datentypen keine Rolle...

ZitatIm zweiten Schritt ergänze ich diese Tabelle um ein Feld "ArtNr."

WIE wird das gemacht?


Aus dem Feld KNDBESTNR z.B..(AB4711DE) der Exceltabelle extrahiere ich lediglich die Zahlen. .

steht im Gegensatz zu (zumindest versteh ich das nicht..):

ZitatÜbrigens extrahiere ich mit folgender Aktualisierungsabfrage:
UPDATE KundenArtikel2016 SET KundenArtikel2016.ArtNr = Left(Replace([ArtNr],"-",""),8);

Interpretierend würde ich eher sagen:

UPDATE KundenArtikel2016 SET KundenArtikel2016.ArtNr = Left(Replace([KNDBESTNR],"-",""),8)



Dieser dann im Feld "ArtNr" eingetragener String (4711) muss danach als LongInteger umbenannt werden, damit ich die Daten mit unseren Stammdaten updaten kann.[/quote]


Wenn dieses Feld eh nachträglich (irgendwie) erstellt wird, dann benutz gleich den Datentyp Long Integer

Oder füg ein weiteres Feld (lngArtNr) in die Tavelle ein mit Datentyp Long und setz eine Aktualisierungsabfrage darauf an:


UPDATE KundenArtikel2016 SET lngArtNr = [ArtNR]


Bei besserer Kenntnis des gesamten Vorgangs wäre sicher eine optimalere Lösung zu finden...

Lachtaube

CLng kann zur Umwandlung verwendet werden.

Warum eine Artikelnummer aber als Long Integer in einer Datenbank landet, ist mir rätselhaft.

Es entsteht für mich dabei der Eindruck, als wolltest Du die Artikelnummer in mathematischen Termen weiterverwenden.
Grüße von der (⌒▽⌒)

ACCESSLER

Danke, ich komme nun wieder einen Schritt weiter.
Zur Erklärung:
Die extrahierte Nummer muss deshalb LongInteger sein, weil ich die Bestellnummer mit einer eingebundenen Datenbank aus einer AS400 verknüpfen muss und dort eben nur der Formattyp LongInteger funktioniert.

Ich hab das schon bemerkt, ihr würdet alles anders machen, aber es gibt eben Bedingungen, die man selber nicht beeinflussen kann. Eigentlich sind es weitere Probleme beim extrahieren der ArtNr. aber das war nicht das Thema.

Ich habe lediglich eine Lösung gesucht, wie ich z.B aus einem Textfeld 10-7-12345GRA die Nummer 10712345 als LongInteger extrahieren kann. Wobei die verklausulierte ArtNr bei anderen Kunden ganz anders aussehen kann.

Da muss ich jetzt einfach einmal einiges ausprobieren, aus den vorgegebenen Tipps.

Danke an alle und bis bald.

markusxy

Zitat von: ACCESSLER am November 09, 2016, 21:14:18
Ich hab das schon bemerkt, ihr würdet alles anders machen, aber es gibt eben Bedingungen, die man selber nicht beeinflussen kann.

Das liegt vermutlich daran, dass sich die anderen auskennen, du aber das Problem nicht richtig darstellen konntest.

Beaker s.a.

Hallo,
ZitatIch habe lediglich eine Lösung gesucht, wie ich z.B aus einem Textfeld 10-7-12345GRA die Nummer 10712345 als LongInteger extrahieren kann. Wobei die verklausulierte ArtNr bei anderen Kunden ganz anders aussehen kann.
Am Anfang wolltest du wissen, wie man einen Felddatentyp ändert, -
hatte ich jedenfalls so verstanden.
Für solche Extrakte eignet sich wohl die Anwendung von "Regular
Expressions". Leider kann ich dir dabei nicht weiterhelfen, aber zu
dem Thema findest du jede Menge Forenbeiträge. Ansonsten ist
Eberhard vielleicht so nett und sagt dir was dazu, - er ist damit
bestens vertraut.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)