Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   FMX Android Datenimport (https://www.delphipraxis.net/189991-fmx-android-datenimport.html)

Devil1925 18. Aug 2016 07:31

FMX Android Datenimport
 
Hallo,
vielleicht hat ja einer von euch eine Idee/einen Ansatz wie ich folgenden Datenimport beschleunigen kann:

Hier muss ich Daten aus einer MSSQL-Datenbank auf ein Android Gerät in eine SQLITE Datenbank einspielen.
Delphi-Quellcode:
  Q_SQLITE.Close;
  Q_SQLITE.SQL.Text := 'Select Spalte1, Spalte2, Spalte3 from Tabelle';
  Q_SQLITE.Open;
  Q_MSSQL.Close;
  Q_MSSQL.SQL.Text := 'Select Spalte1, Spalte2, Spalte3 from Tabelle';
  Q_MSSQL.Open;
  Q_MSSQL.First;

  while not Q_MSSQL_Import.Eof do
    begin
      Q_SQLITE_Import.Append;

        for i := 0 to Q_MSSQL_Import.Fields.Count - 1 do
          begin
            Q_SQLITE_Import.FieldByName(Q_MSSQL_Import.Fields[i].FullName).Value :=
                Q_MSSQL_Import.FieldByName(Q_MSSQL_Import.Fields[i].FullName).Value;
          end;
      Q_SQLITE_Import.Post;
      Q_MSSQL_Import.Next;
    end;
Diese Version des Datenimports ist bei kleineren Datenmengen durchaus in Ordnung. Wenn dann allerdings 5000+ Datensätze importiert werden sollen, Dauert es dann doch schon sehr lange.

Rollo62 18. Aug 2016 09:20

AW: FMX Android Datenimport
 
FireDac Array DML ?

Mavarik 18. Aug 2016 09:54

AW: FMX Android Datenimport
 
Zitat:

Zitat von Devil1925 (Beitrag 1345090)
Hier muss ich Daten aus einer MSSQL-Datenbank auf ein Android Gerät in eine SQLITE Datenbank einspielen.

Du hast aber vom Device eine Connection zum MSSQL Server, richtig?

Devil1925 18. Aug 2016 10:02

AW: FMX Android Datenimport
 
@Rollo62: Werde ich mir mal ansehen!
@Mavarik: Ja, Ich habe sowohl eine Connection zum MSSQL-Server als auch zur SQLITE Datenbank.

Mavarik 18. Aug 2016 10:20

AW: FMX Android Datenimport
 
Zitat:

Zitat von Devil1925 (Beitrag 1345107)
@Mavarik: Ja, Ich habe sowohl eine Connection zum MSSQL-Server als auch zur SQLITE Datenbank.

ok das Ding mit dem Array ist eine Möglichkeit... Ich habe keine Verbindung zur Datenbank und erzeuge mir daher (wie ein Backup) fertige SQL-Insert-String. So brauche keine 30 Zuweisungen, wenn meine Tabelle 30 Spalten hat...


Und dann mache ich es so:
Delphi-Quellcode:
          SQLQuery.SQL.Text := 'BEGIN;';
          SQLQuery.ExecSQL(true);
          StatusProg('',0.0,'0.00%');

          while not(SQLReader.eof) do
            begin
              SQLReader.ReadSQLCrypt;

              inc(Count);

              if (Count mod 100) = 0 then
                StatusProg('',100.0 / MaxSize * SQLReader.Position,FloattoStrF(100.0 / MaxSize * SQLReader.Position,ffFixed,7,2)+'%');

              DataLine := SQLReader.GetSQLBytes;

              SQLQuery.SQL.Text := 'INSERT INTO '+FTableName+' ('+Felder+') VALUES (0,'+Dataline+PostFields+');';
              try
                SQLQuery.ExecSQL(false);
              except
                StatusProg('EXCEPTION',0,'');
              end;
            end;

          StatusProg('',100.0,SIndexWait);
          SQLQuery.SQL.Text := 'COMMIT;';
          SQLQuery.ExecSQL(true);

          SQLConnection.Close;
        finally
          ArcFree(SQLReader,'SQLReader');
        end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz