Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Apostrophe in SQL Statement ersetzen (https://www.delphipraxis.net/71666-apostrophe-sql-statement-ersetzen.html)

Andidreas 19. Jun 2006 10:26

Datenbank: MySQL • Version: 4.0.19 • Zugriff über: MySqlDac

Apostrophe in SQL Statement ersetzen
 
hi @ all,

ich hab grad folgendes problem:

im moment erstell ich aus einem .txt file eine db datei...
in denn datensätzen die ich aus dem .txt file einlese kann es sein, das auch apostrophe vorhanden sind die ich mit in die db datei übernehmen muss...

wenn ich denn string (bzw. die .txt zeile) einfach so in mein sql statment übernehme, dann krieg ich nen fehler...

denn fehler beheb ich dadurch, dass ich ein ' durch zwei ' ersetze
bsp. Rock'n'Roll ergibt Rock''n''Roll

um die apostrophe in meine string zu ersetzen hab ich mir folgende funktion gebastelt:

Delphi-Quellcode:
function TMain_Form.fnapostrophe(sRow : String) : String;

var
arPos             : Array[1..10] of String;
i, i2, iAnz, iLen, iPos : Integer;


begin

  iLen := Length(sRow);
  iAnz := 0;

  For i := 0 To iLen Do
  Begin
    If sRow[i] = #39 Then
    Begin
      Inc(iAnz);
      arPos[iAnz] := IntToStr(i);
    End;
  End;

  For i2 := iAnz DownTo 1 Do
  Begin
    iPos := StrToInt(arPos[i2]);
    Insert(#39, sRow, iPos);
  End;

  fnapostrophe := sRow;

end;
jetzt meine frage:
weiß jemand ob es für meine funktion auch schon eine funktion von delphi gibt die genau das macht???
hat jemand vielleicht noch nen vorschlag wies noch einfacher geht???

sakura 19. Jun 2006 10:29

Re: Apostrophe in SQL Statement ersetzen
 
Schau Dir mal die Funktion Delphi-Referenz durchsuchenQuotedStr (ing :gruebel:) an.

...:cat:...

mkinzler 19. Jun 2006 10:33

Re: Apostrophe in SQL Statement ersetzen
 
Oder Verwende Parameter.

Andy U 19. Jun 2006 11:12

Re: Apostrophe in SQL Statement ersetzen
 
Hallo Andidreas,

versuch's doch mit "AnsiReplaceString".

Delphi-Quellcode:
...
var
  SRow : String;
begin
  SRow:= AnsiReplaceStr(SRow, #39, #39+#39);
...
vgl:
www.delphibasics.co.uk

Ich hoffe, das ist das was du suchst und dass das mit dem "#39" und "#39+#39" klappt :roll: !


mfG

Andy

markusl 19. Jun 2006 11:50

Re: Apostrophe in SQL Statement ersetzen
 
Hallo Andidreas,

wie schon mkinzler sagte kann ich Dir auch wirklich nur empfehlen, Parameter zu nutzen.
Damit brauchst Du dich nicht mit dem Quoting zu beschäftigen, sondern
überlässt das ganze der Datenbankkomponente.
Da du ja wie angegeben mit MyDAC von CoreLabs arbeitest sollte das
auch kein Problem sein.

Delphi-Quellcode:
with query do
begin
   SQL.Add('INSERT INTO tab(id,wert) VALUES (:id,:wert)');
   ParamByName('ID').AsInteger :=xyz;
   ParamByName('WERT').AsString := sFromFile;
end;

HTH

Markus

Angel4585 19. Jun 2006 12:27

Re: Apostrophe in SQL Statement ersetzen
 
Also ich nehm immer " oder zweimal ' also '' :stupid:

Andidreas 19. Jun 2006 13:35

Re: Apostrophe in SQL Statement ersetzen
 
danke für eure tipps

@sakura
QuotedStr(String) war en guter tipp, bloss hab ich da das problem, dass er mir da meinen kompletten String auch nochmal in Apostrophe setzt, der macht also aus rock'n'roll --> 'rock''n''roll' und da hab ich dann das problem, das die ich die apostrophe am anfang und am ende von meinem sql statment net gebrauchen kann....
aber trotzdem ises gut zu wissen das es so ne funktion gibt...

@Andy U
Delphi-Quellcode:
sRow := AnsiReplaceStr(sRow, #39, #39+#39);
des war en sehr guter tipp, durch die funktion kann ich meine funktion wieder komplett rausnehmen :thumb:

@mkinzler & markusl
was bringt mir das arbeiten mit parametern in diesem fall???
wenn ich meine daten in einem parameter feld in mein sql statement übergeb, hab ich aber trotzdem noch das problem mit denn apostrophen???!!!
oder lieg ich da falsch??? :gruebel:


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