helmuthelmut2000
Goto Top

DB Eintrag wieder anzeigen

Hallo,

Ich hab da ein Problem.
Ich schreibe mit einem Formular ein paar Daten in eine MSSQL2000 DB.
Da schreibe ich zum Beispiel in eine Spalte:

Das
ist
ein
Test.

Jetzt würde ich das wieder so ausgeben wollen,
aber bei mir kommt das so:

Das ist ein Test.

Also alles in einer Zeile aber nicht untereinnader oder so wie es eingegeben wird.
Weis da jemand vielleicht eine Lösung?
Oder kann ich sowas auch anders machen als mit einer DB?
Das ist im Intranet wo der IIS installiert ist und mit Frontpage wird die
Seite erstellt.

Gruß
Helmut

Content-Key: 24191

Url: https://administrator.de/contentid/24191

Printed on: April 24, 2024 at 23:04 o'clock

Member: MadMax
MadMax Jan 22, 2006 at 18:41:47 (UTC)
Goto Top
Hallo Helmut,

wenn Du einen Text eingibst, dann haben Zeilenumbrüche im allgemeinen einen ASCII-Code von 10 (LF), 13 (CR) oder 13 + 10 (CRLF). In der DB speicherst Du also etwas wie: Das(CRLF)ist(CRLF)ein(CRLF)Test.

In einem Texteditor erscheint das dann untereinander. Wenn Du es aber in einem Browser anzeigst, wird HTML verwendet und das verwendet für einen Zeilenumbruch keinen ASCII-Code sondern einen Tag, nämlich <<x>br>. Du mußt also nichts weiter tun, als das bei der Eingabe verwendete Zeilenumbruchzeichen (z.B. CRLF) durch den Tag <<x>br> zu ersetzen, entweder vor dem Speichern oder aber beim Auslesen zur Anzeige.

Gruß, Mad Max
Member: helmuthelmut2000
helmuthelmut2000 Jan 22, 2006 at 21:06:46 (UTC)
Goto Top
Hallo,

Ich komm da jetzt nicht so ganz mit, das heist ich weis wie du
das meinst oder wie das funktioniert, aber ich weis nicht wie ich
das machen soll.
Kannst du mir das genauer erklären wo ich das in dem html Anzeigen
oder beim Formular reinschreibe.

Danke.

mfg
Helmut
Member: MadMax
MadMax Jan 22, 2006 at 22:22:14 (UTC)
Goto Top
Hallo Helmut,

also von Frontpage und IIS habe ich wenig Ahnung und Dein Projekt kenne ich auch nicht, aber Du könntest z.B. einen DB-Trigger verwenden, um beim reinschreiben in die DB die Werte zu ersetzen. Das würde dann so aussehen:
create trigger trg_umbruch on Tabelle for insert, update as
declare @id int, @text varchar (500)
begin
    declare cur_umbruch cursor local static for select ID, Textfeld from inserted
    open cur_umbruch
    fetch next from cur_umbruch into @id, @text
    while @@fetch_status = 0 begin
        select @text = replace (@text, char (13) + char (10), '<<x>br>')  
        select @text = replace (@text, char (13), '<<x>br>')  
        select @text = replace (@text, char (10), '<<x>br>')  
        update Tabelle set Textfeld = @text where ID = @id
        fetch next from cur_umbruch into @id, @text
    end
    close cur_umbruch
    deallocate cur_umbruch
end
Tabelle, ID und Textfeld müßtest Du nur durch Deine richtigen Namen ersetzen und evtl. die Variablen anpassen, dann sollte es gehen.

Gruß, Mad Max
Member: helmuthelmut2000
helmuthelmut2000 Jan 23, 2006 at 19:22:30 (UTC)
Goto Top
Hallo,

Leider hab ich noch nie so ein DB-Trigger erstellt.
Ich will das aber auf jeden fall auch mal machen.
Kannst du mir scheiben wie man das macht, oder
weist du da eine Adresse im Netz?
Das wäre Super.

mfg
Helmut
Member: helmuthelmut2000
helmuthelmut2000 Jan 23, 2006 at 19:48:39 (UTC)
Goto Top
Hallo,

Ich habs doch geschafft.
Ich hab mich ein bischen durchgelesen und probiert
und ich glaub ich bind da weit gekommen.
Hab nur noch ein Problem mit der ID.
Wo bekomme ich die her?
Was ist die ID überhaupt?
Wenn du mir da noch was hättest.

Danke.

Gruß
Helmut
Member: MadMax
MadMax Jan 23, 2006 at 21:00:14 (UTC)
Goto Top
Nabend Helmut,

eine ID ist etwas, womit Du einen Datensatz eindeutig identifizieren kannst. Normalerweise nimmt man da irgendeine Zahl, die innerhalb einer Tabelle, Datenbank oder global (GUID) eindeutig ist. Irgendetwas zum eindeutigen bestimmen eines Datensatzes wirst Du in Deiner Datenbank auch haben.

