![]() |
String/Memo zeigt unterschiedlich an Android/Windows
Liste der Anhänge anzeigen (Anzahl: 2)
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. |
AW: String/Memo zeigt unterschiedlich an Android/Windows
Wär's möglich etwas Code zu posten, damit wir genauer sehen was du getrieben hast?
|
AW: String/Memo zeigt unterschiedlich an Android/Windows
Damit hole ich die Daten aus der DB:
Delphi-Quellcode:
und damit schreibe ich diese dann in die Memos: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;
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; |
AW: String/Memo zeigt unterschiedlich an Android/Windows
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 ...
|
AW: String/Memo zeigt unterschiedlich an Android/Windows
Liste der Anhänge anzeigen (Anzahl: 1)
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. |
AW: String/Memo zeigt unterschiedlich an Android/Windows
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? |
AW: String/Memo zeigt unterschiedlich an Android/Windows
Zitat:
Auch ein Test mit AdvMemo bringt keine Verbesserung. |
AW: String/Memo zeigt unterschiedlich an Android/Windows
Wenn ich nun
Delphi-Quellcode:
durch das
Alarm.sAlarmUeberschrift := DataModul.SQLQuery.FieldByName(feldAlarmUeberschrift).AsString;
Delphi-Quellcode:
ersetze, geht das erst einmal. Warum das bei Geräteübergreifenden automatisch funktioniert, kann ich mir leider nicht erklären.
Alarm.sAlarmUeberschrift := DataModul.SQLQuery.FieldByName(feldAlarmUeberschrift).WideAsString;
Danke und einen guten Rutsch ins neue Jahr. |
AW: String/Memo zeigt unterschiedlich an Android/Windows
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) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz