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.
 

kaltwasserseife

Grünschnabel
Hallo, danke! Das pipe-Zeichen als Separator zu nehmen ist kein Problem, das mit dem Komma ist nur Angewohnheit.
Wenn der Barcode-Wert in einer anderen Spalte landet, läßt sich das auch eventuell regeln. Über die Header/Kopfzeile kann ich glaube ich steuern, welche Daten in welche Zielfelder der Zieldatenbank kommen. Einfacher ist natürlich, wenn der Algorithmus die Prüfziffer im Quellfeld echt anhängt.
 

Zvoni

Erfahrenes Mitglied
Und genau darum gehts: Du hast ja im OP "Transformations-Probleme" erwähnt. Würde mich nicht wundern, wenn das eins davon ist.
Wenn wir schon die Gelegenheit haben, sollten wir versuchen so viel wie möglich gerade zu biegen.
Wie gesagt: Der Export mit komma ist an sich schon falsch, weil die Barcodes von vorn herein schon in der falschen Spalte landen (zumindest meiner Meinung nach).

Klar kann ich dir den Algorithmus in Excel/VBA schnell zusammen kloppen (wie gesagt, nicht wirklich schwierig), aber du müsstest dann halt selber schauen, wie du wo was an welche Spalte anpasst etc.
 

kaltwasserseife

Grünschnabel
Es geht um das Backoffice des Kassenprogramms LOYVERSE, eine Android-APP. Das Teil will nur Kommas, und mir ist der Import auch gelungen, aber da die Quelldatei die Barcodes ohne Checkdigit verwaltet (blöde Sache, nicht zu ändern), müssen die eben nachberechnet werden. Das Scan-Modul der Android-APP läßt sich leider nicht so konfigurieren, daß ohne Checkdigit gelesen wird. Bei separaten Scanner geht das immer, hier eben leider nicht. Hat ja auch eigentlich seinen SInn (Lesefehler erkennen).
Exportieren aus der Warenwirtschaft kann ich wie ich will, mit Kommas oder ohne, mit Kopfzeile oder ohne. Ein Progrämmchen (DOS: convert.com) schluckt die Export-Datei wie eine Textdatei und ändert durch simple Ersetz-Funktion alles, was ich will. So kommen meine Daten seit 10 Jahren fast anstandslos in die Kasse. Fehlerchen sind gelegentlich: händisch eingebene Artikel mit Sonderzeichen oder gar Kommas in Textfeldern oder Dezimalzahlen in Integer-Feldern....Kriege ich bisher gefunden und händisch repariert. Ist ein seltener Fall.
Schwierig bei Loyverse ist, daß auch EINEM Quellfeld der Mehrwertsteuer ZWEI Zielfelder bedient werden müssen, warum auch immer. Deshalb bin ich froh, wenn ich ein gut verständliches Progrämmchen habe, mich in das Verständnis einarbeiten kann und gegebenfalls weitere Modifikationen anbringen kann. VBA ist, wenn ich das richtig verstanden habe, Applikationsgebunden. Es soll aber keine Tabellenkalkulation zwischendurch geöffnet werden, sondern direkt eine normgemäße CSV für das FTP bereitgestellt werden.
Ich bin schon willig, das auch zu lernen, und bezahle gerne auch gute Vorarbeit (also kommentierten Code). Das Betriebssystem ist Windows98 (!!!), der IE ist nicht installiert, mir scheint aber, man braucht den, weil der VB mitbringt?!
 

Zvoni

Erfahrenes Mitglied
So, anbei mal in Excel/VBA. Code ist soweit kommentiert.
Keine Ahnung ob konvertierbar nach vbscript, powershell, batch, whatever.
test.txt = deine testdaten
testout.txt = was ich als ergebnis bekommen habe. Kannst ja mal testen ob die Barcodes funktionieren.

Excel-Mappe aufmachen, ALT+F11 um in den VB-Editor zu kommen, Doppelclick auf "Tabelle1", da steht der Code in Sub Main

EDIT: Es würde mich doch sehr überraschen, wenn der IE auf der Win98-Kiste NICHT drauf wäre.
Beginnend mit Win95 war der IE unverzichtbarer Bestandteil des Betriebssystem-Kerns.
Genau deshalb hat sich ja MicroSoft die Klage von Netscape damals eingefangen.
Und VB hat mit IE nix zu tun. VB (bzw. VBA) ist eine Sprache, wofür es verschiedene Clients gibt.
Die bekanntesten Clients dafür sind eben Visual Studio 6.0 (was manche als das "echte" VB bezeichnen) und MS Office.
Es gibt auch noch andere Clients (Bsp. Autocad), aber IE hat damit nix zu tun.

P.S.: Und verwechsel VB/VBA nicht mit vbScript. Heissen ähnlich, sehen ähnlich aus, haben aber mMn zu 95% nichts miteinander zu tun.
 

Anhänge

Zuletzt bearbeitet:

kaltwasserseife

Grünschnabel
Vielen Dank erst einmal. Ich versuche mich in die Sache einzuarbeiten, aber ich kenne die ganzen VBA-Befehle nicht. Es muss schon irgendwie VBscript werden, weil es echt ohne Office laufen soll. Aber zu übertragen fehlt mir die Kenne. Mist. Eine Einführung, eine Befehlsreferenz für VBA finde ich nirgends so richtig von grundauf.
Irgendwie müßte ich doch einen Kursus buchen oder neben jemandem sitzen, der mir alles 1zu1 erklärt...
Mal sehen, wie ich weiter komme.