Gruß, Mad Max
Member: helmuthelmut2000
helmuthelmut2000 Jan 28, 2006 at 13:42:51 (UTC)
Goto Top
Hallo,

Ich hab da noch ein Problem mit dem DB-Trigger .
Ich kann den in der DB hinterlegen aber jetzt kann
ich mit meinem Formular nichts mehr in die DB schreiben.
Muß ich da in meinem Formular etwas anderes machen?
Die Bestätigungsseite ist noch in Ordung aber in der DB
steht nichts drin.
Wenn du mir da nochmal helfen könntest.


Gruß
Helmut
Member: MadMax
MadMax Jan 28, 2006 at 23:08:24 (UTC)
Goto Top
Hallo Helmut,

tschuldigung, da habe ich vergessen, daß ich immer standardmäßige Einstellungen von SQL Server ändere, weil sie mir nur hinderlich sind.

Das Problem ist, daß SQL Server die Trigger schachtelt, d.h. daß der Updatebefehl im Trigger wieder den Trigger auslöst. Das macht er, bis die maximale Schachtelungstiefe erreicht ist, dann gibt es einen Fehler. Um dem abzuhelfen gibt es drei Möglichkeiten:
1. In den Servereigenschaften unter Servereinstellungen das Häkchen bei den geschachtelten Triggern entfernen.

2. In den DB-Eigenschaften unter Optionen das Häkchen bei den rekursiven Triggern entfernen.

3. Im Trigger mit der Funktion @@nestlevel die Schachtelungstiefe prüfen und die Rekursion verhindern. Das sieht dann so aus:
create trigger trg_umbruch on Tabelle for insert, update as
declare @id int, @text varchar (500)
begin
    <b>if @@nestlevel <= 1 begin</b>
        declare cur_umbruch cursor local static for select ID, Textfeld from inserted
        open cur_umbruch
        fetch next from cur_umbruch into @id, @text
        while @@fetch_status = 0 begin
            select @text = replace (@text, char (13) + char (10), '<<x>br>')  
            select @text = replace (@text, char (13), '<<x>br>')  
            select @text = replace (@text, char (10), '<<x>br>')  
            update Tabelle set Textfeld = @text where ID = @id
            fetch next from cur_umbruch into @id, @text
        end
        close cur_umbruch
        deallocate cur_umbruch
    <b>end</b>
end
Gruß, Mad Max
Member: helmuthelmut2000
helmuthelmut2000 Jan 29, 2006 at 09:55:56 (UTC)
Goto Top
Hallo,

Jetzt tut sich was,
Aber noch nicht so ganz was ich da mein.
Ich hab jetzt in den Servereigenschaften das gemacht,
und 2. das mit den DB Optionen das Häkchen entfernen
das war schon weg.
Wenn ich jetzt in meinem Formular in der Spalte Text schreibe:
Das
ist
ein
Test
Dann schreibt es in alle Textaufträge:
Das
ist
ein
Test

Da ist doch noch was nicht so ganz in Ordnung oder?
Weist du vielleicht auch was?

Gruß
Helmut

P.S.
Wenn ich
if @@nestlevel <= 1 begin
reinmache dann kommt es zwar in dem richtigen auftrag aber leider wieder in einer Zeil so:
Das ist ein Test.
In der DB Spalte steht es richtig drin nur die Anzeige macht das nicht Richtig,
das mach ich mit einer asp Seite. Muß ich da die ID die ich da vergeben habe wo hinterlegen?
Member: MadMax
MadMax Jan 29, 2006 at 16:34:38 (UTC)
Goto Top
Hm, jetzt schreibt er es untereinander und das ist auch nicht, was Du wolltest?????

Das war doch die Fragestellung, oder bin ich jetzt total verwirrt?
Member: helmuthelmut2000
helmuthelmut2000 Jan 29, 2006 at 19:36:21 (UTC)
Goto Top
Hallo,
Ja klar ist schon so du bist bestimmt nicht verwirrt.
In der DB schreibt er es richtig aber nicht wenn ich
mir das im Web anzeigen lasse.
Also auf der ASP Seite.
In der DB schau ich z.B. mit Access drauf und da stimmts.
Da liegt doch das Problem nur noch am Anzeigen von
dem DB eintrag.
Weist du da auch noch eine Lösung?

Danake.

Gruß
Helmut
Member: MadMax
MadMax Jan 29, 2006 at 20:13:36 (UTC)
Goto Top
Hallo Helmut,

ok, kapiert. Dann stimmts aber in der DB gewissermaßen nicht, da sollte nämlich stehen:
Das<<x>br>ist<<x>br>ein<<x>br>Test

Dann funktioniert irgendwas mit dem Trigger bei Dir nicht.

Gruß, Mad Max
Member: helmuthelmut2000
helmuthelmut2000 Jan 29, 2006 at 20:49:35 (UTC)
Goto Top
Hallo,

Ja wenn ich in den Trigger das mit dem
if @@nestlevel <= 1 begin
weglasse dann schreibt
es mir das auf die Seite was du da meinst:
Das
ist
ein
Test
Aber das schreibt es mir in alle Zeilen.
Weist du wie ich mein?

Gruß
Helmut
Member: MadMax
MadMax Jan 29, 2006 at 21:13:33 (UTC)
Goto Top
Ach so, Anzeige korrekt, aber alle Zeilen, obwohl es nur eine sein soll.

Dann stimmt was mit Deiner ID oder was Du sonst zum eindeutigen Identifizieren nimmst nicht. Schau mal, ob Du dieses "where ID = @id" im Trigger hast bzw. das, wie Du Deine Datensätze identifizierst. Wenn diese Klausel fehlt, dann ändert der Updatebefehl im Trigger natürlich alle Datensätze.

Gruß, Mad Max
Member: helmuthelmut2000
helmuthelmut2000 Jan 30, 2006 at 19:54:27 (UTC)
Goto Top
Hallo,

Ja den Eintrag "where ID = @id" habe ich in meinem Trigger, aber ich weis noch nicht
genau was ich damit machen soll. Ich hab das jetzt so gemacht:
In der Zeile:
static for select ID, Textfeld from inserted
habe ich das ID umgeändert in 5 und das Textfeld in Text weil meine Spalte auch
Text heist.
Dann hab ich noch in der Zeile:
update Tabelle set Textfeld = @text where ID = @id
das Tabelle in Ergebnisse weil die Tabelle bei mir so heist und
das Textfeld in Text in das ID=@id in 5=@id.
Jetzt muß ich doch noch in meiner DB die ID5 irgendwo hinterlegen oder?
Wenn ich in meiner DB das ändern will dann kann ich das nicht,dann ist das
ausgekraut. Nur im Feld schlüssel könnte man das ändern.
Muß ich da vielleicht das varchar ändern?
Weist du da weiter?

Gruß
Helmut
Member: MadMax
MadMax Jan 30, 2006 at 23:29:44 (UTC)
Goto Top
Hallo Helmut,

vielleicht solltest Du mal nach einem Datenbank-Lehrbuch Ausschau halten, um zumindest mal die Grundlagen kennenzulernen.

In einer Datenbanktabelle brauchst Du irgendetwas, um einen Datensatz eindeutig zu bestimmen. Wenn Du in Deiner Tabelle "Ergebnisse" 100 Zeilen drin hast und willst jetzt einen bestimmten Text verändern, mußt Du die Zeile benennen können, denn der Text selber ist wahrscheinlich nicht eindeutig. Zu diesem Zweck erstellt man ein Feld, welches einen Wert erhält, den kein anderer Datensatz erhält, und nennt es dann oft ID, GUID oder auch Schlüssel (mal abgesehen davon, daß Umlaute in Feldnamen nicht sehr geschickt sind).

Wenn Deine Tabelle "Ergebnis" durch irgendeinen Assistenten erstellt wurde, dann hat sie mit Sicherheit auch so ein Feld, wahrscheinlich das von Dir erwähnte "schlüssel". Um das festzustellen, kannst Du mal in den Enterprise Manager gehen, und auf die Tabelle "Ergebnis" doppelklicken. In irgendeiner Zeile ist dann links ein Schlüsselsymbol (hoffen wir mal, daß es nicht mehrere sind), das ist das gesuchte Feld, das ich im Trigger eben ID genannt habe. Dann mußt Du statt des Feldes ID im Trigger nur dieses gefundene Feld verwenden und ggf. den Typ der Variablen @id anpassen.

Gruß, Mad Max
Member: helmuthelmut2000
helmuthelmut2000 Feb 01, 2006 at 20:52:09 (UTC)
Goto Top
Hallo,

Ja das mit der ID war jetzt total neu für mich, aber das tut
jetzt.
Er schreibt das jetzt in den Auftrag wo er soll, aber er schreibt
jetzt in die DB
Das
ist
ein
Test
Und auf der Seite wo angezeigt wird schreibt er genauso
Das
ist
ein
Test
Gibt es da auch noch eine Lösung?

mfG
Helmut
Member: MadMax
MadMax Feb 01, 2006 at 23:43:51 (UTC)
Goto Top
Eine Lösung für was? Er macht doch, was er soll ...
Member: helmuthelmut2000
helmuthelmut2000 Feb 02, 2006 at 11:00:44 (UTC)
Goto Top
Hallo,

Nein die Anzeige ist falsch da.
Er schreibt das in eine Zeile so wie du
das auch weiter oben geschrieben hast.
Mit dem
Das br ist br ein br Test
In der DB und in der Anzeige schreibt er es so.
Die Anzeige macht es falsch.

Gruß
Helmut
Member: MadMax
MadMax Feb 02, 2006 at 18:52:08 (UTC)
Goto Top
Eben wird mirs zu hoch, ich klink mich aus.

Gruß, Mad Max
Member: helmuthelmut2000
helmuthelmut2000 Feb 02, 2006 at 20:14:22 (UTC)
Goto Top
Hallo,

Du warst mir trotzdem sehr hilfreich mit der DB id das wußte
ich nicht.

Nochmal vielen dank.

Gruß
Helmut