|
Antwort |
Registriert seit: 9. Mai 2006 Ort: Mannheim 142 Beiträge Delphi XE5 Professional |
#1
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:
siehe Edit1.KeyUp und Edit2.KeyUp.
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 = '0' then begin m:=1; end; if zeichen = '1' then begin m:=1; end; if zeichen = '2' then begin m:=1; end; if zeichen = '3' then begin m:=1; end; if zeichen = '4' then begin m:=1; end; if zeichen = '5' then begin m:=1; end; if zeichen = '6' then begin m:=1; end; if zeichen = '7' then begin m:=1; end; if zeichen = '8' then begin m:=1; end; if zeichen = '9' then 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 = 'N' then 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. Edit1.Keyup läuft ohne Probleme. Zum Edit2.KeyUp kommt das Programm nicht hin. Danke und Gruß Jürgen
Jürgen Linder
Geändert von juelin ( 4. Jul 2019 um 19:04 Uhr) |
Zitat |
Registriert seit: 5. Jul 2006 Ort: Magdeburg 8.275 Beiträge Delphi 10.4 Sydney |
#2
Hallo,
bitte die Delphi-Tags drum rum Augenkrebs-Gefahr Code Hast Du beim Compilieren irgendwelche Warnungen übersehen?
Delphi-Quellcode:
Hier gibst Du Form2 nicht frei (zumindestens bei der VCL würde das Form2.Free fehlen);
if assigned(Form2) then
begin Form2:=nil; end;
Heiko
Geändert von hoika ( 4. Jul 2019 um 17:43 Uhr) |
Zitat |
Registriert seit: 9. Mai 2006 Ort: Mannheim 142 Beiträge Delphi XE5 Professional |
#3
Entschuldigung, war mein Fehler.
Code jetzt formatiert.
Jürgen Linder
|
Zitat |
Registriert seit: 15. Mär 2007 4.094 Beiträge Delphi 12 Athens |
#4
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. |
Zitat |
Registriert seit: 9. Mai 2006 Ort: Mannheim 142 Beiträge Delphi XE5 Professional |
#5
Fehler tritt nicht beim Starten auf,
sondern erst nachdem Edit1 komplett eingegeben ist und mit ENTER abgeschlossen. Focus steht auf Edit2.
Jürgen Linder
|
Zitat |
Registriert seit: 5. Jul 2006 Ort: Magdeburg 8.275 Beiträge Delphi 10.4 Sydney |
#6
Hallo,
nun die KeyUp2-Methode lädt aufgrund der extremen Länge zum Verweilen ein ... Wo soll man dort einen Fehler finden?
Heiko
|
Zitat |
Registriert seit: 9. Mai 2006 Ort: Mannheim 142 Beiträge Delphi XE5 Professional |
#7
ja, nach Edit2KeyUp kommt er ja gar nicht hin.
Jürgen Linder
|
Zitat |
Registriert seit: 28. Feb 2016 Ort: Nordost Baden-Württemberg 2.942 Beiträge Delphi 12 Athens |
#8
Delphi-Quellcode:
Hier gibst Du Form2 nicht frei (zumindestens bei der VCL würde das Form2.Free fehlen);
if assigned(Form2) then
begin Form2:=nil; end; 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; |
Zitat |
Registriert seit: 15. Mär 2007 4.094 Beiträge Delphi 12 Athens |
#9
Fehler tritt nicht beim Starten auf,
sondern erst nachdem Edit1 komplett eingegeben ist und mit ENTER abgeschlossen. Focus steht auf Edit2. 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. |
Zitat |
Ansicht |
Linear-Darstellung |
Zur Hybrid-Darstellung wechseln |
Zur Baum-Darstellung wechseln |
ForumregelnEs 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
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
LinkBack URL |
About LinkBacks |