Entwickler-Ecke

Datenbanken - MySQL DB will keine '\' annehmen


derDoc - So 28.03.04 17:05
Titel: MySQL DB will keine '\' annehmen
Ich habe hier ein sehr komisches Problem.

Eines meiner Programme benutzt die ZeosLibs, um in eine MySQL DB Daten einzutragen. Darunter sind auch Dateipfade in der Art 'X:\Dateien\MeineDatei.xyz', die als Strings eingetragen werden sollen. Wenn ich diese nun mit INSERT in die DB eintrage verschwinden die '\' und es steht in der DB 'X:DateienMeineDatei.xyz'.

Hat jemand damit schon Erfahrungen gesammelt oder eine Lösung?


Delete - So 28.03.04 18:19

Hi,

das Problem sollte behoben sein, wenn du die Backslashes escapest, also

X:\\Dateien\\MeineDatei.xyz

an die Datenbank übergibst.


neojones - Mo 29.03.04 14:22

Alternativ: mySQL nimmt auch nen normales Slash / an.


Masada - Do 15.09.05 21:14

Moin zusammen,
ich habe das gleiche Problem unter etwas anderes Vorraussetzungen und hoffe, den Thread hierfür "mißbrauchen" zu dürfen:

Ich möchte ebenso einen Pfad in der Form "c:\test.jpg" speichern.
Der Backslash geht beim Speichern immer verloren, nur leider passiert das sowohl beim normalen slash ("/") also auch wenn ich zwei backslashe ("\\") verwende.

Ich habe gelesen, dass das mit UTF-8 Codierung funktionieren soll. Diese wird AFAIK erst bei MySQL 4.1 unterstützt. Ich muss jedoch zwingend MySQL 4.0 einsetzen, da dort viel mehr als nur das kleine Programm, an dem ich rumbastel drauf laufen. Die Codierung ist aktuell "latin1".
Ich weiss wirklich nicht weiter und google ist nicht mehr mein Freund :? .

Ich setze ein: MySQL 4.0.16, Delphi 7 pro und mysql.pas (von http://www.fichtner.net/delphi/mysql.delphi.phtml ).

Vielen Dank für etwaige Hilfe.
Gruß
Masada


zemy - Fr 16.09.05 11:21

Gnz dumme Idee: wie währe es, wenn man bei Pfaden die "\" durch ein anderes Symbol ersetzt? Müsste dann eins sein, was in normalen Pfaden nicht vorkommt, wie |, :, *, ? usw. Beim auslesen müsste man dann rückersetzen...


Masada - Fr 16.09.05 11:46

Die Idee ist mir heute beim Frühstück auch gekommen als workaround.
Trotzdem intressiert es mich, ob man es auch "sauber" lösen kann. Ansonsten werde ich das wohl so machen...


Nikola - Di 20.09.05 15:12

Hallo, hatte auch das Problem und so habe ich es gelöst:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
function Wandler(Text:String;Zeichen:Char):String;
var
  Ch         : String;
  SEnd       : String;
  Position   : Byte;
  WortLaenge : Byte;
begin
  while Pos(Zeichen, Text) > 0 do
  begin
    Text[Pos(Zeichen, Text)]:= '¥';
  end;
  while Pos('¥', Text) > 0 do
  begin
    Position:=Pos('¥', Text);
    Ch:=Copy(Text,1,Position);
    WortLaenge:=Length(Text);
    SEnd:=Copy(Text,Position+1,WortLaenge);
    Text[Pos('¥', Text)]:= Zeichen;
    Text:=Concat(Ch, Zeichen);
    Delete(Text,Position,1);
    Text:=Concat(Text, Zeichen+SEnd);
  end;
  result:=Text;
end;

Artikel.Artikel_Bild:=Wandler(Artikel.Artikel_Bild,'\');


mfg. Nikola


Nikola - Di 20.09.05 15:15

Hallo, hatte auch das Problem und so habe ich es gelöst:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
function Wandler(Text:String;Zeichen:Char):String;
var
  Ch         : String;
  SEnd       : String;
  Position   : Byte;
  WortLaenge : Byte;
begin
  while Pos(Zeichen, Text) > 0 do
  begin
    Text[Pos(Zeichen, Text)]:= '¥';
  end;
  while Pos('¥', Text) > 0 do
  begin
    Position:=Pos('¥', Text);
    Ch:=Copy(Text,1,Position);
    WortLaenge:=Length(Text);
    SEnd:=Copy(Text,Position+1,WortLaenge);
    Text[Pos('¥', Text)]:= Zeichen;
    Text:=Concat(Ch, Zeichen);
    Delete(Text,Position,1);
    Text:=Concat(Text, Zeichen+SEnd);
  end;
  result:=Text;
end;

Artikel.Artikel_Bild:=Wandler(Artikel.Artikel_Bild,'\');


mfg. Nikola