AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi TRichEdit per Parameter in DB schreiben
Thema durchsuchen
Ansicht
Themen-Optionen

TRichEdit per Parameter in DB schreiben

Ein Thema von Andreas H. · begonnen am 21. Aug 2007 · letzter Beitrag vom 23. Aug 2007
Antwort Antwort
Benutzerbild von Andreas H.
Andreas H.

Registriert seit: 3. Mär 2006
Ort: Schopfloch
163 Beiträge
 
Delphi 2006 Professional
 
#1

TRichEdit per Parameter in DB schreiben

  Alt 21. Aug 2007, 07:33
Datenbank: mySQL • Version: 5 • Zugriff über: ZEOS
Hallo,

ich benutze folgenden Code, um ein TRichEdit in eine DB zu schreiben. Die Funktion wird ohne Fehler durchlaufen, in der Datenbank bleibt das Feld Memo aber auf nil.


Delphi-Quellcode:
//...
  const
    SQLNewMsgSend = 'insert into MsgSend values(default,now(),:User,'#39'inactive'#39',:User,:User,default,:Name,:Memo,:Reciep);';
// ...


function TCommon.SendMsg(Subject: string; Memo: TObject; SenderID,ReciepID: Integer;
  AttachedList: TIntegerList):boolean;
var
  i:integer;
  LastIndex:integer;
  Stream: TMemoryStream;
begin
  result:=false;
  Stream:=TMemoryStream.Create;
  try
    with QryMessage do
    begin
      // in "Gesendet" eintragen
      SQL.Text:=SQLNewMsgSend;
      Params.ParamByName('User').Value:=SenderID;
      Params.ParamByName('Reciep').Value:=ReciepID;
      Params.ParamByName('Name').Value:=Subject;
      if TRichEdit(Memo).lines.Count>0 then
        begin
          Stream.Clear;
          TRichEdit(Memo).Lines.SaveToStream(Stream);
          Stream.Position := 0;
          Params.ParamByName('Memo').LoadFromStream(Stream,ftFmtMemo);
        end;
      ExecSQL;
//...
Das Datenbankfeld Memo ist vom Typ Text und ist in anderen Forms der Anwendung an TDBRichEdit gebunden und das funktioniert wunderbar. Auch das Übertragen von RichEdit-Inhalten über Streams funktioniert wie gewünscht.
Nur mit der Übergabe an einen SQL-Parameter gehts bei mir nicht.

Wer hat ne Idee?

Gruß Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Andreas H.
Andreas H.

Registriert seit: 3. Mär 2006
Ort: Schopfloch
163 Beiträge
 
Delphi 2006 Professional
 
#2

Re: TRichEdit per Parameter in DB schreiben

  Alt 22. Aug 2007, 16:29
Hallo,

kann mir denn wirklich keiner helfen?

Gruß Andreas
  Mit Zitat antworten Zitat
marabu

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

Re: TRichEdit per Parameter in DB schreiben

  Alt 22. Aug 2007, 19:31
Hallo Andreas,

das erste, was mir an deinem parametrisierten SQL-String auffällt, ist das mehrfache Vorkommen von :USER. Da durch ParamByName() nur das erste Vorkommen gefunden werden dürfte, sollte das Statement gar nicht ausführbar sein. Um den Fehler auszuschließen könntest du die Parameter User1, User2, User3 einführen.

#39 ist sehr platzsparend, aber QuotedStr('inactive') finde ich irgendwie selbstdokumentierend - du nicht auch?

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Andreas H.
Andreas H.

Registriert seit: 3. Mär 2006
Ort: Schopfloch
163 Beiträge
 
Delphi 2006 Professional
 
#4

Re: TRichEdit per Parameter in DB schreiben

  Alt 22. Aug 2007, 21:00
Hallo,

das mit den QuotedStr ist ne gute Sache, klappt aber leider in einer Konstantendefinition nicht!

Der Parameter User soll mehrfach gespeichert werden (Ersteller, Besitzer, Absender...). Das funktioniert wie erwartet.

Nur mit den Memos (RichText) wills nicht klappen.

Gruß Andreas
  Mit Zitat antworten Zitat
marabu

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

Re: TRichEdit per Parameter in DB schreiben

  Alt 22. Aug 2007, 22:22
Hallo,

Zitat von Andreas H.:
das mit den QuotedStr ist ne gute Sache, klappt aber leider in einer Konstantendefinition nicht!
Recht hast du, aber du hast schon so viele Parameter im Statement, da würde ich auch diesen String noch als Parameter übergeben - sieht einfach besser aus.

Zitat von Andreas H.:
Der Parameter User soll mehrfach gespeichert werden (Ersteller, Besitzer, Absender...). Das funktioniert wie erwartet.
Wirklich? Ich kann es kaum glauben:

Delphi-Quellcode:
function TParams.FindParam(const Value: string): TParam;
var
  I: Integer;
begin
  for I := 0 to Count - 1 do
  begin
    Result := TParam(inherited Items[I]);
    if AnsiCompareText(Result.Name, Value) = 0 then Exit;
  end;
  Result := nil;
end;
Aber wenn du es sagst, dann wird es stimmen.

Zitat von Andreas H.:
Nur mit den Memos (RichText) wills nicht klappen.
ftFmtMemo ist ein Typ, der wohl nur von der BDE unterstützt wird. Versuche es mal mit einem Typ, den auch ZEOS kennt (ftBlob, ftMemo).

Gute Nacht
  Mit Zitat antworten Zitat
Benutzerbild von Andreas H.
Andreas H.

Registriert seit: 3. Mär 2006
Ort: Schopfloch
163 Beiträge
 
Delphi 2006 Professional
 
#6

Re: TRichEdit per Parameter in DB schreiben

  Alt 23. Aug 2007, 08:43
Hallo,

mit ftMemo geht!!!

Warum kam da denn keine Fehlermeldung?


Übrigens, gibt es sowas wie ne Anleitung zu den ZEOS? Hab im Netz nichts gefunden (oder einfach nur falsch gesucht? )

Ich verstehe Deine Skepsis wegen der mehrfachen User nicht. Ich möchte ja nicht für jeden :user einen Anderen Werte eintragen sondern mehrfach den Wert, den ich in ...('User').value eingetragen habe.
Hintergrund: Ich speichere den Erzeuger, den Besitzer, den letzten Bearbeiter eines Datensatzes. Die Kennung des Users landet in :User. In diesem Fall wird ein neuer Datensatz angelegt, :User ist alse Erzeuger, Besitzer und letzter Bearbeiter.
Wie gesagt, funktioniert wie erwartet.

Das Stück Programm ist die Parameter-Suchroutine der ZEOS-Komponente, oder?

Gruß Andreas
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: TRichEdit per Parameter in DB schreiben

  Alt 23. Aug 2007, 10:09
http://www.dsdt.info/tutorials/zeoslib/
http://zeos.firmos.at/
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Andreas H.
Andreas H.

Registriert seit: 3. Mär 2006
Ort: Schopfloch
163 Beiträge
 
Delphi 2006 Professional
 
#8

Re: TRichEdit per Parameter in DB schreiben

  Alt 23. Aug 2007, 14:23
Hallo,

danke für die Quellenangaben. Beide sind mir schon bekannt.
Leider scheint es kein Handbuch oder so zu geben. Ich hätte gerne was zum Ausdrucken fürs stille Örtchen Na ja, egal.

Trotzdem nochmal vielen Dank an alle. Ihr habt mir echt weitergeholfen, wie immer.
Vielleicht bin ich ja auch mal soweit, dass ich helfen kann. Bislang reicht meine Erfahrung nicht aus oder ich bin beim Antworten zu langsam.
So, das musste mal gesagt werden


Gruß Andreas
  Mit Zitat antworten Zitat
marabu

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

Re: TRichEdit per Parameter in DB schreiben

  Alt 23. Aug 2007, 20:05
Hallo Andreas,

Zitat von Andreas H.:
... Ich verstehe Deine Skepsis wegen der mehrfachen User nicht. Ich möchte ja nicht für jeden :user einen Anderen Werte eintragen sondern mehrfach den Wert, den ich in ...('User').value eingetragen habe.
das ist leicht erklärt: BDE oder ADO (evtl. beide) sind bisher dadurch aufgefallen, dass sie beim Analysieren eines SQL-Statements mit mehreren gleichnamigen Parametern diese auch mehrfach erzeugen. Der von mir gezeigte Code-Ausschnitt aus der Unit DB wird von allen Zugriffskomponenten verwendet und findet beim Zugriff über den Parameternamen nur den ersten Eintrag - wie du beim Betrachten des Codes sicher erkennen kannst. Offensichtlich arbeitet ZEOS an dieser Stelle intelligenter und erzeugt nur einen Parameter. Wenn du das erste mal in diese Falle tappst, dann wirst du dich hoffentlich an meine nicht unbegründete Skepsis erinnern und dir sofort selbst helfen können.

Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von Andreas H.
Andreas H.

Registriert seit: 3. Mär 2006
Ort: Schopfloch
163 Beiträge
 
Delphi 2006 Professional
 
#10

Re: TRichEdit per Parameter in DB schreiben

  Alt 23. Aug 2007, 23:20
Hallo,

das leuchtet mir ein.
Für mein (bisheriges) Verständnis sollte man Parameter mehrfach benutzen können. Wenn natürlich für jeden Parameter im SQL-Statement auch einer in der Parameterliste angelegt wird...

Ich werde meine SQL-Strings wohl auf eindeutige Parameter umstellen, um nicht in diese Falle zu tappen!

Nochmal Danke

Andreas
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:54 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