Autor Beitrag
Flons
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Do 12.11.09 15:03 
Hallo zusammen,
ich habe ein, so hoffe ich, ganz simples Prob. Leider suche ich mich schon fast zu tode.
Ich verwende Delphi 7.
Hier lese ich ein DBMemo- Feld aus.
WantReturns steh auf true(MUSS).
Nun will ich den Inhalt des Memos in eine Variable packen und danach in eine DB packen.

Mein Code:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
var S,text:String;
var i:Integer;
...
S:= DBMemo2.Text.
for i:=0 to DBMemo2.Lines.Count-1 do begin
  text:= text + DBMemo2.Lines[i];
end;

Später übergebe ich die Variable text an ein SQL- Statement (TQuery).
ausblenden Quelltext
1:
qyWeiterleitung.SQL.Text := S;					


Wo ist der verd*mmte Fehler?

Vielen Dank im Voraus.

Gruß
Flons
Refreshe ich jetzt das DBMemo- Feld, wird aus einem Zeilenumbruch 2.

Vorher stand da also z.B.
Zitat:
bla
bla

jetzt stünde da
Zitat:
bla

bla
Critter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 328
Erhaltene Danke: 3

Windows 7
Delphi 7 Pro.
BeitragVerfasst: Do 12.11.09 15:12 
Hi,
user profile iconFlons hat folgendes geschrieben Zum zitierten Posting springen:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
var S,text:String;
var i:Integer;
...
S:= DBMemo2.Text.
for i:=0 to DBMemo2.Lines.Count-1 do begin
  text:= text + DBMemo2.Lines[i];
end;


wie währe es so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
var S,text:String;
var i:Integer;
...
  text:= DBMemo2.Lines.Text;
end;


Dann sollten sich auch keine Zeilenumbruch-Dopplung einschleichen.

critter

PS: Wenn du deine Quelltexte mit [Delphi] anstelle von [code] Klammerst, dann sehen sie noch besser aus ;).

_________________
Diejenigen, die grundlegende Freiheiten aufgeben, um ein wenig mehr vorrübergehende Sicherheit zu erkaufen, verdienen weder Freiheit noch Sicherheit.
(Benjamin Franklin;"The Papers of Benjamin Franklin", Vol. 6, Apr. 1, 1755, through Sep. 30, 1756)
Flons Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Do 12.11.09 15:52 
Vielen Dank für Deine Antwort, aber das Problem besteht weiterhin.

Mein Quelltext:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
var S,text: String;
var i: Integer;
var beginn : tdatetime;
begin
for i:=0 to DBMemo2.Lines.Count-1 do begin
  //text:= text + DBMemo2.Lines[i];
end;
 text:= DBMemo2.Lines.Text;


ShowMessage(text);
S:='';
S:= 'UPDATE TABELLE SET ID_XY='+ IntToStr(abc);
S:= S+ ',TEXT_EREIGNIS =' +#39 +text +#39;
S:= S+ ' WHERE BEDINGUNG =';
...
ShowMessage(S);

Im ShowMessage sieht alles korrekt aus. Es wird aber immer ein zusätzlicher Umbruch in die DB geschrieben.
Die Schleife habe ich entfernt.
Critter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 328
Erhaltene Danke: 3

Windows 7
Delphi 7 Pro.
BeitragVerfasst: Do 12.11.09 19:57 
Hmm,

wie Zeigst du dir die Daten in der DB denn an? Hast du die mal mit Delphi wieder ausgelesen und dargestellt? Nicht das es nur ein Überentfindliches DB-Tool ist, dass sowohl bei <cr> als auch bei <lf> einen Zeilenumbruch anzeigt.

Sorry, Fische ein wenig im trüben.

critter

_________________
Diejenigen, die grundlegende Freiheiten aufgeben, um ein wenig mehr vorrübergehende Sicherheit zu erkaufen, verdienen weder Freiheit noch Sicherheit.
(Benjamin Franklin;"The Papers of Benjamin Franklin", Vol. 6, Apr. 1, 1755, through Sep. 30, 1756)
Flons Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Do 12.11.09 22:01 
Hallo,
ich schreibe die Daten in eine Oracle XE- Datenbank.
Auslesen/schreiben/füllen tue ich das Ganze wieder in das Gleiche DBMemo-Feld, aus dem es kommt.

Also folgender Ablauf:
User XY schreibt in das Formular(und in das DBMemo-Feld).

