AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Delphi String/Memo zeigt unterschiedlich an Android/Windows
Thema durchsuchen
Ansicht
Themen-Optionen

String/Memo zeigt unterschiedlich an Android/Windows

Ein Thema von zeras · begonnen am 31. Dez 2019 · letzter Beitrag vom 31. Dez 2019
Antwort Antwort
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.633 Beiträge
 
Delphi 12 Athens
 
#1

String/Memo zeigt unterschiedlich an Android/Windows

  Alt 31. Dez 2019, 15:28
Ich habe mit einem Programm eine SQLite Datenbank erzeugt.
Für die Auswertung der Daten hatte ich "Geräteübergreifendes Formular" verwendet. Alles gut.
Nun habe ich ein neues Programm für die Auswertung nur für Windows geschrieben und es wird immer nur das erste Zeichen einer Zeichenkette angezeigt.
Für das Ansprechen habe ich die gleichen Objekte genutzt, TFDQuery, TFDPhysSQLiteDriverLink und TDFConnection.
In allen Funktionen wurde "String" genutzt. Diesem kopiere ich dann in ein Memofeld.
Hat das irgendwie mit einem Zeichensatz zu tun?
Oder wie bekomme ich wieder den ganzen String angezeigt?

Zusatz: Die Felder ich der DB sind als BLOB hinterlegt.
Miniaturansicht angehängter Grafiken
windowsversion.png   geraeteuebergreifendeversion.png  
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain

Geändert von zeras (31. Dez 2019 um 15:54 Uhr) Grund: Bilder hochgeladen
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#2

AW: String/Memo zeigt unterschiedlich an Android/Windows

  Alt 31. Dez 2019, 15:56
Wär's möglich etwas Code zu posten, damit wir genauer sehen was du getrieben hast?
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.633 Beiträge
 
Delphi 12 Athens
 
#3

AW: String/Memo zeigt unterschiedlich an Android/Windows

  Alt 31. Dez 2019, 16:01
Damit hole ich die Daten aus der DB:
Delphi-Quellcode:

Function Tfmain.GetAlarmFromDB(iAlarm: integer; var Alarm: tAlarm): Boolean;
begin
  Result := False;

  try

    SQLQuery.SQL.Text := Format('SELECT * FROM %s Where %s = %d', [MainTable, feldAlarmNummer, iAlarm]);
    SQLQuery.Open();

    if SQLQuery.RowsAffected = 0 then begin
      Exit; //Alarmnummer ist nicht vorhanden, dann Möglichkeit zum Neuanlegen geben
    end;

    Alarm.iAlarmNo := SQLQuery.FieldByName(feldAlarmNummer).AsInteger;
    Alarm.sAlarmUeberschrift := SQLQuery.FieldByName(feldAlarmUeberschrift).AsString;
    Alarm.sAlarmBeschreibung := SQLQuery.FieldByName(feldAlarmBeschreibung).AsString;
    Alarm.sAlarmHinweis := SQLQuery.FieldByName(feldAlarmHinweis).AsString;
    Alarm.sAlarmAktion := SQLQuery.FieldByName(feldAlarmAktion).AsString;
    Alarm.sEigeneHinweise := SQLQuery.FieldByName(feldAlarmEigeneHinweise).AsString;
    Alarm.iID := SQLQuery.FieldByName(feldID).AsInteger;
    Result := True;

  finally

  end;
end;
und damit schreibe ich diese dann in die Memos:

Delphi-Quellcode:
//Daten aus dem Alarm record in das Formular schreiben
Procedure Tfmain.Record2Form(Alarm: tAlarm);
begin
  LabAlarmNummer.Text := Format('A %.5d', [Alarm.iAlarmNo]);
  meUeberschrift.Text := Alarm.sAlarmUeberschrift;
  meBeschreibung.Text := Alarm.sAlarmBeschreibung;
  meHinweis.Lines.Text := Alarm.sAlarmHinweis;
  meAktion.Lines.Text := Alarm.sAlarmAktion;
  meEigeneHinweise.Text := Alarm.sEigeneHinweise;
  LabIDPlatzhalter.Text := Alarm.iID.ToString;
end;
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
880 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: String/Memo zeigt unterschiedlich an Android/Windows

  Alt 31. Dez 2019, 16:45
Das riecht ganz stark danach, als würde irgendwo ein 2-Byte-String (UnicodeString) zwischendurch als PAnsiChar interpretiert, und das "Null-Füllbyte" des ersten Zeichens entsprechend als Terminator, also Ende der Zeichenkette. Oder etwas in dieser Richtung ...
The angels have the phone box.
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.633 Beiträge
 
Delphi 12 Athens
 
#5

AW: String/Memo zeigt unterschiedlich an Android/Windows

  Alt 31. Dez 2019, 17:00
Wie im Bild gezeigt, stehen die Zeichen im Objekt "Alarm.sAlarmUeberschrift"
Nach der Zuweisung steht dann im Objekt "meUeberschrift.Text" nur noch das erste Zeichen.
Ein AnsiChar ist nicht mehr dazwischen. Jedenfalls sehe ich nichts.
Miniaturansicht angehängter Grafiken
windowsversion02.png  
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
880 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: String/Memo zeigt unterschiedlich an Android/Windows

  Alt 31. Dez 2019, 17:11
Ja, aber jedes zweite Byte dort ist 0, wie üblich in einem UnicodeString, in dem nur a-z (und ein paar weitere Zeichen) vorkommen. Und irgendwo in deinem Code (oder in dem der verwendeten Komponenten) wird die erste Null als Ende der Zeichenkette interpretiert, d.h. an irgendeiner Stelle geht die Info "Das ist ein UnicodeString" verloren ...

Funktioniert es, wenn du explizit mit UnicodeString (oder WideString) statt String arbeitest?
The angels have the phone box.
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.633 Beiträge
 
Delphi 12 Athens
 
#7

AW: String/Memo zeigt unterschiedlich an Android/Windows

  Alt 31. Dez 2019, 17:24

Funktioniert es, wenn du explizit mit UnicodeString (oder WideString) statt String arbeitest?
Leider bringt die Deklaration "Alarm.sAlarmUeberschrift" sowohl als UnicodeString, als auch als Widestring keine Verbeserung.

Auch ein Test mit AdvMemo bringt keine Verbesserung.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain

Geändert von zeras (31. Dez 2019 um 17:26 Uhr)
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.633 Beiträge
 
Delphi 12 Athens
 
#8

AW: String/Memo zeigt unterschiedlich an Android/Windows

  Alt 31. Dez 2019, 17:37
Wenn ich nun

    Alarm.sAlarmUeberschrift := DataModul.SQLQuery.FieldByName(feldAlarmUeberschrift).AsString; durch das

    Alarm.sAlarmUeberschrift := DataModul.SQLQuery.FieldByName(feldAlarmUeberschrift).WideAsString; ersetze, geht das erst einmal. Warum das bei Geräteübergreifenden automatisch funktioniert, kann ich mir leider nicht erklären.

Danke und einen guten Rutsch ins neue Jahr.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: String/Memo zeigt unterschiedlich an Android/Windows

  Alt 31. Dez 2019, 17:39
Kann sein das in deiner DB-Verbindung noch eine Codierungseinstellung nötig ist.
Ich hätte zwar in 2019 erwartet das sowas immer automatisch läuft, aber bei SQLite sind meine versuche doch schon ein paar Jahre her (und auch noch mit D6)
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort


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 +1. Es ist jetzt 18: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