AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Firemonkey Segmentation fault (11)

Ein Thema von juelin · begonnen am 4. Jul 2019 · letzter Beitrag vom 27. Okt 2019
Antwort Antwort
Seite 1 von 2  1 2   
juelin

Registriert seit: 9. Mai 2006
Ort: Mannheim
107 Beiträge
 
Delphi XE5 Professional
 
#1

Firemonkey Segmentation fault (11)

  Alt 4. Jul 2019, 17:12
Hallo Delphi Gemeinde,
muss Euch leider nochmal nerven.
Mein erstes Firmemonkey-Programm.
Im Emulator läuft alles prima.
Der Fehler tritt nur im Handy auf.
In Unit1 habe ich zwei Eingabefelder (Edit1 und Edit2).
Nach dem Start des Programmes kann ich Edit1 eingeben und Edit2 erhält den Focus.
Aber sobald ich irgend ein Zeichen in Edit2 eingebe erhalte ich
Segmentation fault (11) (siehe Anhang).
Habe hier auch nichts gefunden wo weiter hilft.

Ich habe:
Windows 10
Delphi Rad-Studio XE5
Handy Sony Xperia 10

Code:

Delphi-Quellcode:
unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  FMX.Edit, DBAccess, MyAccess, Data.DB, MemDS, System.DateUtils;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Button3: TButton;
    MyConnection1: TMyConnection;
    MyQuery1: TMyQuery;
    MyCommand1: TMyCommand;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FormCreate(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Edit1KeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
      Shift: TShiftState);
    procedure Edit2KeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
      Shift: TShiftState);
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure MyConnection1AfterConnect(Sender: TObject);
    procedure MyCommand1AfterExecute(Sender: TObject; Result: Boolean);
    procedure MyCommand1BeforeExecute(Sender: TObject);
    procedure MyConnection1Error(Sender: TObject; E: EDAError;
      var Fail: Boolean);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    procedure Blankwegh;
    procedure Blankwegv;
    procedure Rueck;
    procedure maxlen;
    procedure ausricht;
    procedure Nummer;
    procedure numlad;
  end;

var
  Form1: TForm1;
  var JaNein: word;
  var Closestat: integer;
  var abbruch: Boolean;
  var mtasts: integer;
  var mlauf: integer;
  var mver: integer;
  var mart: integer;
  var Tag: integer;
  var Monat: integer;
  var Jahr: integer;
  var BUser: string;
  var anzrec: Integer;
  var sdate1: Char;
  var sdate2: String;
  var vwaehrs: string;
  var vtaus: Char;
  var vdezim: Char;
  var vwaehrz: Byte;
  var FSatz: string;
  var sta: integer;
  var sperr: integer;
  var DateSeparator: Char deprecated 'Use FormatSettings.DateSeparator';
  var ShortDateFormat: string deprecated 'Use FormatSettings.ShortDateFormat';
  var CurrencyString: string deprecated 'Use FormatSettings.CurrencyString';
  var ThousandSeparator: Char deprecated 'Use FormatSettings.ThousandSeparator';
  var DecimalSeparator: Char deprecated 'Use FormatSettings.DecimalSeparator';
  var CurrencyDecimals: Byte deprecated 'Use FormatSettings.CurrencyDecimals';
  var dcon: integer;
  var user: String;
  var passwd: String;
  var benutzer: string;
  var superu: string;
  var name: string;
  var anzp: integer;
  var SqlRet: Boolean;
  var vorname: string;
  var nachname: string;
  var ialpha: string;
  var inummer: integer;
  var inumkom: double;
  var iart: integer;
  var ilanmax: integer;

implementation

{$R *.fmx}

uses Unit2, Unit3;

procedure TForm1.Blankwegh;
  var laenge: integer;
  var stelle: integer;
  var vari12: integer;
  var zeichen: string;
begin
  laenge:=Length(ialpha);
  vari12:=0;
  if laenge > 0 then
  begin
    for stelle:=laenge downto 1 do
    begin
      zeichen:=Copy(ialpha,stelle,1);
      if (vari12 = 0) then
      begin
        if (zeichen <> ' ') then
        begin
          vari12:=stelle;
        end;
      end;
    end;
  end;
  if (vari12 > 0) then
  begin
    zeichen:=ialpha;
    ialpha:=Copy(zeichen,1,vari12);
  end else begin
    ialpha:='';
  end;