Später kann der User in dem DBMemo-Feld einen zusätlichen Text schreiben(also Originaltext erweitern/ändern/löschen).
Zusätzlich kann der User über einen Schalter den Datensatz verändern/updaten:
Soll FeldXY Wert ABC annehmen? Dann drücke Schalter JA!

Jetzt ändere ich den Text der TQuery über einen zugewiesenen String.

Über den Schalter wird also das Formular bearbeitet und somit wird der (möglicherweise erweiterte) Inhalt des Formulares/DBMemo-Feldes wieder in die DB geschrieben(Update über TQuery).
Bei diesem Update sieht es so aus, als wenn bei jedem Zeilenumbruch(Return), den der User in das DBMemo-Feld eingegebn hat, ein weiterer Zeilenumbruch(Return) hinzugefügt wird.

Also statt
ausblenden Quelltext
1:
2:
bla
bla

stünde dann da wie schon erwähnt:
ausblenden Quelltext
1:
2:
3:
bla

bla


Gruß
Flons
Bernhard Geyer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 721
Erhaltene Danke: 3



BeitragVerfasst: Fr 13.11.09 09:05 
Stell mal dein INSERT/Update-Statement auf parametrisierte Abfrage um. Vermutlich löst sich das Problem bei Verwendung von Parametern.

So wie du es jetzt machst solltest du hoffen das der User kein "bla'; DELETE FROM TABELLE; //" eingibt um per SQL-Injection deine Tabellen zu löschen.
Flons Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Fr 13.11.09 09:15 
user profile iconBernhard Geyer hat folgendes geschrieben Zum zitierten Posting springen:
Stell mal dein INSERT/Update-Statement auf parametrisierte Abfrage um. Vermutlich löst sich das Problem bei Verwendung von Parametern.

Meinst Du die Eigenschaft "ParamCheck" auf "True" setzen?

Das steht auf "True".

Noch einen Lösungsvorschlag?

Edit:
Ich habe, bevor das Insert/Update ausgeführt wird noch folgenden Code eingefügt:
ausblenden Delphi-Quelltext
1:
2:
text:=stringreplace(text,#13#10,#13,[rfReplaceAll]);
text:=stringreplace(text,#13#10#13#10,#13,[rfReplaceAll]);


Das Geile:
In einem ShowMessage sieht der Text richtig aus, in der DB kommt es nur mit einem doppelten Umbruch an.


Zuletzt bearbeitet von Flons am Fr 13.11.09 09:35, insgesamt 1-mal bearbeitet
Bernhard Geyer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 721
Erhaltene Danke: 3



BeitragVerfasst: Fr 13.11.09 09:34 
user profile iconFlons hat folgendes geschrieben Zum zitierten Posting springen:
Meinst Du die Eigenschaft "ParamCheck" auf "True" setzen?

Das steht auf "True".

Das bringt aber nix wenn du keine Parameter verwendest!

ausblenden Delphi-Quelltext
1:
2:
3:
myquery.SQL.Text := 'Update MyTable set MyFeld = :MyFeld where MyKey = :MyKey';
myquery.ParamByName('MyFeld').AsString := 'Bla';
myquery.ParamByName('MyKey').AsSring := 'BlaBla';
Flons Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Fr 13.11.09 10:44 
user profile iconBernhard Geyer hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconFlons hat folgendes geschrieben Zum zitierten Posting springen:
Meinst Du die Eigenschaft "ParamCheck" auf "True" setzen?

Das steht auf "True".

Das bringt aber nix wenn du keine Parameter verwendest!

ausblenden Delphi-Quelltext
1:
2:
3:
myquery.SQL.Text := 'Update MyTable set MyFeld = :MyFeld where MyKey = :MyKey';
myquery.ParamByName('MyFeld').AsString := 'Bla';
myquery.ParamByName('MyKey').AsSring := 'BlaBla';


Ich habe das jetzt genau so gemacht.
Allerdings kommt jetzt die Fehlermeldung
Zitat:

qyMeineAbfrage: Typ für Feld XY ist unbekannt.


Man, ich dreh hier gleich durch.
Kannst Du mir das noch mal erklären, bitte?!
Bernhard Geyer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 721
Erhaltene Danke: 3



BeitragVerfasst: Fr 13.11.09 14:16 
Bei der Params-Auflistung kannst du hier einiges einstellen. Genaueres liefert die Hilfe von Delphi.
Meine letzten BDE-Erfahrungen sind schon (glücklicherweise) 5 Jahre her.

Ich würde eh empfehlen native Zugriffskompos wie von DevArt für den Zugriff auf Oracle zu nehmen.