AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Memofeld auslesen ohne Satzendezeichen ^M bzw. #13#10
Thema durchsuchen
Ansicht
Themen-Optionen

Memofeld auslesen ohne Satzendezeichen ^M bzw. #13#10

Ein Thema von Sidi61 · begonnen am 13. Jun 2006 · letzter Beitrag vom 15. Jun 2006
Antwort Antwort
Seite 1 von 2  1 2      
Sidi61

Registriert seit: 13. Jun 2006
97 Beiträge
 
Delphi XE5 Professional
 
#1

Memofeld auslesen ohne Satzendezeichen ^M bzw. #13#10

  Alt 13. Jun 2006, 21:53
Datenbank: dBase • Version: 7 • Zugriff über: BDE
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???
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#2

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

  Alt 14. Jun 2006, 01:38
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
  Mit Zitat antworten Zitat
Sidi61

Registriert seit: 13. Jun 2006
97 Beiträge
 
Delphi XE5 Professional
 
#3

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

  Alt 15. Jun 2006, 12:05
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
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#4

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

  Alt 15. Jun 2006, 15:43
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

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

  Alt 15. Jun 2006, 15:47
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
Angehängte Dateien
Dateityp: zip php_mysql_escape_694.zip (7,1 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat
Sidi61

Registriert seit: 13. Jun 2006
97 Beiträge
 
Delphi XE5 Professional
 
#6

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

  Alt 15. Jun 2006, 16:52
Hallo marabu,

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

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

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

Besten dank für eure Hilfe
Gruß Sidi61
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

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

  Alt 15. Jun 2006, 19:11
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
  Mit Zitat antworten Zitat
Sidi61

Registriert seit: 13. Jun 2006
97 Beiträge
 
Delphi XE5 Professional
 
#8

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

  Alt 15. Jun 2006, 21:19
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#9

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

  Alt 15. Jun 2006, 21:22
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.
Markus Kinzler
  Mit Zitat antworten Zitat
Sidi61

Registriert seit: 13. Jun 2006
97 Beiträge
 
Delphi XE5 Professional
 
#10

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

  Alt 15. Jun 2006, 22:18
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

Gruß Sidi61
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:26 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