end;

procedure TForm1.Blankwegv;
  var laenge: integer;
  var stelle: integer;
  var vari12: integer;
  var zeichen: string;
begin
  laenge:=Length(ialpha);
  vari12:=0;
  if laenge > 0 then
  begin
    for stelle:=1 to laenge do
    begin
      zeichen:=Copy(ialpha,stelle,1);
      if (vari12 = 0) then
      begin
        if (zeichen <> ' ') then
        begin
          vari12:=stelle;
        end;
      end;
    end;
  end;
  if (vari12 > 0) then
  begin
    zeichen:=ialpha;
    ialpha:=Copy(zeichen,vari12,laenge-vari12+1);
  end else begin
    ialpha:='';
  end;
end;

procedure TForm1.Rueck;
begin
  Form1.Visible:=True;
  Closestat:=0;
  mtasts:=1;
  Form1.ActiveControl:=nil;
  if assigned(Form2) then
  begin
    Form2:=nil;
  end;
  if assigned(Form3) then
  begin
    Form3:=nil;
  end;
end;

procedure TForm1.maxlen;
  var laenge: integer;
  var h1: integer;
  var h2: integer;
begin
  laenge:=Length(ialpha);
  h1:=inummer - laenge;
  if laenge < inummer then
  begin
    if iart = 1 then
    begin
      for h2:=1 to h1 do
      begin
        ialpha:=ialpha+' ';
      end;
    end else begin
      for h2:=1 to h1 do
      begin
        ialpha:=' '+ialpha;
      end;
    end;
  end else begin
    if laenge > inummer then
    begin
      ialpha:=Copy(ialpha,1,inummer);
    end;
  end;
end;

procedure TForm1.ausricht;
  var laenge: integer;
  var stelle: integer;
begin
  ialpha:=IntToStr(inummer);
  laenge:=Length(ialpha);
  if laenge < ilanmax then
  begin
    for stelle:=1 to ilanmax-laenge do
    begin
      ialpha:=' '+ialpha;
    end;
  end;
end;

procedure TForm1.Nummer;
  var laenge: integer;
  var stelle: integer;
  var m: integer;
  var zeichen: string;
  var tt: string;
begin
  laenge:=Length(FSatz);
  tt:='';
  if laenge > 0 then
  begin
    tt:=FSatz;
    for stelle:=1 to laenge do
    begin
      zeichen:=Copy(FSatz,stelle,1);
      m:=0;
      if zeichen = '0then
      begin
        m:=1;
      end;
      if zeichen = '1then
      begin
        m:=1;
      end;
      if zeichen = '2then
      begin
        m:=1;
      end;
      if zeichen = '3then
      begin
        m:=1;
      end;
      if zeichen = '4then
      begin
        m:=1;
      end;
      if zeichen = '5then
      begin
        m:=1;
      end;
      if zeichen = '6then
      begin
        m:=1;
      end;
      if zeichen = '7then
      begin
        m:=1;
      end;
      if zeichen = '8then
      begin
        m:=1;
      end;
      if zeichen = '9then
      begin
        m:=1;
      end;
      if m = 0 then
      begin
        tt:='';
      end;
    end;
  end;
  FSatz:=tt;
end;

procedure TForm1.numlad;
  var laenge: integer;
  var stelle: integer;
  var m: integer;
  var zeichen: string;
  var tt: string;
