Min INSERT er for langsom i SQLite?
Jeg arbejder med en applikation til IPhone, Som jeg laver i Delphi XE4. Har problemer med at min INSERT er for langsom og fryser min Gui i de 5 sekunder den er i gang? Jeg laver min Sqlite i en datamodule. Henter data(Json) fra en server til min sqlite.Her er min Kode:
procedure TDataModule4.InsertFromServer(req: string);
var
LJsonObj: TJSONArray;
LIDs: TJSONValue;
LJPair: TJSONPair;
LFirst, LTask, LPersonId, LLast: string;
//q: TSQLQuery;
// startTime, endTime, elapsedTime: TDateTime;
begin
// startTime := Now();
// SQLConnection1.ExecuteDirect('DROP TABLE IF EXISTS Task');
SQLConnection1.ExecuteDirect
('CREATE TABLE IF NOT EXISTS Task( First TEXT UNIQUE PRIMARY KEY, Last TEXT, Task TEXT, PersonID TEXT)');
LJsonObj := TJSONObject.ParseJSONValue(req) as TJSONArray;
SQLConnection1.ExecuteDirect('BEGIN TRANSACTION');
try
for LIDs in LJsonObj do
begin
for LJPair in TJSONObject(LIDs) do
begin
if (LJPair.JsonString.Value = 'PersonID') then
LPersonId := LJPair.JsonValue.Value;
if (LJPair.JsonString.Value = 'First') then
LFirst := LJPair.JsonValue.Value;
if (LJPair.JsonString.Value = 'Last') then
LLast := LJPair.JsonValue.Value;
if (LJPair.JsonString.Value = 'Task') then
LTask := LJPair.JsonValue.Value;
end;
SQLQueryINSERT.Params.ParamByName('First').AsString := LFirst;
SQLQueryINSERT.Params.ParamByName('Last').AsString := LLast;
SQLQueryINSERT.Params.ParamByName('Task').AsString := LTask;
SQLQueryINSERT.Params.ParamByName('PersonID').AsString := LPersonId;
SQLQueryINSERT.ExecSQL();
end;
SQLConnection1.ExecuteDirect('END TRANSACTION');
SelectResults;
// endTime := Now();
// elapsedTime := endTime - startTime;
// ShowMessage(TimeToStr(elapsedTime));
finally
LJsonObj.Free;
end;
end;
Min QueryInsert er: INSERT OR IGNORE INTO Task(First,last,Task,PersonID)VALUES(:First,:Last,:Task,:PersonID)
Et spørgsmål mere: Kan man lave en INSERT og UPDATE i en statement?