Hallo Philipp,
ich habe mich für einen auf den ersten Blick "harten" aber im Detail sehr leistungsfähigen Weg entschieden.
Ich bereite die Daten extern in der Tabellenkalk vor, so wie Du es mit Sicherheit auch gemacht hast. Dann kopiere ich mir die Daten in eine zuvor in Access mit passender Spaltenbreite definierte Tabelle und speichere sie von dort aus als einfache TXT-Datei mit fester Breite ab. Dieser Umweg ist notwendig, weil Du die genaue Spaltenbreite wissen mußt, Excel beim Speichern nach Text aber eben
nicht die eingestellte Spaltenbreite verwendet, sondern irgendeine die gerade paßt
. Access macht das im Gegensatz dazu richtig.
Die so gewonnene Textdatei kannst Du dann im IBexpert mit einem Code in der Art wie der hier:
Code: Alles auswählen
CREATE TABLE EXT_BADR EXTERNAL 'D:\AVERP\ADRESSIMPORT.PRN' (
NR CHAR(8),
NAME CHAR(40),
BEZEICH CHAR(10),
STRASSE CHAR(40),
LAND CHAR(5),
PLZ CHAR(6),
ORT CHAR(40),
TELVOR CHAR(10),
TEL CHAR(15),
FAXVOR CHAR(10),
FAX CHAR(15),
PARTNER CHAR(40),
KDNR CHAR(15),
NRALT CHAR(8),
TRENNER CHAR(1),
EOL CHAR(2)
);
an die Datebank "andocken". Im Beispiel ist unsere exportierte Adresstabelle aus der alten Software gezeigt. Ich denke, genau jetzt siehst Du auch, warum die exakte Spaltenbreite wichtig war.
Von da weg, kannst Du dann diese Tabelle mit allen üblichen SQL-Anweisungen bearbeiten. Du kannst Dir z.B. eine Stored_Procedure schreiben, die sich in einer Schleife durch alle Datensätze dieser externen Tabelle durcharbeitet und damit "irgendwas" macht. Für den Import unserer Adresstabelle sah das ungefähr so aus:
Code: Alles auswählen
SET TERM ^ ;
CREATE PROCEDURE P_BADR_IMPORT
AS
DECLARE VARIABLE NNR VARCHAR(8);
DECLARE VARIABLE NNAME VARCHAR(40);
DECLARE VARIABLE NBEZEICH VARCHAR(10);
DECLARE VARIABLE NSTRASSE VARCHAR(40);
DECLARE VARIABLE NLAND VARCHAR(2);
DECLARE VARIABLE NPLZ VARCHAR(6);
DECLARE VARIABLE NORT VARCHAR(40);
DECLARE VARIABLE NTELVOR VARCHAR(10);
DECLARE VARIABLE NTEL VARCHAR(15);
DECLARE VARIABLE NFAXVOR VARCHAR(10);
DECLARE VARIABLE NFAX VARCHAR(15);
DECLARE VARIABLE NPARTNER VARCHAR(40);
DECLARE VARIABLE NKDNR VARCHAR(15);
DECLARE VARIABLE NRALT VARCHAR(8);
DECLARE VARIABLE NPLZSUCH VARCHAR(15);
DECLARE VARIABLE NPLZKEY INTEGER;
DECLARE VARIABLE NBSPRAKEY INTEGER;
DECLARE VARIABLE NBLAND_ID INTEGER;
BEGIN
FOR SELECT
F_rtrim(va.nr),
F_rtrim(va.name),
F_rtrim(va.bezeich),
F_rtrim(va.strasse),
F_rtrim(va.land),
F_rtrim(va.plz),
F_rtrim(va.ort),
F_rtrim(va.telvor),
F_rtrim(va.tel),
F_rtrim(va.faxvor),
F_rtrim(va.fax),
F_rtrim(va.partner),
F_rtrim(va.nralt)
FROM EXT_BADR va ORDER BY NR
INTO :nnr, :nname, :nbezeich, :nstrasse, :nland, :nplz, :nort, :ntelvor, :ntel, :nfaxvor, :nfax, :npartner, :nralt
DO
BEGIN
nplzkey = 0;
nbland_id = 0;
nplzsuch = nland || ' ' || nplz;
SELECT MIN(ID) FROM BPLZ WHERE (MASKENKEY = :nplzsuch) INTO :nplzkey;
SELECT BSPRA_ID_SPRACHKENN FROM BLAND WHERE (MASKENKEY = :nland) INTO :nbsprakey;
SELECT ID FROM BLAND WHERE (MASKENKEY = :nland) INTO :nbland_id;
IF (((nplzkey=0) OR (nplzkey IS NULL)) AND (:nplz <> '') AND (:nplz IS NOT NULL)) THEN
BEGIN
INSERT into bplz (ORT, PLZ, VORWAHL, BLAND_ID_LANDKENNZ) VALUES (:nort, :nplz, :ntelvor, :nbland_id);
SELECT MIN(ID) FROM BPLZ WHERE (MASKENKEY = :nplzsuch) INTO :nplzkey;
END
INSERT INTO BADR (
BEZ,
ILN,
BSPRA_ID_DRUSPRA,
FAXANSCH,
FAXVOR,
BPLZ_ID_LANDPLZ,
NAME,
NOTIZ,
STRASSE,
TELANSCH,
TELVOR,
TELANSCH4)
VALUES (:nbezeich, :nnr, :nbsprakey, :nfax, :nfaxvor, :nplzkey, :nname, :npartner, :nstrasse, :ntel, :ntelvor, :nralt);
END
END
^
Wie Du anhand der ersten IF Abfrage siehst, kannst Du auf die Art z.B. auch fehlende Postleitzahlen in der bestehenden BPLZ ergänzen. Das erspart dann einiges an Handarbeit, an diesen reinen "Vordefinitions"-Tabellen
Als "einfacheren" Weg, der eher auf die Richtung EMS-Import hinausläuft, bietet sich noch der Befehl INSERTEX an, der aber im Vergleich zum EMS-Tool eher bescheiden in seinem Funktionsumfang ist. Solche Dinge wie "festen Wert setzen" oder so hat der nicht, das muß man mit INSERTEX alles schon vorher im Excel/OpenCalc ... machen. Bei den Adressen geht das noch, aber bei einer Tabelle wie dem Artikelstamm (BSA) mit über 100 Spalten wird es dann böse und im Excel auch elend unübersichtlich.
Gerade beim Import solch komplexer Tabellen kannst Du mit dem zuerst beschriebenen Weg SEHR (!) viel mehr erreichen. Z.B. den Artikel beim Import auf die Lager verteilen, die Lieferanten zuordnen, Stücklistenkopf anlegen, Arbeitsstammplan (evtl. sogar mit Arbeitsgängen anlegen ...)
Gruß
Michael