begin
  inummer:=0;
  laenge:=Length(ialpha);
  if laenge > 3 then
  begin
    tt:='';
    for m:=1 to 4 do
    begin
      zeichen:=Copy(ialpha,m,1);
      if zeichen <> ' then
      begin
        FSatz:=zeichen;
        Nummer;
        if FSatz <> 'then
        begin
          tt:=tt+zeichen;
        end;
      end;
    end;
    laenge:=Length(tt);
    if laenge > 0 then
    begin
      inummer:=StrToInt(tt);
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Text:=' '+Chr(169)+'LINSOFT B V S Catering Datum: '+FormatDateTime('DD.MM.YYYY',now);
  Label2.Text:='';
  if (Closestat = 0) then
  begin
    if (mtasts = 1) then
    begin
      Closestat:=1;
      mtasts:=0;
      Form1.Visible:=False;
      Form2:=TForm2.Create(self);
      Form2.Show;
    end;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Label1.Text:=' '+Chr(169)+'LINSOFT B V S Catering Datum: '+FormatDateTime('DD.MM.YYYY',now);
  Label2.Text:='';
  if (Closestat = 0) then
  begin
    if (mtasts = 1) then
    begin
      mlauf:=0;
      Form1.close;
    end;
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Label1.Text:=' '+Chr(169)+'LINSOFT B V S Catering Datum: '+FormatDateTime('DD.MM.YYYY',now);
  Label2.Text:='';
  if (Closestat = 0) then
  begin
    if (mtasts = 1) then
    begin
      Closestat:=1;
      mtasts:=0;
      Form1.Visible:=False;
      Form3:=TForm3.Create(self);
      Form3.Show;
    end;
  end;
end;

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
  Shift: TShiftState);
  var h1: integer;
  var sper: string;
begin
  if mlauf = 1 then
  begin
    if ord(Key) = 13 then
    begin
      ialpha:=Edit1.Text;
      Label2.Text:='';
      Edit1.ReadOnly:=True;
      Form1.Blankwegh;
      Form1.Blankwegv;
      if ialpha <> 'then
      begin
        name:=ialpha;
        Form1.MyQuery1.SQL.Text:='SELECT * FROM user WHERE User=:Name';
        Form1.MyQuery1.ParamByName('Name').Name:='Name';
        Form1.MyQuery1.ParamByName('Name').DataType:=ftString;
        Form1.MyQuery1.ParamByName('Name').Value:=name;
        h1:=0;
        sper:='J';
        Form1.MyQuery1.Open;
        while not Form1.MyQuery1.EOF do
        begin
          h1:=1;
          sper:=Form1.MyQuery1.Fields[10].AsString;
          Form1.MyQuery1.Next;
        end;
        Form1.MyQuery1.Close;
        if h1 = 1 then
        begin
          if sper = 'Nthen
          begin
            anzp:=0;
            mlauf:=2;
            Edit2.ReadOnly:=False;
            Edit2.Text:='';
            Edit2.SetFocus;
          end else begin
            Form1.Label2.Text:='Benutzer ist gesperrt, Administrator kontaktieren';
            mlauf:=1;
            Edit1.ReadOnly:=False;
            Edit1.Text:='';
            Edit1.SetFocus;
          end;
        end else begin
          Form1.Label2.Text:='Benutzer nicht vorhanden';
          mlauf:=1;
          Edit1.ReadOnly:=False;
          Edit1.Text:='';
          Edit1.SetFocus;
        end;
      end else begin
        Form1.Label2.Text:='Benutzer muß eingegeben werden';
        mlauf:=1;
        Edit1.ReadOnly:=False;
        Edit1.Text:='';
        Edit1.SetFocus;
      end;
    end;
  end;
end;

procedure TForm1.Edit2KeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
  Shift: TShiftState);
  var h1: integer;
  var pw1: string;
  var pw2: string;
  var zw1: string;
  var zw2: string;
  var zw3: string;
  var zw4: string;
  var zw5: integer;
  var zw6: string;
  var zw7: string;
  var zw8: string;
  var zw9: TDate;
  var zw10: TDate;
  var zw11: string;
  var zw12: string;
  var zw13: string;
