Registriert seit: 20. Aug 2007
10 Beiträge
|
AW: Bulk-Import
21. Jan 2020, 08:08
Hallo jobo,
hier mein Ansatz.
1. Erzeugen der CSV-Datei (hier aus einer HANA- DB) in Delphi:
Delphi-Quellcode:
laenge[0] := 8; // Laengenvorgabe der Ausgabefelder
laenge[1] := 12;
laenge[2] := 8;
laenge[3] := 8;
laenge[4] := 4;
laenge[5] := 16;
laenge[6] := 32;
laenge[7] := 24;
laenge[8] := 160;
laenge[9] := 80;
laenge[10] := 12;
laenge[11] := 8;
laenge[12] := 8;
laenge[13] := 8;
datei := ' C:\temp\qamv1.csv'; // Ausgabedatei
AssignFile(dd,datei);
REWRITE(dd);
WITH H2R_Query DO
BEGIN
CLOSE;
SQL.CLEAR;
SQL.Add(' SELECT C.PRUEFLOS, C.VORGLFNR, C.MERKNR, C.SATZSTATUS, C.QPMK_WERKS, C.VERWMERKM, C.MKVERSION, C.KURZTEXT, C.DUMMY20, C.MASSEINHSW, C.SOLLWERT, C.TOLERANZOB, C.TOLERANZUN');
SQL.Add(' FROM QALS Q, QAMV" C');
SQL.ADD(' WHERE Q.WERK = '' XXXX'' AND');
SQL.ADD(' C.PRUEFLOS = Q.PRUEFLOS AND');
SQL.ADD(' Q.ERSTELDAT >= TO_DATE('' 01.01.2010'' ,'' dd.mm.yyyy'' )');
OPEN; // holen der Daten
i := 0;
WHILE NOT EOF DO
BEGIN
s := IntToStr(i);
WHILE LENGTH(s) < 8 DO s := ' 0' + s; // ID als Integer darstellen
st := ' ';
FOR j := 0 TO Fields.Count - 1 DO // Felder anpassen
BEGIN
st := Fields[j].AsString;
WHILE LENGTH(st) < lae[j+1] DO st := st + ' ';
IF Fields[i].DataType IN [ftFloat, ftCurrency, ftSingle]
THEN WHILE POS(' ,',st) > 0 DO st[POS(' ,',st)] := ' .'; // numerische Felder einen Punkt als Dezimaltrenner geben
s := s + st;
END;
WRITELN(dd,s);
INC(i);
IF i = max_anz THEN BREAK;
NEXT;
END;
END;
CloseFile(dd);
2: Definition der externen Tabelle in FB:
SQL-Code:
CREATE TABLE QAMV_TEXT EXTERNAL ' C:\TEMP\QAMV1.CSV' (
ID CHAR(8),
PRUEFLOS CHAR(12),
VORGLFNR CHAR(8),
MERKNR CHAR(8),
SATZSTATUS CHAR(4),
QPMK_WERKS CHAR(16),
VERWMERKM CHAR(32),
MKVERSION CHAR(24),
KURZTEXT CHAR(160),
DUMMY20 CHAR(80),
MASSEINHSW CHAR(12),
SOLLWERT CHAR(8),
TOLERANZOB CHAR(8),
TOLERANZUN CHAR(8),
LFCR CHAR(2)
);
3: Definition der Zieltabelle in FB:
CREATE TABLE QAMV (
ID INTEGER,
PRUEFLOS CHAR(12),
VORGLFNR INTEGER,
MERKNR INTEGER,
SATZSTATUS VARCHAR(4),
QPMK_WERKS VARCHAR(16),
VERWMERKM VARCHAR(32),
MKVERSION VARCHAR(24),
KURZTEXT VARCHAR(160),
DUMMY20 VARCHAR(80),
MASSEINHSW VARCHAR(12),
SOLLWERT DOUBLE PRECISION,
TOLERANZOB DOUBLE PRECISION,
TOLERANZUN DOUBLE PRECISION,
LFCR CHAR(2)
);
4: Stored Procedure für das Übertragen der externen Tabelle in die Zieltabelle:
SQL-Code:
create or alter procedure QAMV_WANDELN
as
begin
insert into qamv
select * from QAMV_TEXT;
end
Was ich nicht berechnet habe, ist das anschließende Erzeugen des Indexes.
Werde heute mal probieren, weitere Tabellen ebenso zu übertragen.
Geändert von mkinzler (21. Jan 2020 um 08:12 Uhr)
|