Autor Beitrag
Mustermann
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Fr 26.03.10 10:32 
Hallo Forum.
Ich habe ein Problem. Ich möchte mit dem SQL-Befehl nach einem teil des Textes suchen, der einen oder mehrere Hochkommata beinhält. Wie zum Beispiel OS'Microsoft. Dies wird aber nicht gemacht. Ich dachte mir man könte das mit string.Replace machen und die zweite Überladung nehmen für character dann müsste das so aussehen StringVariablenname.Replace(''','\''); und das nimmt er aber nicht an. Kann mir jemand sagen was man da machen könnte? oder gibts eine andere Möglichkeit nach einem Text zu suchen, der Hochkommata beinhält?
Danke


Moderiert von user profile iconNarses: Topic aus Programmierwerkzeuge verschoben am Fr 26.03.2010 um 12:03
Moderiert von user profile iconNarses: Topic aus Datenbanken verschoben am Fr 26.03.2010 um 14:53
JoelH
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 806
Erhaltene Danke: 17

Win10
Delphi Alexandria 11.2 Patch 1
BeitragVerfasst: Fr 26.03.10 10:58 
Probier mal
ausblenden Delphi-Quelltext
1:
s := stringreplace(s,'''','\''',[rfReplaceAll]);					

_________________
mfg. Joel
Mustermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Fr 26.03.10 11:01 
macht er nicht mit :(
JoelH
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 806
Erhaltene Danke: 17

Win10
Delphi Alexandria 11.2 Patch 1
BeitragVerfasst: Fr 26.03.10 11:32 
achso, jetzt wirds klar.

Du musst die die Hochkommas verdoppeln.

Also wenn du folgendes Statement hast

SELECT * FROM TABELLE WHERE NAME like '%OS'Microsoft%'

dann ists nicht legal.

maskiert wird das (zumindes in Oracle) indem das Hochkomma verdoppelt wird.

also

SELECT * FROM TABELLE WHERE NAME like '%OS''Microsoft%'

dann musst du natürlich den Stringreplac anpassen einfach

ausblenden Delphi-Quelltext
1:
s := stringreplace(s,'''','''''',[rfReplaceAll]);					

_________________
mfg. Joel
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Fr 26.03.10 12:09 
macht er nicht mit <-- jetzt weiss natürlich jeder ganz genau, wo das problem liegt ;)
Warum ersetzen (stringreplace), wenn du suchen willst?
suchen wirklich mit einem sql-befehl in einer Datenbank?

was willst du denn genau machen?
ein zeichen ersetzen??
einen string mit einem bestimmten zeichen in der DB (Sql) suchen?
ein Zeichen in einem String suchen ?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure Button1Click(Sender: TObject);
var s : string;
begin
  inherited;
  s := 'Ein text mit os''microsoft ';
  showmessage(s);
  // suchen per Sql
  s := 'Select ... from ... where ... like %''%';
  showmessage(s);
  // suchen im String
  if (pos('''', s) > 0then
   showmessage('Hochkomma enthalten');
  // ersetzen des ' durch ein \
  s := StringReplace(s, '''''\', [rfReplaceAll]);
  showmessage(s);
end;


mach dir mal nen button und kopier den code in die buttonclick-methode, dann siehst du evtl. besser die unterschiede

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
Mustermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Fr 26.03.10 12:36 
Ich möchte dem Benutzer die möglichkeit geben einen Text mit Hochkommata zu speichern und danach später zu suchen. OS'Microsoft war nur ein Beispiel, aber der benutzer kann einen text auch mit 20 Hochkommata speichern und wie soll ich das abfangen? Deswegen dachte ich mir string.Replace wäre nicht schlächt, weill er alle charaktere ersetzen kann, die in dem String vorkommen. Durch google Recharche habe ich gefunden, dass man die Hochkommata maskieren kann mit escabe bzw. backslash \. Wenn ich versuceh in so einem String 'm'a Hochkommata zu maskieren bekomme ich als Fehlermelgund
SQL-Syntax Error
Wie gehe ich vor: string v = A_Ausstattung_Bez.Replace("'", "\'");
Und heir knallt er: lv_MSQLDA_adapter = new MySqlDataAdapter(lvStr_Sql, con);
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Fr 26.03.10 12:45 
Weshalb escapsed Du den String nicht Serverseitig mit MYSQL_REAL_ESCAPE_STRING()? :)
bakachan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: Fr 26.03.10 12:49 
' werden für SQL doch mit einem weiteren ' maskiert oder?

also:
' -> ''
'' -> ''''
'a''b' -> ''a''''b''
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Fr 26.03.10 12:53 
Kümmere dich überhaupt nicht um die Hochkommata, sondern benutze Parameter! Dann macht der DbProvider alles selbst richtig.

Ein Minimalbeispiel steht im vorletzten Beitrag bei Der Name "Settings" ist im aktuellen Kontext nicht vorhanden. Du musst statt Oledb deine MySql-Klassen verwenden und die Parameter so angeben, wie es MySql erwartet, siehe dazu [Artikelserie] Parameter von SQL Befehlen im 3. Beitrag.

Den Suchtext holst du einfach aus InputBox.Text (nämlich der TextBox, die in der Anwendung dafür vorgesehen ist). Dann kann der Anwender eingeben, was er will, auch Hochkommata und Gänsefüßchen und Backslash (also alles, was im C#-Code umständlich ist) - und du brauchst dich um nichts zu kümmern.

Gruß Jürgen

PS. Du siehst, vollständige Informationen sind immer sinnvoll. Da hier sowohl für Delphi als auch für C# geholfen wird und manche Unterforen zu beidem gehören, hast du hier auch (für dich) falsche Hinweise bekommen.
Mustermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Fr 26.03.10 13:03 
Nein habe ich nicht Jürgen. Danke für den Hinweis.
Mustermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Fr 26.03.10 14:53 
Danke für Eure hilfe!