![]() |
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: |
Re: Memofeld auslesen ohne Satzendezeichen ^M bzw. #13#10
evtl. so in etwa:
Delphi-Quellcode:
HTH Frank
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 |
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: |
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:
HTH Frank
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; |
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:
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.
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; Freundliche Grüße vom marabu |
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 |
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 |
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 |
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.
|
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 |
Re: Memofeld auslesen ohne Satzendezeichen ^M bzw. #13#10
Du kannst die Abfrage auch direkt an das Skript übergeben.
|
Re: Memofeld auslesen ohne Satzendezeichen ^M bzw. #13#10
was aber sicherheitsfragen eröffnet! Der zugriff auf phpmyadmin ist wohl einfacher als ein eigenes delphi-mysql-middle-tier mit vertretbar hoher sicherheit in php zu entwickeln.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz