Anfänger-Infos gesucht

kaltwasserseife

Grünschnabel
Hallo, ich habe viel mit Datenbanken zu tun, die importiert/exportiert werden müssen in andere Anwendungen. Dabei stosse ich immer wieder auf Transformations-Probleme, für deren Lösung mir allüberall Visual Basic empfohlen wird. Mit FreeBasic habe ich schon einmal etwas gemacht... aber das ist wohl für mich aktuell unbrauchbar.
Die Datenbankprogramme (Warenwirtschaftssysteme, Abrechnungen...) laufen auf Win95, Win98, Win2K und XP, teils in DOS-Boxen (jajaja... alter Kram, geht aber nicht anders)
Jetzt habe ich ein paar ANFÄNGER-Fragen:
Eine schlichte Einführung in VB? Brauche ich VB? VBA? VBnet? VBscript?
Problemstellung:
Eine Datenbank mit etwa 6000 Datensätzen soll automatisch in allen Datensätzen bearbeitet werden, um in eine andere Applikation eingelesen zu werden.
Das steuere ich zur Zeit mit einer Batch-Datei, mit einem Klick wird ein Export aus der Quelle gestartet, darauf ein Verarbeitungsprogramm (convert.com), daraufhin wird im Zielprogramm die alte Datenbank gesichert, der Importablauf gestartet, die neuen Dateninhalte gesichert und an andere Ziele weiterverteilt.
Alles sehr einfach gehalten mit copy und move usw.

Jetzt habe ich aber eine weitere Applikation zu füttern, die dieselben Daten "anders" braucht.

Die Klippe ist ein Datenfeld mit EAN8 oder EAN13-Codes, also den Barcodes. Die sind ja als 7+1 oder 12+1 Ziffern abgelegt, wobei die "1" das Checkdigit ist. Zur Identifikation reichen die 7 und 12 Ziffern, das Checkdigit wird über eine Prüfformel erstellt und soll die Korrektheit der CodeLesung bei Scannernutzung prüfen.

In der Quelle fehlen die Checkdigits! Für die weitere Applikation sind die aber notwendig, das ist nicht zu umgehen.
Also müssen in ALLEN Datensätzen diese Checkdigits im Feld EAN errechnet und angehängt werden.

Mir wurde diese Formel empfohlen, aber weiter komme ich nicht:
=C4&(ROUNDUP(((MID(C4,2,1)+MID(C4,4,1)
+MID(C4,6,1)+MID(C4,8,1)+MID(C4,10,1)+MID(C4,12,1))*3)
+(MID(C4,1,1)+MID(C4,3,1)+MID(C4,5,1)+MID(C4,7,1)
+MID(C4,9,1)+MID(C4,11,1)),-1)-(((MID(C4,2,1)+MID(C4,4,1)
+MID(C4,6,1)+MID(C4,8,1)+MID(C4,10,1)+MID(C4,12,1))*3)
+(MID(C4,1,1)+MID(C4,3,1)+MID(C4,5,1)+MID(C4,7,1)
+MID(C4,9,1)+MID(C4,11,1))))
 

Zvoni

Erfahrenes Mitglied
Ob du dafür VB brauchst (Welcher "Flavour" auch immer)? glaube nicht, ist aber abhängig von den Antworten auf folgende Fragen:
1) Wie exportiert ihr derzeit die Daten aus den "alten" Datenbanken?
2) Was sind das für Datenbanken? Wenn ich DOS lese, muss ich sofort an dBase denken.
3) Kannst du mal diese unübersichtliche Excel-Formel in klarer Mathematik hier darstellen?
Von mir aus auch auf ein Blatt Papier geschrieben, eingescannt, und dann hier eingesetzt. Ich sehe nämlich ein ROUNDUP, aber nirgends eine Division.

Rein theoretisch müsste der Export direkt per SQL gehen (in eine CSV), und während dem Export könnte die Formel schon angewendet werden, um dann in der Ziel-CSV die "anderen" Daten zu haben.
Dann wäre es in der Ziel-Datenbank ein simpler Import
 

kaltwasserseife

Grünschnabel
Danke für die Antworten.

An Zvoni:
die Formel habe ich so "bekommen", nicht selbst gebaut. In meinem Excel-Sheet funktioniert sie auch nicht, sie bleibt als Formel stehen.
Meine Warenwirtschaft exportiert zwar als CSV, aber mit sehr begrenztem Formelbetrieb. Es ist zwar irgendwie (als ACCESS-Bank) SQL-kompatibel, aber ich scheitere oft mit besonderen Funktionen, wenn ich die in den Export-Prozess einbauen will.
Für die schon lange funktionierende Zielanwendung habe ich ein paar Kleinigkeiten dazwischen gebaut. Klappt soweit, sind nur Zeichenersetzerei-Funktionen, also alphanumerische Werte in rein numerische oder so.

Die Quelle ist also eine CSV, mit Kopfsatz (1Zeile) notwendig. Ab Zeile 2 müssen alle 7er- oder 12-Codes in 8 und 13 umgewandelt werden und am besten in dasselbe Feld gesetzt werden. Wenn das Überschreiben des Quellfeldes nicht gut geht, kann ich ein unbenutztes Feld im selben Satz dafür misbrauchen.

Das alles soll automatisch gehen, also eine BAT aufrufen, die alles durchkommandiert.
 

Zvoni

Erfahrenes Mitglied
Hmm, wenn ich das richtig lese: Ist der Ziel-Barcode (in deinem Fall 7+1=8) gerade, muss beginnend bei N1 mit 3 (im Wechsel mit 1) multipliziert werden, ist es ungerade (12+1), beginnend mit 1 (im Wechsel mit 3).
Das ist reine Mathematik.
Ist in Excel/VBA ziemlich einfach.
Hast du so ein Beispiel-CSV (auch anonymisiert)?
 

kaltwasserseife

Grünschnabel
Hier ist die Quell-CSV:
Es soll einfach die Prüfziffer drangehängt werden, am Anfang stehen EAN12(+1), am Ende noch ein paar EAN7+1, kann beides durcheinander vorkommen.

Handle,SKU,Name,Category,Sold by weight,Option 1 name,Option 1 value,Option 2 name,Option 2 value,Option 3 name,Option 3 value,Default price,Cost,Barcode,SKU of included item,Quantity of included item,Track stock,Available for sale [Kriemhild-Mühle],Price [Kriemhild-Mühle],In stock [Kriemhild-Mühle],Low stock [Kriemhild-Mühle],Available for sale [Markt 1],Price [Markt 1],In stock [Markt 1],Low stock [Markt 1]
bioladen*deutsch,W298031,bioladen*deutscherAkazienhonig ,,N,,,,,,,,,8.79,403562610195,,,N,Y,,,,Y,,,
China Grüntee Se,X2492-E,China Grüntee Sencha,,N,,,,,,,,,4.75,401127482492,,,N,Y,,,,Y,,,
De Brocken;,KMNL1001,De Brocken,,N,,,,,,,,,3.4,200200001001,,,N,Y,,,,Y,,,
De Lange Lulats,KMXNL57,De Lange Lulatsch,,N,,,,,,,,,3,1948,,,N,Y,,,,Y,,,
französischer Ca,W332399,französischer Camembert ,,N,,,,,,,,,4.49,327322722004,,,N,Y,,,,Y,,,
Gesamtprospekt F,W994044,Gesamtprospekt Fitne ,,N,,,,,,,,,0,401764550920,,,N,Y,,,,Y,,,
Grillfackeln, 5 ,W169331,Grillfackeln, 5 Stück ,,N,,,,,,,,,14.99,285015300250,,,N,Y,,,,Y,,,
Gusto café Viva ,R1486040,Gusto café Viva ganze Bohnen HIH,,N,,,,,,,,,9.99,400604011829,,,N,Y,,,,Y,,,
,R802105,Guten Abend Brei,,N,,,,,,,,,5.99,400604001395,,,N,Y,,,,Y,,,
Gutschein KMX,KMX0001,Gutschein KMX ,,N,,,,,,,,,0,1000001,,,N,Y,,,,Y,,,
Himmlischer Chri,W1000109,Himmlischer Christkindl-Tee ,,N,,,,,,,,,3.25,900414502539,,,N,Y,,,,Y,,,
Joghurt Schoko V,W472059,Joghurt Schoko Vanille 7,5% Fe ,,N,,,,,,,,,1.61,400847150791,,,N,Y,,,,Y,,,
Jumbobohnen weiß,R700880,Jumbobohnen weiß,,N,,,,,,,,,,400604017545,,,N,Y,,,,Y,,,
Kaminzauber-Früc,W1000113,Kaminzauber-Früchtetee, Zimt ,,N,,,,,,,,,3.45,900414502555,,,N,Y,,,,Y,,,
Karton Samba Pro,R190265,Karton Samba Proben,,N,,,,,,,,,,400604009531,,,N,Y,,,,Y,,,
Karton Tiger Pro,R190270,Karton Tiger Proben,,N,,,,,,,,,,400604006381,,,N,Y,,,,Y,,,
Kaugummi Spearmi,W449262,Kaugummi Spearmint ,,N,,,,,,,,,2.29,1242439,,,N,Y,,,,Y,,,
Körpermilch Citr,HAU1112,Körpermilch Citrone,,N,,,,,,,,,,402082971133,,,N,Y,,,,Y,,,
Kreidemarker, we,W998920,Kreidemarker, weiß ,,N,,,,,,,,,0,1237829,,,N,Y,,,,Y,,,
Lebkuchengewürz ,W030338,Lebkuchengewürz ,,N,,,,,,,,,.99,403573180515,,,N,Y,,,,Y,,,
Magazin: eve ,W999065,Magazin: eve ,,N,,,,,,,,,0,5003,,,N,Y,,,,Y,,,
mandel-schlagcre,W472583,mandel-schlagcreme,,N,,,,,,,,,3.99,761061200266,,,N,Y,,,,Y,,,
Mandelmehl,P104031188,Mandelmehl,,N,,,,,,,,,5.49,426022003018,,,N,Y,,,,Y,,,
Mandeln geröstet,R201280,Mandeln geröstet, gesalzen,,N,,,,,,,,,1.99,400604013440,,,N,Y,,,,Y,,,
Marzipan-Happen,R1432750,Marzipan-Happen Vollmilch,,N,,,,,,,,,1.49,400604064410,,,N,Y,,,,Y,,,
Marzipan-Happen,R1432700,Marzipan-Happen Zartbitter,,N,,,,,,,,,1.49,400604064671,,,N,Y,,,,Y,,,
MINIS feine Pral,R1430690,MINIS feine Pralinémischung,,N,,,,,,,,,2.99,400604051277,,,N,Y,,,,Y,,,
Möhren Neue Ern,W221056,Möhren Neue Ernte ;CAAE,,N,,,,,,,,,,3245,,,N,Y,,,,Y,,,
Neukarton ,W999038,Neukarton ,,N,,,,,,,,,0,9480,,,N,Y,,,,Y,,,
Neukarton ,W999039,Neukarton ,,N,,,,,,,,,0,9266,,,N,Y,,,,Y,,,
Neuprodukteschil,W091901,Neuprodukteschilder ,,N,,,,,,,,,0,9138,,,N,Y,,,,Y,,,
Olivenöl Sicilia,R1000735,Olivenöl Sicilia DOP nativ extra,,N,,,,,,,,,8.99,400604035533,,,N,Y,,,,Y,,,
Orangenblütenhon,W291961,Orangenblütenhonig ,,N,,,,,,,,,9.49,401624910560,,,N,Y,,,,Y,,,
Papier Tragetasc,NW936805,Papier Tragetaschen Neutr. kl.,,N,,,,,,,,,.1,405365600217,,,N,Y,,,,Y,,,
Papier-Tragetasc,NW569363,Papier-Tragetaschen neutral,,N,,,,,,,,,.2,405365600216,,,N,Y,,,,Y,,,
Pottasche ,W030339,Pottasche ,,N,,,,,,,,,.69,403573180595,,,N,Y,,,,Y,,,
Sportlerbrei,R802155,Rapunzel Sportler Brei,,N,,,,,,,,,5.99,400604001504,,,N,Y,,,,Y,,,
Ravioli Ricotta-,P229081138,Ravioli Ricotta-spinat ,,N,,,,,,,,,4.49,343159001138,,,N,Y,,,,Y,,,
Samba Stick,R1432530,Samba Stick,,N,,,,,,,,,.65,400604006288,,,N,Y,,,,Y,,,
Saunaduft Orange,W775296,Saunaduft Orange Ingwer ,,N,,,,,,,,,9.9,401988621003,,,N,Y,,,,Y,,,
Schlemmerzöpfe, ,W169333,Schlemmerzöpfe, 2 Stück ,,N,,,,,,,,,17.99,285017300250,,,N,Y,,,,Y,,,
Sesamini 3 + 1 g,R1430920,Sesamini 3 + 1 gratis,,N,,,,,,,,,1.77,400604005665,,,N,Y,,,,Y,,,
HaferButterKeks,KMX6015,Hafer-Butter-Kekse,,N,,,,,,,,,2.95,1116015,,,N,Y,,,,Y,,,
Hasel-ButterKeks,KMÜ81,Hasel-Butter-Kekse,,N,,,,,,,,,2,1972,,,N,Y,,,,Y,,,
KäseKante,KMX7070,KäseKante,,N,,,,,,,,,1.9,1117070,,,N,Y,,,,Y,,,
Käsestange,KMX8008,Käsestange,,N,,,,,,,,,1.9,1118008,,,N,Y,,,,Y,,,
Knusperhügel,KMX7075,Knusperhügel,,N,,,,,,,,,.5,1117075,,,N,Y,,,,Y,,,
Kokos-Makrone,XUNSO123,Kokos-Makrone,,N,,,,,,,,,0,2107,,,N,Y,,,,Y,,,
Kokosmakrone,KMX7009,Kokosmakrone,,N,,,,,,,,,1.6,1117009,,,N,Y,,,,Y,,,
Kokosmakrone,KMX1208,Kokosmakrone-,,N,,,,,,,,,1.6,1111208,,,N,Y,,,,Y,,,
Kuchen ,KMX1104,Kuchen,,N,,,,,,,,,1.9,1111104,,,N,Y,,,,Y,,,
Mandel-Zimt-Keks,KMX7008,Mandel-Zimt-Kekse,,N,,,,,,,,,2.95,1117008,,,N,Y,,,,Y,,,
MarziMond,KMX7003,Marzimond,,N,,,,,,,,,1.95,1117003,,,N,Y,,,,Y,,,
Stöllchen M´Pan,KMX7071,Marzipan Stöllchen,,N,,,,,,,,,3.95,1117071,,,N,Y,,,,Y,,,
Mühlmaus,KMX8011,Mühlmaus,,N,,,,,,,,,.8,1118011,,,N,Y,,,,Y,,,
Mürbeschnitten,KMX7001,Mürbeschnitten,,N,,,,,,,,,1.9,1117001,,,N,Y,,,,Y,,,
Müslistange,KMX6005,Müslistange,,N,,,,,,,,,1.5,1116005,,,N,Y,,,,Y,,,
Nikolaus-Mützche,KMX7077,Nikolaus-Mützchen,,N,,,,,,,,,21,1117077,,,N,Y,,,,Y,,,
No.Ma. Croissant,KMX8005,Nougat/Marzipan Croissant,,N,,,,,,,,,1.5,1118005,,,N,Y,,,,Y,,,
Nougatriegel,KMX7005,Nougatriegel,,N,,,,,,,,,1.65,1117005,,,N,Y,,,,Y,,,
Nussschleife,KMX8003,Nussschleife,,N,,,,,,,,,1.75,1118003,,,N,Y,,,,Y,,,
Olivenschnecke,KMX6011,Olivenschnecke,,N,,,,,,,,,1.9,1116011,,,N,Y,,,,Y,,,
Quarktasche,KMX8010,Quarktasche,,N,,,,,,,,,1.75,1118010,,,N,Y,,,,Y,,,
RoggenBrötchen,KMX7073,RoggenBrötchen,,N,,,,,,,,,.5,1117073,,,N,Y,,,,Y,,,
Römernasen,KMX7004,Römernasen,,N,,,,,,,,,.9,1117004,,,N,Y,,,,Y,,,
RosinenBrille,KMX8004,RosinenBrille,,N,,,,,,,,,1.75,1118004,,,N,Y,,,,Y,,,
Rumbützchen,KMX1103,Rumbützchen,,N,,,,,,,,,.6,1111103,,,N,Y,,,,Y,,,
SchokoMarzipanBr,KMX5008,SchokoMarzipanBrötchen,,N,,,,,,,,,.95,1115008,,,N,Y,,,,Y,,,
 

Zvoni

Erfahrenes Mitglied
Arggg...Nicht als text.
ZIP das Ding, und dann als Anhang.
btw: Ich hab gleich Wochenende. Komme frühestens am Montag da dran.
 

Zvoni

Erfahrenes Mitglied
Autsch!
Also, wenn das ein Beispiel-Export ist..... Der ist ganz schön ...schei....äähh......suboptimal
Komma als Trennzeichen ist ersmal per se nicht falsch, aber wenn du dir mal den Eintrag "Grillfackeln" ansiehst, zerlegt es das ganze (wegen dem ", 5")
Versucht ein anderes anderes Trennzeichen zu benutzen, was definitiv nicht als Feldinhalt vorkommt (Doppelpunkt und semikolon sind da auch schon eher Suboptimal.
Ich benutze bei solchen Sachen immer das Pipe-Symbol "|", weil die User meist gar nicht wissen, wie man das eingibt.
Andere Option beim Export ist "Quoted Fields" (oder wie auch immer das auf deutsch heisst).
Bedeutet: Jeder Feldinhalt wird in Anführungszeichen gesetzt (unabhängig vom Inhalt). Andererseits hindert nichts einen User, Anführungszeichen in einem Text einzugeben.
Kriegst du den Export mit Pipe-Symbol hin?
Habe nämlich mal einfach dein Beispiel in Excel importiert, und die Barcodes landen alle in Spalte "SKU of included Item" (Mit Ausnahme von Grillfackeln, Joghurt Schoko und Schlemmerzöpfe, da schiebts es die Barcodes 1-2 Spalten weiter wegen den Kommas).
Der prinzipelle Algorithmus ist ansich nicht besonders schwer, alle Sätze durchzulaufen, und die Barcodes mit Prüfziffer zu ersetzen, nur wird dir der beste Algorithmus nix bringen, wenn das Ergebnis in der falschen Spalte landet.