ich schreibe von einem JSON Array (Inhalt sind die Daten einer Internet Datenbank Tabelle) die Daten in eine Datenbanktabelle (SQLite3 DB).
Bei 974 Datensätzen und 40 Tabellenfeldern dauert die ganze Operation 3 Minuten und 30 Sekunden.
Weiß jemand einen schnelleren Weg?
Hier meine Prozedur:
Code: Alles auswählen
procedure Tfaufueber.Button1Click(Sender: TObject);
var
inputstring, resultstring: string;
response: TStringStream;
so: TJSONParser;
o, oclone, oclone1: TJSONData;
strname, strinsert: string;
i, j, k, l: integer;
test: string;
begin
Label1.Caption := datetimetostr(Now, FormatSettings);
Application.ProcessMessages;
Screen.Cursor := crHourGlass;
ZConnection1.Connected := True;
ZQOrders.Active := True;
inputstring := 'first=' + 'ALL'; //Gesamtabfrage
response := TStringStream.Create(resultstring);
with THTTPSend.Create do
HttpPostURL('http://www.test.de' + '/orderall.php', inputstring,
response);
try
response.Position := 0;
o := nil;
oclone := nil;
so := TJSONParser.Create(response);
so.UseUTF8;
o := so.Parse;
oclone := o.Items[0].Clone;
for i := 0 to TJSONObject(oclone).Count - 1 do
begin
oclone1 := nil;
oclone1 := TJSONObject(oclone.Items[i].Clone);
ZQOrders.Append;
k := 0;
for j := 0 to TJSONObject(oclone1).Count - 1 do
begin
strname := (TJSONObject(oclone1).Names[j]);
if k > TJSONObject(oclone1).Count - 1 then
Break
else
begin
if oclone1.Items[k].AsJSON = UpperCase('NULL') then
strinsert := ''
else
if oclone1.Items[k].AsJSON = 'null' then
strinsert := ''
else
if length(oclone1.Items[k].AsJSON) = 0 then
strinsert := ''
else
strinsert := oclone1.Items[k].AsJSON;
strinsert := StringReplace(strinsert, '"', '', [rfReplaceAll]);
for l := 0 to ZQOrders.FieldCount - 1 do
begin
test := ZQOrders.Fields[l].Name;
if ZQOrders.Fields[l].Name = 'ZQOrders' + strname then
begin
if zqorders.FieldDefs.Items[l].DataType = ftFloat then
strinsert := '0' + strinsert;
if ZQOrders.Fields[l].Name = 'ZQOrdersord_datum' then
ZQOrders.Fields[l].AsString := ConvertDateFormat(strinsert)
else
ZQOrders.Fields[l].AsString := strinsert;
end;
end;
end;
k := k + 1;
end;
end;
finally
so.Free;
Screen.Cursor := crDefault;
Label2.Caption := datetimetostr(now, formatsettings);
end;
Die For-Schleifen zum Durchlaufen des JSON Arrays und das Schreiben in die Tabelle dauert.
Danke.
Josef