Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Stringgrid und UTF8 (https://www.delphipraxis.net/188394-stringgrid-und-utf8.html)

wschrabi 27. Feb 2016 18:19

Datenbank: MySQL • Version: 5 • Zugriff über: MyDAC

Stringgrid und UTF8
 
Hallo,
ich habe folgendes Problem:

Delphi-Quellcode:
      myaustr:=Unicodestring(stringreplace(StringGrid3.Cells[1,CitNameIdx],'?','_',[rfReplaceAll])); // this is not working.
myaustr:='Birkmayer, G%';    // this case works fine
WriteLogMemo('Ask for: '+myaustr);
//MyQuery3.ParamByName('AU').AsString:=austr;
MyQuery3.SQL.text := Format('SELECT cites, auname, id from aunames where aunames.auname like ''%s''  order by cites desc; ',[myaustr]);
Wenn ich myaustr fix hineinprogrammiere klappt es.
doch wenn ich es aus einem eingelesenen Stringgrid nehme nicht.
Ist StringGrid3.Cells kein UNicode string?
Bin für jeden Tip dankbar (verwende Delphi XE6)
DANKE
Walter

PS: WIe ich bemerkte, kann es auch am EMS QImport3Wizard (version 3.9.5.3) liegen.
Denn wenn ich ins Stringgrid fix den Namen hineinprogrammiere geht es auch.
Obwohl im Stringrid sieht alles ok aus. (Umlaute und so)


Sorry ich habe den Fehler schon, in dem XSL File waren die Nachnamen mit einem Blank und dann das KOmma.
Immer wo anders gesucht und nix gefunden.
DAnke

haentschman 28. Feb 2016 07:14

AW: Stringgrid und UTF8
 
Moin...:P
Zitat:

Bin für jeden Tip dankbar
:zwinker: Das nehme ich dann mal wörtlich...

Delphi-Quellcode:
myaustr:=Unicodestring(stringreplace(StringGrid3.Cells[1,CitNameIdx],'?','_',[rfReplaceAll]));
... niemals visuelle Controls als Datenspeicher mißbrauchen. In deinem Falle bedeutet das nur Daten in Richtung Stringrid für die Anzeige und niemals in den Zellen lesen. In der Regel hängt man an den Listeneintrag das Datenobjekt an und liest darin.
Beispiel:
Im Datenobjekt ist das Geburtsdatum ein TDateTime. Je nach Ländereinstellung könnte man das im Grid anders darstellen. Im Datenobjekt bleibt es ein TDateTime. :zwinker: Wenn du mit dem Gridinhalt "rechnen" wolltest, müßtest du den String erst immer wieder zum TDateTime wandeln.

Delphi-Quellcode:
MyQuery3.SQL.text := Format('SELECT cites, auname, id from aunames where aunames.auname like ''%s'' order by cites desc; ',[myaustr]);
... LIKE ist in einer SQL Abfrage eher ungünstig. Da kann das DBMS keinen Index benutzen. Hier sollte man zumindes mal Überlegungen anstellen ob sich das durch ein optimiertes Datenbankdesign entfernen läßt.

Delphi-Quellcode:
MyQuery3.ParamByName('AU').AsString:=austr;
... Richtig: SQL Anweisungen grundsätzlich mit Parametern.

:hi:

Bernhard Geyer 28. Feb 2016 08:36

AW: Stringgrid und UTF8
 
Zitat:

Zitat von haentschman (Beitrag 1331588)
Zitat:

Delphi-Quellcode:
MyQuery3.SQL.text := Format('SELECT cites, auname, id from aunames where aunames.auname like ''%s'' order by cites desc; ',[myaustr]);
... LIKE ist in einer SQL Abfrage eher ungünstig. Da kann das DBMS keinen Index benutzen. Hier sollte man zumindes mal Überlegungen anstellen ob sich das durch ein optimiertes Datenbankdesign entfernen läßt.

Eine Like stellt nur ein Problem dar wenn ein Wildcard am Anfang vorhanden ist.
Suche z.B. nach "Müller*" (bzw. im SQL "Müller%") stellt kein Problem dar da hier immer noch der Index verwendet werden kann.


Aber gut das du den Fehler schon gefunden hast.
Leerzeichen sind gemein das man sie oft auch nicht gleich erkennt.

haentschman 28. Feb 2016 08:55

AW: Stringgrid und UTF8
 
Zitat:

Eine Like stellt nur ein Problem dar wenn ein Wildcard am Anfang vorhanden ist.
:zwinker: Schon richtig. Von dieser Möglichkeit muß man aber grundsätzlich ausgehen.

himitsu 28. Feb 2016 10:34

AW: Stringgrid und UTF8
 
Zitat:

stellt kein Problem dar da hier immer noch der Index verwendet werden kann.
Kommt auf den Index drauf an.
Bäumchen meistens ja und Hashs nö.

LIKE auf ein INTEGER-Feld ist auch nicht so praktisch.

Und das mit den Parametern wurde schon genannt, wobei das nicht nur auf SQL-Injection bezogen ist, denn hier
Delphi-Quellcode:
myaustr:='Meier''s'; // Meier's
knallt es auch.

wschrabi 1. Mär 2016 09:21

AW: Stringgrid und UTF8
 
Schönen DANK an alle, wieder was gelernt!
Begzl: Stringgrid als Datenspeicher: Ich habe ein XLS in ein Stringgrid eingelesen damit ich dort auch die Daten sehen kann, daher nutze ich es.

Schönen TAG noch.
Walter


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:43 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