Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi "Datei C:\test.txt" -> "Datei C:est.txt" Abscha (https://www.delphipraxis.net/135886-datei-c-%5Ctest-txt-datei-c-est-txt-abscha.html)

Jackie1983 19. Jun 2009 13:18

Datenbank: MySql • Version: 5.1.33-community • Zugriff über: DirectMySQL

"Datei C:\test.txt" -> "Datei C:est.txt&qu
 
Servus,

möchte gerne diesen Datensatz "Datei C:\test.txt" in die Datenbank abspeichern.
Raus kommt "Datei C: est.txt".

Gibt es da eine extra einstellung das er \t nicht umsetzt?

Mfg

DeddyH 19. Jun 2009 13:20

Re: "Datei C:\test.txt" -> "Datei C:est.tx
 
Hast Du den String auch escaped? \t ist in C und ähnlichen Dialekten das Zeichen für einen Tabulator.

mkinzler 19. Jun 2009 13:21

Re: "Datei C:\test.txt" -> "Datei C:est.tx
 
Den String vorher codieren( addSlashes() )
http://de2.php.net/addslashes

jfheins 19. Jun 2009 13:24

Re: "Datei C:\test.txt" -> "Datei C:est.tx
 
MySQL sollte eine Funktion namens mysql_real_escape_string oder so anbieten - Bevor du Texte in die Datenbank schreibt, solltest du sie grundsätzlich durch diese Funktion schicken.

Die Funktion escapet (schreibt man das so?) den Text so, dass nachher das in der Datenbank steht, was auch in dem Text stand.

addslashes ist dafür nicht die richtige Wahl, außerdem wird diese Funktion in Delphi wahrscheinlich schwer zu finden sein ...

DeddyH 19. Jun 2009 13:26

Re: "Datei C:\test.txt" -> "Datei C:est.tx
 
IIRC ist das aber keine MySQL- sondern eine PHP-Funktion.

Jackie1983 19. Jun 2009 13:27

Re: "Datei C:\test.txt" -> "Datei C:est.tx
 
wuste ich nicht, thx

Jackie1983 19. Jun 2009 13:52

Re: "Datei C:\test.txt" -> "Datei C:est.tx
 
habe gerade gesehen, die SQL Klasse die ich verwende, bietet sowas nicht an.
Und nu? Selber programmieren?

DeddyH 19. Jun 2009 13:56

Re: "Datei C:\test.txt" -> "Datei C:est.tx
 
Du verwendest doch MySQLDirect, oder hab ich das falsch verstanden? Da gibt es die Funktion mysql_real_escape_string, hab gerade nachgeschaut.

Jackie1983 19. Jun 2009 14:04

Re: "Datei C:\test.txt" -> "Datei C:est.tx
 
Hmmm....Das ist meine Abfrage.
Delphi-Quellcode:
function TMyDb.SQLQuery(sQuery : String): String;
var
  bex: boolean;
begin
  result := '-D1';
  if fIsOnline then
  begin
    result := '0';

    if assigned(FResult) then begin
      if FMysql.Status<>MYSQL_STATUS_READY then
        result := '1';
      FreeAndNil(FResult);
    end;

    FResult := FMysql.query(sQuery, true, bex);

    if assigned(FResult) then
      result := '0'
    else
      if ex then
        result := '0'
      else
        result := FMysql.LastError;
  end;
end;
Und ein mysql_real_escape_string habe ich nicht gefunden.....

DeddyH 19. Jun 2009 14:08

Re: "Datei C:\test.txt" -> "Datei C:est.tx
 
Nur um sicherzugehen: Du verwendest diese Unit?

jfheins 19. Jun 2009 14:11

Re: "Datei C:\test.txt" -> "Datei C:est.tx
 
Ich denke, er benutzt diese hier: http://sourceforge.net/projects/directsql

In diesem Fall gibt es eine Funktion escapeStr ;)

Jackie1983 19. Jun 2009 14:11

Re: "Datei C:\test.txt" -> "Datei C:est.tx
 
nein die habe ich nicht. Ich verwende die von Cristian Nicola.

Jackie1983 19. Jun 2009 14:13

Re: "Datei C:\test.txt" -> "Datei C:est.tx
 
Zitat:

Zitat von jfheins
Ich denke, er benutzt diese hier: http://sourceforge.net/projects/directsql

In diesem Fall gibt es eine Funktion escapeStr ;)

Jup genau, dann muss ich nochmal schauen

DeddyH 19. Jun 2009 14:18

Re: "Datei C:\test.txt" -> "Datei C:est.tx
 
Nachdem das Stichwort "escape" bereits in #2 gefallen ist, hätte man auch auf die Idee kommen können, in der Unit mal nach diesem Wörtchen zu suchen :zwinker:

Jackie1983 19. Jun 2009 14:23

Re: "Datei C:\test.txt" -> "Datei C:est.tx
 
Zitat:

Zitat von DeddyH
Nachdem das Stichwort "escape" bereits in #2 gefallen ist, hätte man auch auf die Idee kommen können, in der Unit mal nach diesem Wörtchen zu suchen :zwinker:

Jup das stimmt, habe aber nicht in der helper unit gesucht sondern nur in der Client unit.

Wollte mal versuchen ob ich den ganzen String umwandeln kann.
Das geht leider nicht :( dann heist es jetzt suchen wo ich überall Daten in die DB speicher....
Delphi-Quellcode:
sQuery := EscapeStr(sQuery);
FResult := FMysql.query(sQuery, true, ex);

mirage228 19. Jun 2009 14:33

Re: "Datei C:\test.txt" -> "Datei C:est.tx
 
Du musst nur den String escapen, nicht den gesamten Query.

Beispiel:
Delphi-Quellcode:
sQuery := 'INSERT INTO WhatEever VALUES (100, ' + EscapeStr(DeinString) + ', 500)';
Edit: Was du aber noch überlegen könntest, wäre sowas wie Zeos für deine Queries zu nehmen (Stichwort "parametrisierte Queries"), dann musst Du noch den String dem gewünschten Feld zuweisen und Zeos (oder auch eine andere Zugriffskomponente) würde den Rest übernehmen.

Viele Grüße

Jackie1983 19. Jun 2009 14:35

Re: "Datei C:\test.txt" -> "Datei C:est.tx
 
Wollte mir nur was arbeit ersparen und habe es auf die ganze Query gesetzt.
Naja dann muss ich halt nur die werte ändern.


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