Autor Beitrag
subw00fer
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mo 29.09.03 08:43 
Hallo!

Ich bekomme Daten mittels Texfile und möchte die Daten auf die DB(AS400) legen. Momentan lese ich zeilenweise und schreibe die gelsene und bearbeitete Zeile in die Datenbank. Die Datenmenge bewegt sich zwischen 80.000 und 300.000 Zeilen-> Zeitaufwendig, da bis zu 300.000 INSRET erfolgen.

Soviel ich weis gibt es INSERTS, die einmal geöffnet werden und dann nur mehr geschrieben wird. Leider finde ich nicht das passende INSERT für meine DB.

Hier vielleicht noch meine Logik:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm5.Button7Click(Sender: TObject);
var TextString,:String;
begin
                          //DAtei öffnen
      while not eof(F) do
        begin
          //Zeile lesen
                          //Parameter verarbeiten und für insert vorbereiten
          try
            Form1.Q.Close;
            Form1.Q.SQL.Clear;
            Form1.Q.SQL.Add('Insert into tabelle (parameter) Values(parameter)');
            Form1.Q.ExecSQL;
          except
             //Fehlermeldung
          end;
        end;
                          //weiter Verarbeitungen
end;


Doch diese vielen Inserts verzögern das uploaden. Ich schreibe ca. 10 Sätze pro/sec.

Kann mir jemand weiterhelfen?
MAlsleben
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 303

W2k,WinXP
D3 - DXE3 Enterprise
BeitragVerfasst: Mo 29.09.03 11:00 
Hi,

mit den mehrfachen Inserts ist das so eine Sache. Ich habe da auch mal rumprobiert, allerdings letzlich mit Delphi 5 und der BDE. Ich hatte versucht mehrere Inserts in einem Block zu verarbeiten, also in etwa so wie Du, allerdings nur 20 Stück im Block, weil z.B DB2 Connect nur eine bestimmte Menge an Zeichen fassen kann. Aber das Problem war, das nur der 1. verarbeitet wurde, weil die Database- Komponete das nicht händeln konnte. Irgendwo stand das auch in der Hilfe, das keine Scripte oder mehrere SQL verarbeitet werden können. Wenn ich die SQL's direkt in etwa so:
insert blabla ..... ;
insert blabla ......; usw.
in der CAE Befehlszentrale abgesetzt habe, dann hat es funktioniert. Also eindeutig Prloblem von Delphi. Eine SQL- Script Komponete aus der RX-Libary hat nicht gebracht, weil die die Befehle nur in einzelne aufgespaltet hat. Also was bleibt: Entweder den Import in mehrere unabhängige Threads aufteilen oder mal in der DB 2 Referenz das Commando Load anschauen und ausprobieren. Das ist kein SQL Befehl sondern ein CAE Command. Auf der AS/400 im SQL findest Du das nicht. Mit diesem Command sollen ganze Dateien mit einem Schlag importiert werden können. Oder Du probierst das ganze mal den DB-Express Komponeten.


Gruß Micha

_________________
Viele Wege führen nach Rom.
subw00fer Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mo 29.09.03 15:37 
Danke für die Infos, ich werde mir mal die Komponenten ansehen die du erwähnt hast.
subw00fer Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Di 30.09.03 12:15 
Servus!

Ich habe das Commando Load probiert, doch leider funkioniert es nicht, da dieser Command nicht unterstützt wird. DB-Express bringt auch nicht wirlklich eine grossen Unterschied.

Threads könnte die Lösung bringen, doch da bin ich noch nicht so richtig vertraut, da ich keine gutes Tutorial habe und die Zeit drängt.

Hat vielleicht jemand ein gutes Tutorial für Threads?
MAlsleben
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 303

W2k,WinXP
D3 - DXE3 Enterprise
BeitragVerfasst: Di 30.09.03 13:10 
Hi,

ich habe uach noch mal nachgelesen. DB-Express kann auch immer nur einen SQL ausführen. Den Command load findest Du auch nicht auf der AS/400 selbst, sondern nur im DB2 Connect auf Deinem PC. Darüber kann eine ascii - Datei in eine DB/2 Datei importiert werden. Ist aber ein recht umfangreiches Command, kann man sich aber in der Hilfe von DB/2 Connect ansehen. Es gibt noch eine Möglichkeit: Du schiebst die Datei per FTP in ein physical File auf der AS/400, was keine andere Struktur enthält, als ein Text Feld entsprechender Länge und läßt einen AS/400 Programmierer den Import auf der Maschine aus dieser Datei in die echte Ziel Datei mit RPG oder C oder was auch immer einer auf der AS/400 beherrscht programmieren. Das läuft dann wirklich rasend schnell.

Gruß Micha.

_________________
Viele Wege führen nach Rom.
subw00fer Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Di 30.09.03 16:11 
Danke nochmal! Den Load-Befehl muss ich mir noch einmal ansehen.

Apropos FTP, habe ich ganz vergessen zu erwähnen. Nachdem das Upload mit einem Delphiprogramm zu lange dauerte haben wir es mit FTP versucht. Du hast recht das rennt extrem schnell. Ein Schnipper und es ist fertig. Wir hatten nur ein Problem. Wir bekommen eine csv-Datei(nur ich habe sie in der Delphiumgebung als Textdatei behandelt) und wenn sie es in die AS400 importieren stimmt die Satzstruktur nicht ganz überein. Da es zuviel Aufwand(in Wirklichkeit sind die RPG-Programmierer zu faul) ist lösen wir es mit Oracle. Wir bekommen einen Oracelexport und dann wird von Oracle auf AS400 geschaufelt bzw. Synonyme angelegt. Warum? Da in der csv-Datei häufig Satzstrukturfehler auftraten. Egal, ich muss zumindest auf das Oracle-Export warten und mal sehen.

Trotzdem nochmals DANKE für die guten Tipps. Bis Später(Vielleicht) :D
eddyp
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 58



BeitragVerfasst: Mi 21.01.04 19:10 
das RPG- Prg. kann ich dir basteln, wenn ich die Satzbeschreibungen habe.

_________________
Grüsse, eddyp