Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Geräteübergreifende Anwendung funktioniert nicht wirklich (https://www.delphipraxis.net/205424-geraeteuebergreifende-anwendung-funktioniert-nicht-wirklich.html)

renew 8. Sep 2020 09:39

Geräteübergreifende Anwendung funktioniert nicht wirklich
 
Geräteübergreifende Anwendung funktioniert nicht wirklich

ich habe Probleme eine geräteübergreifende Anwendung unter Windows und Android ans laufen zu bekommen. Scheint, als ob die ganzen Komponenten nicht wirklich geräteübergreifend funktioniere,
Windows 64Bit lässt sich erst gar nicht compilieren: "[dcc64 Fehler] E1026 Datei nicht gefunden: 'FMX.Filter.res'"

TListBox:
Ein einfaches
Code:
ListBox1.Items.AddObject('STATIC1', TObject(2));
funktioniert unter Android nicht: "Project xy hat die Exception-Klasse Segmentation fault(11) ausgelöst.". Unter Windows funktioniert es.

Datenbank:
Viele DB-Komponenten getestet. Am "lauffähigsten" war die TSQLConnection + TSQLQuery Komponenten.
Unter Windows gibt es einen Fehler bei "sqlQuery.Open;": "Exception EExternalException in Modul KERNELBASE.dll......"


Kleine Test-Procedure:
Code:
procedure TForm20.TestDB();
var
  sqlConnection: TSQLConnection;
  sqlQuery: TSQLQuery;
  dbPath: string;
  sqlString, debugText : string;
begin
  sqlConnection := TSQLConnection.Create(nil);
  sqlConnection.Params.AddPair('DriverName', 'Sqlite');
  sqlConnection.DriverName := 'Sqlite';
  sqlConnection.LoginPrompt := false;
  dbPath := System.IOUtils.TPath.GetDocumentsPath + PathDelim + 'sqlite_DB.db';
  sqlConnection.Params.AddPair('Database', dbPath);
  sqlConnection.Connected := true;
  // Query
  sqlString := 'Select 1 as id, ''test123'' as test';
  sqlQuery := TSQLQuery.Create(nil);
  sqlQuery.sqlConnection := sqlConnection;
  sqlQuery.sql.Clear;
  sqlQuery.sql.Add(sqlString);

  sqlQuery.Open;
  while Not sqlQuery.EOF do
  begin
    debugText := sqlQuery['test'];
    lst_wohnungen.Items.AddObject(sqlQuery['test'], TObject(Integer(sqlQuery['id'])));
    sqlQuery.next;
  end;
  sqlQuery.Free;
  sqlConnection.Free;
end;

Ist es normal, dass die geräteübergreifenden Anwendungen nicht wirklich funktionieren und öfter Probleme bereiten? Oder ist evtl. mein Rechner/RAD falsch konfiguriert?

jaenicke 8. Sep 2020 09:44

AW: Geräteübergreifende Anwendung funktioniert nicht wirklich
 
Zitat:

Zitat von renew (Beitrag 1473219)
TListBox:
Ein einfaches
Code:
ListBox1.Items.AddObject('STATIC1', TObject(2));
funktioniert unter Android nicht: "Project xy hat die Exception-Klasse Segmentation fault(11) ausgelöst.". Unter Windows funktioniert es.

TObject(2) ist auch kein gültiges Objekt. Dass da bei deinem Delphi 10.2 unter Android die Speicherverwaltung crasht, ist nicht wirklich eine Überraschung. Mach einfach mal ein richtiges Objekt draus...

Für den Datenbankzugriff würde ich mit dem alten dbExpress erst gar nicht mehr anfangen. Dort die Treiber usw. richtig einzurichten ist ein Graus und daran dürfte auch das Problem liegen. Nimm besser gleich FireDAC.

renew 8. Sep 2020 09:56

AW: Geräteübergreifende Anwendung funktioniert nicht wirklich
 
Firedac lässt sich aber nicht unter Android compilieren. Sobald ich eine TFDConnection benutze, bekomme ich den Fehler "[DCC Fataler Fehler] UMain.pas(10): F2613 Unit 'FireDAC.UI.Intf' nicht gefunden.
UMain.pas(10): Unit 'FireDAC.UI.Intf' wird von 'FireDAC.Stan.Option' verwendet"

Bekomme den Fehler auch nicht behoben. Nur deswegen bin ich auf die TSQLConnection etc umgestiegen.

Was brauche ich denn für ein Object für die Listbox?
Wenn ich ein String nehme, bekomme ich den selben Fehler:
Code:
var s:string;
begin
  s := '10';
  ListBox1.Items.AddObject('TEST STATC', TObject(s));

jaenicke 8. Sep 2020 10:01

AW: Geräteübergreifende Anwendung funktioniert nicht wirklich
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von renew (Beitrag 1473225)
Firedac lässt sich aber nicht unter Android compilieren. Sobald ich eine TFDConnection benutze, bekomme ich den Fehler "[DCC Fataler Fehler] UMain.pas(10): F2613 Unit 'FireDAC.UI.Intf' nicht gefunden.

Dann ist bei deiner Installation etwas schief. Bei mir ist die Unit unter 10.2, 10.3 und 10.4 ganz normal vorhanden:

Anhang 53014

Zitat:

Zitat von renew (Beitrag 1473225)
Was brauche ich denn für ein Object für die Listbox?

Eine eigene Klasse mit den Daten, die du an den Eintrag anhängen möchtest?

Rollo62 8. Sep 2020 10:05

AW: Geräteübergreifende Anwendung funktioniert nicht wirklich
 
Hast Du das für FD den passenden FireDAC.Phys.SQLite auf das Datenmodul geworfen ?

Und es könnte sein das auch Uses FireDAC.Phys.SQLiteWrapper.Stat fehlt.

himitsu 8. Sep 2020 10:24

AW: Geräteübergreifende Anwendung funktioniert nicht wirklich
 
Im NextGen (Android/iOS) sind Objekte Referenzgezählt, also reagieren wie IInterface und .Free macht dort garnichts.

Derartige Casts sind dort somit verboten
und wenn du sowas brauchst, dann mußt du ein Data-Objekt drumrum bauen.

Delphi-Quellcode:
type
  TDataObject = class
    Value: string;
    constructor Create(Value: string);
  end;

var s: string;
begin
  s := '10';
  ListBox1.Items.AddObject('TEST STATC', TDataObject.Create(s));




Und ja, unter anderem wegen sowas ist plattformübergreifender Code oft fast unmöglich nicht einfach, denn hier darfst du nicht casten und brauchst Objekte drumrum,
aber drüben fehlt an vielen Stellen eine automatische Speicherverwaltung, oder sowas wie OwnsObjects, und mit Objekten bist'e angearscht, wenn du versuchst die Speicherlecks zu vermeiden.

renew 8. Sep 2020 10:31

AW: Geräteübergreifende Anwendung funktioniert nicht wirklich
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von jaenicke (Beitrag 1473226)
Zitat:

Zitat von renew (Beitrag 1473225)
Firedac lässt sich aber nicht unter Android compilieren. Sobald ich eine TFDConnection benutze, bekomme ich den Fehler "[DCC Fataler Fehler] UMain.pas(10): F2613 Unit 'FireDAC.UI.Intf' nicht gefunden.

Dann ist bei deiner Installation etwas schief. Bei mir ist die Unit unter 10.2, 10.3 und 10.4 ganz normal vorhanden:

Bei mir scheinbar auch, aber werden nicht gefunden (unter Android). Kann ich irgendwo prüfen, welche (include-)Verzeichnisse für die entsprechenden "Zielplattform-Kompilate" gesetzt sind?

jaenicke 8. Sep 2020 11:07

AW: Geräteübergreifende Anwendung funktioniert nicht wirklich
 
Zitat:

Zitat von renew (Beitrag 1473232)
Kann ich irgendwo prüfen, welche (include-)Verzeichnisse für die entsprechenden "Zielplattform-Kompilate" gesetzt sind?

Du kannst mit dem Process Monitor nachschauen wo nach der Datei gesucht wird. Einfach Filter auf "Path" "contains" "FireDAC.UI.Intf.dcu" setzen, dann wirst du sehen welche Pfade verwendet werden.

renew 8. Sep 2020 13:10

AW: Geräteübergreifende Anwendung funktioniert nicht wirklich
 
Danke euch. Habe zu Testzwecken nun mal die 10.4 Community Edition runtergeladen.
Funktioniert einwandfrei. Werd ich wohl eine neue VM aufsetzen müssen.

Sherlock 8. Sep 2020 13:56

AW: Geräteübergreifende Anwendung funktioniert nicht wirklich
 
Zitat:

Zitat von renew (Beitrag 1473243)
Danke euch. Habe zu Testzwecken nun mal die 10.4 Community Edition runtergeladen.
Funktioniert einwandfrei. Werd ich wohl eine neue VM aufsetzen müssen.

Jetzt dachte ich schon da gäbe es eine Neuheit...aber scheinbar ist die Community Editon immer noch nicht weiter als 10.3.3. Habe es extra ausprobiert.

Sherlock


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 Uhr.
Seite 1 von 2  1 2      

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