begin
  if mlauf = 2 then
  begin
    if ord(Key) = 13 then
    begin
      ialpha:=Edit2.Text;
      Label2.Text:='';
      Edit2.ReadOnly:=True;
      Form1.Blankwegh;
      Form1.Blankwegv;
      if ialpha <> 'then
      begin
        pw1:=ialpha;
        Form1.MyCommand1.SQL.Clear;
        Form1.MyCommand1.SQL.Add('UPDATE user SET PW2=PASSWORD('''+pw1+''') WHERE User=:Name');
        Form1.MyCommand1.ParamByName('Name').Name:='Name';
        Form1.MyCommand1.ParamByName('Name').DataType:=ftString;
        Form1.MyCommand1.ParamByName('Name').Value:=name;
        Form1.MyCommand1.Execute;
        if SqlRet then
        begin
          Form1.MyQuery1.SQL.Text:='SELECT * FROM user WHERE User=:Name';
          Form1.MyQuery1.ParamByName('Name').Name:='Name';
          Form1.MyQuery1.ParamByName('Name').DataType:=ftString;
          Form1.MyQuery1.ParamByName('Name').Value:=name;
          h1:=0;
          Form1.MyQuery1.Open;
          while not Form1.MyQuery1.EOF do
          begin
            h1:=1;
            vorname:=Form1.MyQuery1.Fields[0].AsString;
            nachname:=Form1.MyQuery1.Fields[1].AsString;
            superu:=Form1.MyQuery1.Fields[11].AsString;
            pw1:=Form1.MyQuery1.Fields[13].AsString;
            pw2:=Form1.MyQuery1.Fields[14].AsString;
            Form1.MyQuery1.Next;
          end;
          Form1.MyQuery1.Close;
          if h1 = 1 then
          begin
            if pw1 = pw2 then
            begin
              benutzer:=name;
              BUser:=name;
              mlauf:=0;
              Button1.Visible:=True;
              Button3.Visible:=True;
              Label5.Visible:=False;
              Label6.Visible:=False;
              Edit1.Visible:=False;
              Edit2.Visible:=False;
              Form1.ActiveControl:=Button1;
            end else begin
              anzp:=anzp + 1;
              if anzp = 3 then
              begin
                Form1.MyCommand1.SQL.Clear;
                Form1.MyCommand1.SQL.Add('UPDATE user SET Sperre=:SP WHERE User=:Name');
                Form1.MyCommand1.ParamByName('SP').Name:='SP';
                Form1.MyCommand1.ParamByName('SP').DataType:=ftString;
                Form1.MyCommand1.ParamByName('SP').Value:='J';
                Form1.MyCommand1.ParamByName('Name').Name:='Name';
                Form1.MyCommand1.ParamByName('Name').DataType:=ftString;
                Form1.MyCommand1.ParamByName('Name').Value:=name;
                Form1.MyCommand1.Execute;
                if SqlRet then
                begin
                  Form1.MyQuery1.SQL.Text:='SELECT * FROM user WHERE User=:Name';
                  Form1.MyQuery1.ParamByName('Name').Name:='Name';
                  Form1.MyQuery1.ParamByName('Name').DataType:=ftString;
                  Form1.MyQuery1.ParamByName('Name').Value:=name;
                  Form1.MyQuery1.Open;
                  zw1:='';
                  zw2:='';
                  zw3:='';
                  zw4:='';
                  zw5:=0;
                  zw6:='';
                  zw7:='';
                  zw8:='';
                  zw9:=StrToDate('01.01.1900');
                  zw10:=StrToDate('01.01.1900');
                  zw11:='';
                  zw12:='';
                  zw13:='';
                  while not Form1.MyQuery1.EOF do
                  begin
                    zw1:=Form1.MyQuery1.Fields[0].AsString;
                    zw2:=Form1.MyQuery1.Fields[1].AsString;
                    zw3:=Form1.MyQuery1.Fields[2].AsString;
                    zw4:=Form1.MyQuery1.Fields[3].AsString;
                    zw5:=Form1.MyQuery1.Fields[4].AsInteger;
                    zw6:=Form1.MyQuery1.Fields[5].AsString;
                    zw7:=Form1.MyQuery1.Fields[6].AsString;
                    zw8:=Form1.MyQuery1.Fields[7].AsString;
                    zw9:=Form1.MyQuery1.Fields[8].AsDateTime;
                    zw10:=Form1.MyQuery1.Fields[9].AsDateTime;
                    zw11:=Form1.MyQuery1.Fields[10].AsString;
                    zw12:=Form1.MyQuery1.Fields[11].AsString;
                    zw13:=Form1.MyQuery1.Fields[12].AsString;
                    Form1.MyQuery1.Next;
                  end;
                  Form1.MyQuery1.Close;
                  Form1.MyCommand1.SQL.Clear;
                  Form1.MyCommand1.SQL.Add('INSERT INTO huser (Huser, Hzeit, Hart, Vorname, Nachname, Strasse, Hausnummer, PLZ, Ort, Handy, Festnetz, Geburtstag, Eintritt, Sperre, Supervisor, User, PW1)'+' VALUES (:Huser, :Hzeit, :Hart, :Vname, :Nname, :Str, :Hnr, :Plz, :Ort, :Han, :Tel, :Geb, :Ein, :Spe, :Sup, :Use, :PW1)');
                  Form1.MyCommand1.ParamByName('Huser').Name:='Huser';
                  Form1.MyCommand1.ParamByName('Huser').DataType:=ftString;
                  Form1.MyCommand1.ParamByName('Huser').Value:=name;
                  Form1.MyCommand1.ParamByName('Hzeit').Name:='Hzeit';
                  Form1.MyCommand1.ParamByName('Hzeit').DataType:=ftDateTime;
                  Form1.MyCommand1.ParamByName('Hzeit').Value:=now;
                  Form1.MyCommand1.ParamByName('Hart').Name:='Hart';
                  Form1.MyCommand1.ParamByName('Hart').DataType:=ftString;
                  Form1.MyCommand1.ParamByName('Hart').Value:='System Sperre';
                  Form1.MyCommand1.ParamByName('Vname').Name:='Vname';
                  Form1.MyCommand1.ParamByName('Vname').DataType:=ftString;
                  Form1.MyCommand1.ParamByName('Vname').Value:=zw1;
                  Form1.MyCommand1.ParamByName('Nname').Name:='Nname';
                  Form1.MyCommand1.ParamByName('Nname').DataType:=ftString;
                  Form1.MyCommand1.ParamByName('Nname').Value:=zw2;
                  Form1.MyCommand1.ParamByName('Str').Name:='Str';
                  Form1.MyCommand1.ParamByName('Str').DataType:=ftString;
                  Form1.MyCommand1.ParamByName('Str').Value:=zw3;
                  Form1.MyCommand1.ParamByName('Hnr').Name:='Hnr';
                  Form1.MyCommand1.ParamByName('Hnr').DataType:=ftString;
                  Form1.MyCommand1.ParamByName('Hnr').Value:=zw4;
                  Form1.MyCommand1.ParamByName('Plz').Name:='Plz';
                  Form1.MyCommand1.ParamByName('Plz').DataType:=ftInteger;
                  Form1.MyCommand1.ParamByName('Plz').Value:=zw5;
                  Form1.MyCommand1.ParamByName('Ort').Name:='Ort';
                  Form1.MyCommand1.ParamByName('Ort').DataType:=ftString;
                  Form1.MyCommand1.ParamByName('Ort').Value:=zw6;
                  Form1.MyCommand1.ParamByName('Han').Name:='Han';
                  Form1.MyCommand1.ParamByName('Han').DataType:=ftString;
                  Form1.MyCommand1.ParamByName('Han').Value:=zw7;
                  Form1.MyCommand1.ParamByName('Tel').Name:='Tel';
                  Form1.MyCommand1.ParamByName('Tel').DataType:=ftString;
                  Form1.MyCommand1.ParamByName('Tel').Value:=zw8;
                  Form1.MyCommand1.ParamByName('Geb').Name:='Geb';
                  Form1.MyCommand1.ParamByName('Geb').DataType:=ftDateTime;
                  Form1.MyCommand1.ParamByName('Geb').Value:=zw9;
                  Form1.MyCommand1.ParamByName('Ein').Name:='Ein';
                  Form1.MyCommand1.ParamByName('Ein').DataType:=ftDateTime;
                  Form1.MyCommand1.ParamByName('Ein').Value:=zw10;
                  Form1.MyCommand1.ParamByName('Spe').Name:='Spe';
                  Form1.MyCommand1.ParamByName('Spe').DataType:=ftString;
                  Form1.MyCommand1.ParamByName('Spe').Value:=zw11;
                  Form1.MyCommand1.ParamByName('Sup').Name:='Sup';
                  Form1.MyCommand1.ParamByName('Sup').DataType:=ftString;
                  Form1.MyCommand1.ParamByName('Sup').Value:=zw12;
                  Form1.MyCommand1.ParamByName('Use').Name:='Use';
                  Form1.MyCommand1.ParamByName('Use').DataType:=ftString;
                  Form1.MyCommand1.ParamByName('Use').Value:=zw13;
                  Form1.MyCommand1.ParamByName('PW1').Name:='PW1';
                  Form1.MyCommand1.ParamByName('PW1').DataType:=ftString;
                  Form1.MyCommand1.ParamByName('PW1').Value:='';
                  Form1.MyCommand1.Execute;
                  if not SqlRet then
                  begin
                    Label2.Text:='Fehler beim Anlegen huser '+name;
                  end;
                  Form1.Label2.Text:='Passwort falsch, Benutzer '+name+' ist gesperrt';
                  mlauf:=1;
                  Edit1.ReadOnly:=False;
                  Edit1.Text:='';
                  Edit1.SetFocus;
                end else begin
                  Form1.Label2.Text:='Passwort falsch, Benutzer '+name+' konnte nicht gesperrt werden';
                  mlauf:=1;
                  Edit1.ReadOnly:=False;
                  Edit1.Text:='';
                  Edit1.SetFocus;
                end;
              end else begin
                Form1.Label2.Text:='Passwort falsch, wiederholen';
                mlauf:=2;
                Edit2.ReadOnly:=False;
                Edit2.Text:='';
                Edit2.SetFocus;
              end;
            end;
          end else begin
            Form1.Label2.Text:='Benutzer nicht vorhanden';
            mlauf:=1;
            Edit1.ReadOnly:=False;
            Edit1.Text:='';
            Edit1.SetFocus;
          end;
        end else begin
          Label2.Text:='Fehler bei Update User mit Name '+name;
          Edit2.Text:='';
          mlauf:=1;
          Edit1.ReadOnly:=False;
          Edit1.Text:='';
          Edit1.SetFocus;
        end;
      end else begin
        Form1.Label2.Text:='Passwort muß eingegeben werden';
        mlauf:=2;
        Edit2.ReadOnly:=False;
        Edit2.Text:='';
        Edit2.SetFocus;
      end;
    end;
  end;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
  Label1.Text:=' '+Chr(169)+'LINSOFT B V S Catering Datum: '+FormatDateTime('DD.MM.YYYY',now);
  Label2.Text:='';
  if sta = 1 then
  begin
    Form1.Caption:=' BVS Fahrdienst Version '+' <'+BUser+'>';
    Closestat:=0;
    mtasts:=1;
    ialpha:='';
    inummer:=0;
    inumkom:=0;
    iart:=1;
    mlauf:=0;
    mver:=0;
    sta:=2;
    sperr:=1;
    benutzer:='';
    DateSeparator:='.';
    ShortDateFormat:='dd.mm.yyyy';
    CurrencyString:='';
    ThousandSeparator:=Chr(0);
    DecimalSeparator:=',';
    CurrencyDecimals:=2;
    if dcon = 0 then
    begin
      MyConnection1.Open;
    end;
    Edit1.ReadOnly:=True;
    Edit2.ReadOnly:=True;
    Button1.Visible:=False;
    Button3.Visible:=False;
    if dcon = 1 then
    begin
      mlauf:=1;
      Edit1.ReadOnly:=False;
      Edit1.Text:='';
      Edit1.SetFocus;
    end;
  end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Label1.Text:=' '+Chr(169)+'LINSOFT B V S Catering Datum: '+FormatDateTime('DD.MM.YYYY',now);
  Form1.Cursor:=crDefault;
  if dcon = 1 then
  begin
    MyConnection1.Close;
  end;
  DateSeparator:=sdate1;
  ShortDateFormat:=sdate2;
  CurrencyString:=vwaehrs;
  ThousandSeparator:=vtaus;
  DecimalSeparator:=vdezim;
  CurrencyDecimals:=vwaehrz;
  Action:=TCloseAction.caFree;
  Form1.Free;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  Label1.Text:=' '+Chr(169)+'LINSOFT B V S Catering Datum: '+FormatDateTime('DD.MM.YYYY',now);
  if (abbruch) then
  begin
    CanClose:=true;
  end else begin
    Form1.Cursor:=crDefault;
    CanClose:=false;
    if (Closestat = 0) then
    begin
      JaNein:=messagedlg('Programm-Ende ?', TMsgDlgType.mtConfirmation, [TMsgDlgBtn.mbYes, TmsgDlgBtn.mbNo], 0);
      if (JaNein = mrYes) then
      begin
        CanClose:=true;
      end;
    end;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
  var ranz: integer;
  var anz: word;
  var xuser: string;
  var heute: string;
  var h1: integer;
  var h3: string;
begin
  Label1.Text:=' '+Chr(169)+'LINSOFT B V S Catering Datum: '+FormatDateTime('DD.MM.YYYY',now);
  Label2.text:='';
  Closestat:=0;
  mtasts:=1;
  ialpha:='';
  inummer:=0;
  inumkom:=0;
  iart:=1;
  mlauf:=0;
  BUser:='unknown';
  heute:=FormatDateTime('DD.MM.YYYY',now);
  h1:=StrLen(PChar(heute));
  if (h1 = 10) then
  begin
    h3:=Copy(heute, 1, 2);
    Tag:=StrToInt(h3);
    h3:=Copy(heute, 4, 2);
    Monat:=StrToInt(h3);
    h3:=Copy(heute, 7, 4);
    Jahr:=StrToInt(h3);
  end;
  vwaehrs:=CurrencyString;
  vtaus:=ThousandSeparator;
  vdezim:=DecimalSeparator;
  vwaehrz:=CurrencyDecimals;
  sdate1:=DateSeparator;
  sdate2:=ShortDateFormat;
  DateSeparator:='.';
  ShortDateFormat:='dd.mm.yyyy';
  CurrencyString:='';
  ThousandSeparator:=Chr(0);
  DecimalSeparator:=',';
  CurrencyDecimals:=2;
  abbruch:=false;
  sta:=1;
  dcon:=0;
  MyConnection1.Connected:=False;
  MyQuery1.Active:=False;
  Form1.Caption:=' BVS Fahrdienst Version '+' <'+BUser+'>';
  Label1.Text:=' '+Chr(169)+'LINSOFT B V S Catering Datum: '+FormatDateTime('DD.MM.YYYY',now);
end;

procedure TForm1.MyCommand1AfterExecute(Sender: TObject; Result: Boolean);
begin
  SqlRet:=Result;
end;

procedure TForm1.MyCommand1BeforeExecute(Sender: TObject);
begin
  SqlRet:=False;
end;

procedure TForm1.MyConnection1AfterConnect(Sender: TObject);
begin
  if MyConnection1.Connected then
  begin
    dcon:=1;
  end else begin
    JaNein:=messagedlg('keine Verbindung zur Datenbank', TMsgDlgType.mtError, [TMsgDlgBtn.mbOk], 0);
    Form1.close;
  end;
end;

procedure TForm1.MyConnection1Error(Sender: TObject; E: EDAError;
  var Fail: Boolean);
begin
  Fail:=False;
  Label2.Text:='Connection-Error: '+IntToStr(E.ErrorCode);
end;

end.
siehe Edit1.KeyUp und Edit2.KeyUp.
Edit1.Keyup läuft ohne Probleme.
Zum Edit2.KeyUp kommt das Programm nicht hin.

Danke und Gruß
Jürgen
Miniaturansicht angehängter Grafiken
bild2.jpg  
Jürgen Linder

Geändert von juelin ( 4. Jul 2019 um 19:04 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
7.929 Beiträge
 
Delphi XE4 Professional
 
#2

AW: Firemonkey Segmentation fault (11)

  Alt 4. Jul 2019, 17:36
Hallo,
bitte die Delphi-Tags drum rum

Augenkrebs-Gefahr

Code Hast Du beim Compilieren irgendwelche Warnungen übersehen?

Delphi-Quellcode:
if assigned(Form2) then
begin
Form2:=nil;
end;
Hier gibst Du Form2 nicht frei (zumindestens bei der VCL würde das Form2.Free fehlen);
Heiko

Geändert von hoika ( 4. Jul 2019 um 17:43 Uhr)
  Mit Zitat antworten Zitat
juelin

Registriert seit: 9. Mai 2006
Ort: Mannheim
107 Beiträge
 
Delphi XE5 Professional
 
#3

AW: Firemonkey Segmentation fault (11)

  Alt 4. Jul 2019, 19:08
Entschuldigung, war mein Fehler.
Code jetzt formatiert.
Jürgen Linder
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.119 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Firemonkey Segmentation fault (11)

  Alt 4. Jul 2019, 19:21
Ich würde mal versuchen in FormCreate & FormActivate nichts Wesentliches zu machen, sondern Alles erst in/nach FormShow.
Dann ist die App komplett gestartet und das Phone OS wird sie nicht beim Starten rauswerfen.
Generell Alles rausnehmen was die App längere Zeit blockieren kann, denn wegen sowas kann vom OS dann deine App einfach gekillt werden.

Insbesondere würde ich die direkte SQL-Verwendung checken, das könnte schon das Hauptproblem sein.
Auf mobilen Platformen am Besten mit lkaler Sqlite oder externem REST Server arbeiten.
Direkte DB-Zugriffe gehen nur bedingt.
  Mit Zitat antworten Zitat
juelin

Registriert seit: 9. Mai 2006
Ort: Mannheim
107 Beiträge
 
Delphi XE5 Professional
 
#5

AW: Firemonkey Segmentation fault (11)

  Alt 4. Jul 2019, 19:57
Fehler tritt nicht beim Starten auf,
sondern erst nachdem Edit1 komplett eingegeben ist und mit ENTER abgeschlossen.
Focus steht auf Edit2.
Jürgen Linder
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
7.929 Beiträge
 
Delphi XE4 Professional
 
#6

AW: Firemonkey Segmentation fault (11)

  Alt 4. Jul 2019, 20:36
Hallo,
nun die KeyUp2-Methode lädt aufgrund der extremen Länge zum Verweilen ein ...

Wo soll man dort einen Fehler finden?
Heiko
  Mit Zitat antworten Zitat
juelin

Registriert seit: 9. Mai 2006
Ort: Mannheim
107 Beiträge
 
Delphi XE5 Professional
 
#7

AW: Firemonkey Segmentation fault (11)

  Alt 4. Jul 2019, 20:58
ja, nach Edit2KeyUp kommt er ja gar nicht hin.
Jürgen Linder
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
1.507 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Firemonkey Segmentation fault (11)

  Alt 4. Jul 2019, 22:46
Delphi-Quellcode:
if assigned(Form2) then
begin
Form2:=nil;
end;
Hier gibst Du Form2 nicht frei (zumindestens bei der VCL würde das Form2.Free fehlen);
Soweit ich das verstanden habe geht es um Android als Ziel und da haben wir immer noch ARC, was bedeutet,
dass Free auch nur das Ding intern auf nil setzt und damit den Referenzzähler runter zählt.

Ja, man könnte Free stattdessen aufrufen um besser Win32 kompatibel zu sein und für den Zeitpunkt, an
dem ARC unter Mobile wegfällt vorbereitet zu sein, ich glaube aber nicht dass der Fehler daher kommt.

Noch ein Tipp an den OP: nicht vor jede Variablen Deklaration muss man var davor schreiben wenn man
mehrere aufeinanderfolgende hat. Es genügt dann bei der ersten.

Beispiel:

Delphi-Quellcode:
var
  i : Integer;
  s: string;
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.119 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Firemonkey Segmentation fault (11)

  Alt 5. Jul 2019, 11:44
Fehler tritt nicht beim Starten auf,
sondern erst nachdem Edit1 komplett eingegeben ist und mit ENTER abgeschlossen.
Focus steht auf Edit2.
Also könntest Du doch prima debuggen und die Stelle finden wo der Fehler auftritt.
Einfach Breakpoint in KeyUp setzen, und durchsteppen, das wäre zumindest das einfachste.
Es könnten noch einige andere Probleme drin sein, da ist sicher Einiges was man optimieren könnte.
Ich tippe mal immer noch auf DB-Zugriff als Hauptursache an der Stelle, wenn die App startet, und erst bei Edit2 abstürzt.
  Mit Zitat antworten Zitat
lowmax_5

Registriert seit: 9. Mai 2003
Ort: Münster, NRW
246 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: Firemonkey Segmentation fault (11)

  Alt 5. Jul 2019, 12:05
Versuche mal unter Zielplattformen/<Android xyz> / (Rechte Taste) SDK bearbeiten den Button 'Lokalen zwischenzeicher aktualisieren' zu betätigen.Ggf. löst es das Problem.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +2. Es ist jetzt 09:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf