Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Memofeld auslesen ohne Satzendezeichen ^M bzw. #13#10 (https://www.delphipraxis.net/71358-memofeld-auslesen-ohne-satzendezeichen-%5Em-bzw-13-10-a.html)

Sidi61 13. Jun 2006 21:53

Datenbank: dBase • Version: 7 • Zugriff über: BDE

Memofeld auslesen ohne Satzendezeichen ^M bzw. #13#10
 
Hallo zusammen,

Aufgabe: Ich muß eine SQL-Datei generieren die mit PhpMyAdmin zur Änderung einer MySQL Tabelle im Internet verwendet werden soll.

Problem: Bei den verwendeten Datenfeldern ist auch ein Memofeld dabei welches ich mit Table.fieldbyname('Memofeldname').asstring in eine Stringvariable auslese um sie in einer anderen Procedure in eine Textdatei zu schreiben. Die einzelnen Befehle der SQL-Datei müssen jeweils in einer eigenen Zeile stehen, da im Memofeld für den Anfang einer neuen Zeile ein Satzendezeichen ^M verwendet wird, bekomme ich den Memotext nicht in eine Zeile sonder dieser wird in mehreren Zeilen gespeichert worauf mir PhpMyAdmin einen Syntaxfehler bei der Verarbeitung meldet.

Wie kann ich die Satzendezeichen entfernen??? :roll:

_frank_ 14. Jun 2006 01:38

Re: Memofeld auslesen ohne Satzendezeichen ^M bzw. #13#10
 
evtl. so in etwa:

Delphi-Quellcode:
function GetTextWithoutBreaks(input:TStrings);
var i:integer;
begin
  result:='';
  for i:=0 to input.count-1 do
    result:=result+input.strings[i];
end;

s:=GetTextWithoutBreaks(memo1.lines);
//in s steht dann der memoinhalt ohne zeilenumbrüche
HTH Frank

Sidi61 15. Jun 2006 12:05

Re: Memofeld auslesen ohne Satzendezeichen ^M bzw. #13#10
 
Hallo _frank_,

der von dir beschriebene Weg ist mir bekannt, ich muß dann aber den Umweg über ein Memo machen

Memo1.lines.text := Table1.fieldbyname('blabla').asstring;

und könnte dann mit Memo1.lines so verfahren wie du es in deiner Function dargestellt hast. Ich wollte eigentlich einen direkteren Weg werde es dann aber wohl über ein unsichtbares TMemo machen müssen.

Danke für deine Mühe :thumb:

_frank_ 15. Jun 2006 15:43

Re: Memofeld auslesen ohne Satzendezeichen ^M bzw. #13#10
 
dachte das Memo hast du sowieso...

gut dann halt so (das mit den spaces kannste ja rausmachen...):

Delphi-Quellcode:
function RemoveLineBreaks(const S: string;RemoveSpaces:boolean): string;
var
  I: Integer;
  Ch: Char;
const
  LB=[#13, #10];
  WS=[#9,#32];
begin
  Result:= '';
  for I:= 1 to Length(S) do
  begin
    Ch:= S[I];
    if not (Ch in LB) then
    begin
      if (not RemoveSpaces) or (not (Ch in WS)) then
        Result:= Result + CH;
    end;
  end;
end;
HTH Frank

marabu 15. Jun 2006 15:47

Re: Memofeld auslesen ohne Satzendezeichen ^M bzw. #13#10
 
Liste der Anhänge anzeigen (Anzahl: 1)
Herzlich willkommen in der Delphi-PRAXiS, Sidi61.

Wenn du INSERT Statements für PHP/MySQL erstellen möchtest, dann solltest du die PHP-Funktion mysql_real_escape_string() in Delphi verwenden, um die Feldinhalte vorzubereiten:

Delphi-Quellcode:
function EscapeString(my: PMYSQL; s: String): String;
var
  buf: PChar;
begin
  GetMem(buf, Length(s) * 4);
  SetString(Result, buf, mysql_real_escape_string(my, buf, @s[1], Length(s)));
  FreeMem(buf, Length(s) * 4);
end;
Der Vorschlag von Frank läuft letzten Endes darauf hinaus diese Funktion selbst zu implementieren, wobei dann noch einiges an Arbeit aussteht. Einfach entfernen darf man Zeilenschaltungen natürlich nicht, sonst hat man ja den Original-Text verändert.

Freundliche Grüße vom marabu

Sidi61 15. Jun 2006 16:52

Re: Memofeld auslesen ohne Satzendezeichen ^M bzw. #13#10
 
Hallo marabu,

wow, die Funktion mysql_real_escape_string kenne ich garnicht, und mein Delphi anscheinend auch nicht :shock: Kann das sein das Delphi 6 Prof. die Funktion nicht hat?? Im Übrigen habe ich nicht begriffen was du da machst :oops:

Nachtrag: deinen download habe ich übersehen, aber ich glaube ohne Doku verstehe ich da nur Bahnhof :oops:

Hallo _frank_,
ich werde deinen Vorschlag ausprobieren und dabei die Satzendezeichen gleich mit
ersetzen.

Besten dank für eure Hilfe
Gruß Sidi61

marabu 15. Jun 2006 19:11

Re: Memofeld auslesen ohne Satzendezeichen ^M bzw. #13#10
 
Hallo.

Die Funktion mysql_real_escape_string() ist die von PHP verwendete Funktion aus der Bibliothek LIBMYSQL.DLL, auf die auch PHP zurückgreift. In der angehängten Demo zeige ich, wie man eine Verbindung zu einer MySQL-Datenbank aufbaut, damit man die Funktion benutzen kann. Dort musst du natürlich die echten credentials eintragen, und zwar von der Zieldatenbank, gegen die deine INSERT-Statements später einmal laufen sollen. Nur dann berücksichtigt die Funktion alle Besonderheiten der eingestellten Verbindung. Die Entschärfung der Feldinhalte kannst du mit Hilfe der Funktion EscapeString() oder direkt vornehmen. Das Umsetzen von sLineBreak in das HTML-Tag
finde ich nicht so prickelnd, weil es den Originaltext verändert. Und das einfache Entfernen von CR und LF führt zu ungeahnten Wort-Neuschöpfungen.

marabu

Sidi61 15. Jun 2006 21:19

Re: Memofeld auslesen ohne Satzendezeichen ^M bzw. #13#10
 
Hallo marabu,

leider habe ich von meinem PC aus keine direkte Zugriffsmöglichkeit auf die Datenbanken im Internet, deshalb gehe ich auch den Umweg und erzeuge eine SQL-Datei die ich dann mit PhPMyAdmin einspielen kann. Das funktioniert eigentlich ganz gut da ich aus Delphi heraus PhPMyAdmin aufrufen kann und mir dieser Komfort völlig ausreicht.

Gruß Sidi61

mkinzler 15. Jun 2006 21:22

Re: Memofeld auslesen ohne Satzendezeichen ^M bzw. #13#10
 
Es waäre aber doch auch möglich, den Weg über den phpMyAdmin zu sapren und direkt ein kleines php-Skript zu schreiben, welches den SQL-Befehl direkt gegen die DB ausführt.

Sidi61 15. Jun 2006 22:18

Re: Memofeld auslesen ohne Satzendezeichen ^M bzw. #13#10
 
Hallo mkinzler,

ich müsste dann die SQL-Datei hochladen und danach das script aufrufen, da sehe ich eigentlich keinen Vorteil gegenüber PhPMyAdmin. Warum sollte ich das Rad noch mal erfinden :wink:

Gruß Sidi61


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:01 Uhr.
Seite 1 von 2  1 2      

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