Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Memofeld in Paradox Datenbank speichern (https://www.delphipraxis.net/121741-memofeld-paradox-datenbank-speichern.html)

ecHo89 3. Okt 2008 15:16

Datenbank: Paradox 7 • Zugriff über: Delphi 7, SQL

Memofeld in Paradox Datenbank speichern
 
Hallo,

nach langer und verzweifelter Suche starte ich doch ein neues Thema, da ich leider nicht schlau geworden bin.
Will den Text eines Memos (mit Absätzen) in meine Datenbank speichern und auch wieder auslesen können.
Habe viel zu BLOBs gesucht, aber wiegesagt bin verwirrt.

Vielen Dank für eure Hilfe

ecHo89 4. Okt 2008 01:54

Re: Memofeld in Paradox Datenbank speichern
 
Hab jetzt bisschen was zusammen gebastelt, wovon ich eigentlich keine Ahnung habe.
Er fügt einen neuen Datensatz hinzu, aber das Feld (BLOB) Beschreibung2 bleibt leer.
Der untenstehende Teil ist fehlerhaft. Vielleicht kann ihn gerade jemand korriegieren bzw. mir etwas dazu erklären.
Danke

Sql.Text := 'INSERT INTO DBFilme (Beschreibung2,Beschreibung2) VALUES (100,:Memo)';

Delphi-Quellcode:
  var Stream: TMemoryStream;
   begin
      Stream := TMemoryStream.Create;
      try
         Memo1.Lines.SaveToStream(Stream);
         with Query2 do begin
            Sql.Text := 'INSERT INTO DBFilme (Beschreibung2,Beschreibung2) VALUES (100,:Memo)';
            Params.Clear;
            Params.CreateParam(ftBlob, 'Memo', ptInput);
            ParamByName('Memo').LoadfromStream(Stream, ftBlob);
            ExecSQL;
         end;
      finally
         Stream.Free;
      end;
  end;

haentschman 4. Okt 2008 10:50

Re: Memofeld in Paradox Datenbank speichern
 
Guten Morgen...

versuchs mal damit:
Delphi-Quellcode:
   begin
     Query2.Sql.Text := 'INSERT INTO DBFilme (Beschreibung2,Beschreibung2) VALUES (100,:Memo)';
     ParamByName('Memo').Value:= Memo1.Text;
     ExecSQL;
   end;
...Vorraussetzung ist natürlich, daß Beschreibung2 ein MemoFeld ist.

PS: Ich denke 2 mal Beschreibung2 ist ein Schreibfehler... :gruebel:

:hi:

ecHo89 4. Okt 2008 14:01

Re: Memofeld in Paradox Datenbank speichern
 
Ja, glaube eines der beiden sollte ein Zahlenwert sein, nur kA welcher und was dieser dann zu bedeuten hat.

Deine Variante funktioniert leider auch nicht bei mir.

Wie kann man sich eigentlich eine .mb-Datei angucken, inder der BLOB dann gespeichert wird?

haentschman 4. Okt 2008 14:32

Re: Memofeld in Paradox Datenbank speichern
 
:gruebel: Irgendwie stimmt da was im Ansatz nicht.

Beschreibe doch mal was du vorhast, wie deine Tabellenstruktur aussieht, evt. Fehlermeldungen, welche Zugriffskomponenten (TQuery,TDataSource) benutzt du...

Zitat:

Wie kann man sich eigentlich eine .mb-Datei angucken, inder der BLOB dann gespeichert wird?
so gar nicht.... mit einem Editor für Paradox kannst du dir den Inhalt des Datenfeldes in der DB anschauen.

Zitat:

nur kA welcher und was dieser dann zu bedeuten hat.
...und dann willst du mit Daten arbeiten :gruebel:

Auf Grund dessen habe ich mir den Kommentar zum Alter von Paradox verkniffen. Lerne erst mal mit Daten umzugehen, bis du dich an ein vernünftiges DBMS wagst.

ecHo89 4. Okt 2008 15:11

Re: Memofeld in Paradox Datenbank speichern
 
haentschman...

das einzige womit ich nicht umgehen kann ist dieses BLOB-Feld (Memo).
Mein ER ist auf Papier und ist auch für diese Fragestellung total uninteressant.
Es geht lediglich darum, dass ich in einer Tabelle ein Memo-Feld "M" (Blob) habe und aus meiner Form die Daten dorthin senden will (speichern) und wieder lesen können.


Gruß, Malte

PS: Arbeite mit TQuery und TDataSource
kenne mich mit Streams gar nicht aus, aber weiß nicht wie ich es sonst lösen könnte, weil die anderen Sachen bisher nicht funktioniert haben. Es kam zwar keine FEhlermeldung, es stand dann aber auch nix in dem Feld drin... :P


Delphi-Quellcode:
 with Query2 do begin
   SQL.Text := 'UPDATE DBFilme SET Beschreibung2 = :P0 WHERE FiNr = :P1';
   Params[0].AsBlob := Memo1.Lines.text;
   Params[1].AsInteger := 1;
   ExecSQL;
 end;

haentschman 4. Okt 2008 15:38

Re: Memofeld in Paradox Datenbank speichern
 
arbeitest du grundsätzlich mit SQL Befehlen oder auch direkt mit den Tabellen.

direkt wäre auch noch möglich:
Delphi-Quellcode:
Tabelle.Edit;
Tabelle.FieldValues['Bezeichnung2']:= Memo1.Text;
Tabelle.Post;
PS: Ich weiß nicht, wo Du das mit den Streams herhast, aber ich habe mit o.G. Methoden schon reihenweise Memo´s in Paradox abgelegt. Deswegen dachte ich an einen Fehler im Design.

[quote:]aber auch nix in dem Feld drin... [/quote:]
wie list du das Feld wieder aus ? bzw. woher weißt du, das nix drinsteht ?

Delphi-Quellcode:
with Query2 do begin
   SQL.Text := 'UPDATE DBFilme SET Beschreibung2 = :P0 WHERE FiNr = :P1';
   Params[0].AsBlob := Memo1.Lines.text; // versuche mal ParamByName('P0').Value := Memo1.Text;
   Params[1].AsInteger := 1;
   ExecSQL;
end;

marabu 4. Okt 2008 16:24

Re: Memofeld in Paradox Datenbank speichern
 
Hallo Malte,

dein Code in Beitrag #2 muss mindestens noch um eine Zeile erweitert werden, da nach dem Schreiben in einen Stream der Positionszeiger an der erreichten Endstelle stehen bleibt. Beim Auslesen deines Streams werden so 0 Bytes gelesen, weil Offset = Size ist.

Delphi-Quellcode:
// ...
      Memo1.Lines.SaveToStream(Stream);
      Stream.Position := 0;
// ...
Freundliche Grüße

ecHo89 4. Okt 2008 23:26

Re: Memofeld in Paradox Datenbank speichern
 
Zitat:

wie list du das Feld wieder aus ? bzw. woher weißt du, das nix drinsteht ?
ich gucke mit Paradox nach, aber da steht überall <BLOB Memo> .
Hatte es irgendwann mal geschafft, dass die 1. Zeile dort angezeigt wurde, aber der Rest nicht gespeichert wurde.

Also danke für die Hilfe, aber klappt noch nicht :/ so schwer kann das doch nicht sein :(

haentschman 5. Okt 2008 08:11

Re: Memofeld in Paradox Datenbank speichern
 
Guten Morgen...
Zitat:

ich gucke mit Paradox nach, aber da steht überall <BLOB Memo> .
...da meinst du wohl die Datenbankoberfläche. Da steht <BLOB Memo> auch wenn Daten drin sind.

lese mal das Feld per SQL wieder aus und zeige es in einem anderen Memo an.
Delphi-Quellcode:
Query.SQL.Text:= 'select Bezeichnung2 from Tabelle';
Query.Open;
MemoTest.Text:= Query.FieldValues['Bezeichnung2'];


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:19 Uhr.
Seite 1 von 2  1 2      

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