Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   [Android] record befüllen -> AV kommt nicht im Delphi an (https://www.delphipraxis.net/194153-%5Bandroid%5D-record-befuellen-av-kommt-nicht-im-delphi.html)

Devil1925 23. Okt 2017 09:32

[Android] record befüllen -> AV kommt nicht im Delphi an
 
Moin, ich habe ein Record, welches Folgendermaßen aussieht:
Delphi-Quellcode:
type
  TRec_Austausch = record
    MaxStep:Integer;
    Importname, MSSQL, WHERE, WhereKunden, SQLITE, Key, Tabelle, SQLITE_Delete, Key2, OhneFeldAenderndeFunktion, MSSQLTabelle, SQLAfterExec:String;
    Filt, Zurueck:Boolean;
  end;
Nun habe ich noch ein Array mit diesem Record, welches ich befülle.
Delphi-Quellcode:
AAustausch:Array of TRec_Austausch;
Die Länge des Arrays setze ich vor dem befüllen auf die Maximale anzahl an schritten. (Die länge stimmt auch, habe ich mehrmals überprüft)
Nun befülle ich die Records eines nach dem Anderen wie folgt:
Delphi-Quellcode:
    With AAustausch[Schritt] do
    Begin
      MaxStep := MaxSchritt;
      Importname := 'Kundenstamm';
      MSSQL := 'Select Kunden_Nr, Sortierfeld, Name1, Name2, Strasse, '+
                    'PLZ, Ort, Telefon, EMail, Creation_Date, Changed_Last, '+
                    'Info, Changed_By, Homepage, Autotelefon, Vertreter, FGR_Nr, Anrede, Adressart, Inaktiv, Sperrkennzeichen from Kundenst '+
                    ' inner Join MOBILE_Kunden_'+IntToStr(Station_ID)+' M on m.kdn = kundenst.Kunden_Nr where ';
      WHERE := ' 1=1 ';
      WhereKunden := '';
      SQLITE := 'Select Kunden_Nr, Sortierfeld, Name1, Name2, Strasse, '+
                    'PLZ, Ort, Telefon, EMail, Creation_Date, Changed_Last, '+
                    'Info, Changed_By, Homepage, Autotelefon, Vertreter, FGR_Nr, Anrede, Adressart, Inaktiv, Sperrkennzeichen '+
                    'from Kundenst';
      Key := 'Kunden_Nr';
      Tabelle := 'Kundenst';
      SQLITE_Delete := ReadINITAB('Datenaustausch', 'Filter_SQLITE');
      Filt := True;
      Key2 := '';
      OhneFeldAenderndeFunktion := '';
      Zurueck := True;
      MSSQLTabelle := '';
    End;
Das funktioniert auch ca 20 mal. Dann kommt mein Problem.
das Nächste befüllen erfolgt nach dem selben Schema. Nur das es hier beim setzen der Variable "Importname" knallt. Das besondere daran: die AV wird mir in der App angezeigt, allerdings erscheint diese nie im Delphi. Hier sieht es so aus als wenn der Debug vorgang mit F9 fortgesetzt wurde, also der Pfeil verschwindet komplett und taucht auch nicht wieder auf.
Auf meinen iOS Geräten, die ich hier zur verfügung habe funktioniert das einwandfrei (iPad 3. Generation (iOS 9.3), iPhone 5 (iOS 10.3.3). Auf den Android Geräten nicht (Samsung Note 10.1 (Android 4.1.2) und Alcatel Shine Lite (Android 6.0))
Hat da wer eine Idee? oder braucht ihr noch mehr Infos?

Rollo62 23. Okt 2017 09:37

AW: [Android] record befüllen -> AV kommt nicht im Delphi an
 
Wie sieht denn Schritt aus ?
Läuftst du in einer externen Schleife von 0 ... 19 durch ?

Mit 1 ... 20 wird es wohl nicht funktionieren.

Rollo

Devil1925 23. Okt 2017 10:07

AW: [Android] record befüllen -> AV kommt nicht im Delphi an
 
Ich habe meinen Fehler gerade gefunden! Ich habe es wohl irgendwie geschafft meine Variable "Schritt" in einem schritt doppelt zu erhöhen. Dementsprechend ist der Fehler logisch.
Jetzt bestehen bei mir nur noch 3 Fragen:

1. Warum Tritt der Fehler nicht auf iOS auf? Da läuft das Ganze einwandfrei durch. (mit dem doppelten erhöhen etc)

2. Warum kommt die AV nicht im Delphi an?

3. Warum tritt die AV erst bei der Zuweisung des 2. Wertes im Record auf und nicht direkt bei dem Versuch auf dieses Record zuzugreifen?

mjustin 23. Okt 2017 12:25

AW: [Android] record befüllen -> AV kommt nicht im Delphi an
 
Mysteriös - einen ähnlichen Bug entdeckte ich auch. Er trat auf, als ein Record neuerdings mit R := Default(TMyRecord) initialisiert wurde. Der Effekt war, dass in einem anderen Programmteil eine for ... next Schleife zwei Durchläufe machen wollte, für I = 0 und für I = 1, obwohl der Endwert = 0 war.

Der Quelltext des "Auslösers" und des aufgetretenen "Fehlers" liegen weit auseinander, es war nicht einfach eine Haupt- und eine Subroutine. Entweder ein Bug im Memory Manager, oder ein anderer unentdeckter Seiteneffekt im eigenen Code.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:10 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