![]() |
Datenbank: Mybase • Version: xe7 • Zugriff über: lokal
JPG im Blob Feld wird extrem groß
So habe die meisten Probleme gelöst. nur Leider wird ein JPG was ich in mein Blob Feld lade extrem groß. JPG größe 1,19 mb wird zu 27mb in der Datenbank. Habe das die feld def als FTgraphic und als normal blob versucht. in der clientdataset ist die feld def grad <FIELD attrname="Arbeitsvertragimg" fieldtype="bin.hex" SUBTYPE="Graphics"/> definiert
als Quellcode hab ich es so versucht, es funktioniert auch nur eben wird die Datenbank extrem groß.
Delphi-Quellcode:
procedure TForm2.btnLoadClick(Sender: TObject);
var SPicFileName: string; JP : TJPegImage; C : TClipboard; begin if OpenPictureDialog1.Execute then begin JP := TJPegImage.Create; C:= TClipboard.Create; SPicFileName:= OpenPictureDialog1.FileName; try JP.LoadFromFile(SpicFileName); C.Assign(JP); DBImage1.PasteFromClipboard; finally JP.Free; C.Free; end; end; |
AW: JPG im Blob Feld wird extrem groß
Du lädst eine JPEG, kopierst es in die Zwischenablage und von dort in die DB.
Über diesen Umweg wird das JPEG ein Bitmap. Und ein BMP ist nunmal fast immer viel größer als ein JPEG. |
AW: JPG im Blob Feld wird extrem groß
Du fügst auch nicht die Jpegdatei, sondern das unkomprimierte Bild ein.
|
AW: JPG im Blob Feld wird extrem groß
Der Hauptfehler ist doch schonmal der Weg die Daten in das Control zu packen anstatt direkt in die Datenmenge. Der Rest sind doch nur noch Folgefehler mit falschen Schlussfolgerungen.
|
AW: JPG im Blob Feld wird extrem groß
Bin noch anfänger :-)
Aber wie lad ich jetzt am blödesten ins feld ohne das es zur bmp wird? |
AW: JPG im Blob Feld wird extrem groß
|
AW: JPG im Blob Feld wird extrem groß
so hab das jetzt mal etwas für mich angepasst. leider bekomme ich bei meinem angepassten code nur denn Fehler:
[dcc32 Fehler] doku.pas(135): E2076 Diese Form des Methodenaufrufs ist nur für Klassenmethoden oder Konstruktoren zulässig
Delphi-Quellcode:
procedure TForm2.btnLoadClick(Sender: TObject);
var FileStream: TFileStream; BlobStream: TStream; begin if (sdBlob.Execute) then begin Tclientdataset.Edit; //fehler hier E2076 begin FileStream := TFileStream.Create(sdBlob.FileName,fmCreate); BlobStream := Tclientdataset.CreateBlobStream(tclientdataset.FieldByName('Arbeitsvertragimg'),bmRead); //fehler hier E2076 FileStream.CopyFrom(BlobStream,BlobStream.Size-BlobStream.Position); BlobStream.Free; FileStream.Free; Tclientdataset.Post; //fehler hier E2076 tclientdatasetAfterScroll(tclientdataset); //fehler hier E2010 end; end; end; |
AW: JPG im Blob Feld wird extrem groß
Statt Tclientdataset musst Du den Namen Deines ClientDatasets (vermutlich ClientDataset1?) angeben.
|
AW: JPG im Blob Feld wird extrem groß
ClientDataSet1: TClientDataSet;
DataSource1: TDataSource; Hab mal beide versuch mit clientdataset1 und auch beide datasource aber leider immer noch der fehler |
AW: JPG im Blob Feld wird extrem groß
Delphi-Quellcode:
?
Tclientdataset1.Edit;
|
AW: JPG im Blob Feld wird extrem groß
Da schimpft delphi undeklarierter bezeichner Tclientdataset1 und auch edit1
|
AW: JPG im Blob Feld wird extrem groß
Versuch es doch mal so:
Delphi-Quellcode:
procedure TForm2.btnLoadClick(Sender: TObject);
var FileStream: TFileStream; BlobStream: TStream; begin if sdBlob.Execute then begin clientdataset1.Edit; BlobStream := nil; FileStream := TFileStream.Create(sdBlob.FileName,fmCreate); try BlobStream := clientdataset1.CreateBlobStream(clientdataset1.FieldByName('Arbeitsvertragimg'),bmRead); FileStream.CopyFrom(BlobStream,BlobStream.Size-BlobStream.Position); clientdataset1.Post; clientdataset1(clientdataset1); finally BlobStream.Free; FileStream.Free; end; end; end; |
AW: JPG im Blob Feld wird extrem groß
Delphi schimpft da wieder das alles undeklariert ist
|
AW: JPG im Blob Feld wird extrem groß
ich hau mal denn ganzen quell text rein vielleicht bringt das hilfe
Delphi-Quellcode:
type
TForm2 = class(TForm) MainMenu1: TMainMenu; OpenPictureDialog1: TOpenPictureDialog; SavePictureDialog1: TSavePictureDialog; Button1: TButton; Button2: TButton; odBlob: TOpenDialog; sdBlob: TSaveDialog; DBCtrlGrid1: TDBCtrlGrid; Photo: TImage; Procedure btnLoadClick(Sender: TObject); procedure tclientdatasetAfterScroll(DataSet: TDataSet); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form2: TForm2; implementation {$R *.dfm} uses Unit1, ABOUT; procedure TForm2.TclientdatasetAfterScroll(DataSet: TDataSet); var JpegImage: TJPEGImage; BlobStream: TStream; begin if (not Tclientdataset.FieldByName('Arbeitsvertragimg').IsNull) then begin BlobStream := Tclientdataset.CreateBlobStream(Tclientdataset.FieldByName('Arbeitsvertragimg'),bmRead); JpegImage := TJPEGImage.Create; try JpegImage.LoadFromStream(BlobStream); Photo.Picture.Assign(JpegImage); Photo.Visible := True; finally JpegImage.Free; BlobStream.Free; end; end else Photo.Visible := False; end; procedure TForm2.btnLoadClick(Sender: TObject); var FileStream: TFileStream; BlobStream: TStream; begin if sdBlob.Execute then begin Tclientdataset.Edit; BlobStream := nil; FileStream := TFileStream.Create(sdBlob.FileName,fmCreate); try BlobStream := Tclientdataset.CreateBlobStream(Tclientdataset.FieldByName('Arbeitsvertragimg'),bmRead); FileStream.CopyFrom(BlobStream,BlobStream.Size-BlobStream.Position); Tclientdataset.Post; Tclientdataset(Tclientdataset); finally BlobStream.Free; FileStream.Free; end; end; end. |
AW: JPG im Blob Feld wird extrem groß
Welche Daten zeigt Dein Grid denn an, wenn Du kein ClientDataset auf dem Formular hast?
|
AW: JPG im Blob Feld wird extrem groß
Vor und nachname der person
|
AW: JPG im Blob Feld wird extrem groß
Zitat:
|
AW: JPG im Blob Feld wird extrem groß
Du musst doch irgendwo eine Datenmenge haben, wo das Zeugs auch drinsteht :gruebel:
|
AW: JPG im Blob Feld wird extrem groß
die clientdataset ist in form1 und die daten also pass bild kopie arbeitsvertrag ... sollen halt unter extra form angezeigt werden also form 2
|
AW: JPG im Blob Feld wird extrem groß
Dann muss es
Delphi-Quellcode:
usw. heissen.
Form1.Tclientdataset.Edit;
|
AW: JPG im Blob Feld wird extrem groß
Ah, dann ergänz im gezeigten Code mal überall ClientDataset1 um den Präfix "Form1.", also so:
Delphi-Quellcode:
Form1.ClientDataset1
|
AW: JPG im Blob Feld wird extrem groß
ok jetzt kommt nur noch 1 fehler
[dcc32 Fehler] doku.pas(165): E2010 Inkompatible Typen: 'TDataSet' und 'class of TDataSet'
Delphi-Quellcode:
procedure tclientdatasetAfterScroll(DataSet1: TDataSet);
private { Private-Deklarationen } public { Public-Deklarationen } end; var Form2: TForm2; implementation {$R *.dfm} uses Unit1, ABOUT; procedure TForm2.TclientdatasetAfterScroll(DataSet1: TDataSet); var JpegImage: TJPEGImage; BlobStream: TStream; begin if (not Form1.clientdataset1.FieldByName('Arbeitsvertragimg').IsNull) then begin BlobStream := Form1.clientdataset1.CreateBlobStream(Form1.clientdataset1.FieldByName('Arbeitsvertragimg'),bmRead); JpegImage := TJPEGImage.Create; try JpegImage.LoadFromStream(BlobStream); Photo.Picture.Assign(JpegImage); Photo.Visible := True; finally JpegImage.Free; BlobStream.Free; end; end else Photo.Visible := False; end; procedure TForm2.btnLoadClick(Sender: TObject); var FileStream: TFileStream; BlobStream: TStream; begin if sdBlob.Execute then begin Form1.clientdataset1.Edit; BlobStream := nil; FileStream := TFileStream.Create(sdBlob.FileName,fmCreate); try BlobStream := Form1.clientdataset1.CreateBlobStream(Form1.clientdataset1.FieldByName('Arbeitsvertragimg'),bmRead); FileStream.CopyFrom(BlobStream,BlobStream.Size-BlobStream.Position); Form1.clientdataset1.Post; TclientdatasetAfterScroll(TDataSet); // fehler 2010 finally BlobStream.Free; FileStream.Free; end; end; end; |
AW: JPG im Blob Feld wird extrem groß
Und welche Zeile wäre das?
Delphi-Quellcode:
TclientdatasetAfterScroll(Form1.ClientDataSet1);
|
AW: JPG im Blob Feld wird extrem groß
das ist diese
Delphi-Quellcode:
TclientdatasetAfterScroll(TDataSet); //2010
|
AW: JPG im Blob Feld wird extrem groß
Delphi-Quellcode:
TclientdatasetAfterScroll(Form1.clientdataset1)
|
AW: JPG im Blob Feld wird extrem groß
Zitat:
Er will ein Event aufrufen? ... das liegt auf einer Form ... also muß man Dieses dort auch aufrufen. :angle: Also
Delphi-Quellcode:
,
ClientDataSet1AfterScroll(Form1.ClientDataSet1);
aber vermutlich eher so
Delphi-Quellcode:
, da das Event vermutlich auf der selben Form liegt, wie das DataSet. :gruebel:
Form1.ClientDataSet1AfterScroll(Form1.ClientDataSet1);
Oder notfalls auch indirekt über
Delphi-Quellcode:
.
Form1.ClientDataSet1.OnAfterScroll(Form1.ClientDataSet1);
[edit] siehe nachfolgenden Beitrag. Wie ich das sehe, benutzt diese Methode praktisch ausschließlich vorwiegend Komponenten/Funktionen der Form1, also gehört diese Methode auch in TForm1 rein, wo sie dann von Form2 aus aufgerufen wird, mit Übergabe das Dateinamen als Parameter. So oft, wie hier die böse globale Variable
Delphi-Quellcode:
benutzt werden musste. Immer wenn man solche globalen Variablen verwenden muß, vorallem bei der Masse, sollte man dringend nachsehn, was man hier falsch macht.
Form1
Allgemein würde ich aber dringend das Studium eines Grundlagen-Tutorials empfehlen. > Typen <> Objektinstanzen und Variablen, sowie Parameter ... was ist das und wie benutzt man es > und wie benennt man Komponenten/Funktionen (sprechende Bezeichner) |
AW: JPG im Blob Feld wird extrem groß
Glaub doch.
Zitat:
|
AW: JPG im Blob Feld wird extrem groß
Ohh. OK, dann ist die Benennung doch echt böse.
Hab meine letzte Antwort versucht entsprechend anzupassen. :oops: |
AW: JPG im Blob Feld wird extrem groß
so es sind keine fehler mehr und es lässt sich compilieren nur leider passiert nichts.
fehler meldung im programm die syntax für denn dateiname verzeichnissname oder datenträgerbezeichnung ist falsch?:( |
AW: JPG im Blob Feld wird extrem groß
Und wie sieht dieser aus?
|
AW: JPG im Blob Feld wird extrem groß
Und wann genau tritt der Fehler auf? Ich tippe bei einem LoadFromFile oder SaveToFile des ClientDatasets, aber das ist nur geraten.
|
AW: JPG im Blob Feld wird extrem groß
Und wie lautet der Dateiname? (inkl. Pfad)
Tipp 1: Strg+C funktioniert auch bei Fehlerdialogen und im Log der IDE. (via Strg+V als Text in den Beitragseditor einfügen) Tipp 2: Du könntest dir ein Tutorial suchen "Was ist ein Debugger und wie benutzt man den". ![]() |
AW: JPG im Blob Feld wird extrem groß
Zitat:
|
AW: JPG im Blob Feld wird extrem groß
constructor TFileStream.Create(const AFileName: string; Mode: Word; Rights: Cardinal);
var LShareMode: Word; begin if (Mode and fmCreate = fmCreate) then begin LShareMode := Mode and $FF; if LShareMode = $FF then LShareMode := fmShareExclusive; // For compat in case $FFFF passed as Mode inherited Create(FileCreate(AFileName, LShareMode, Rights)); if FHandle = INVALID_HANDLE_VALUE then raise EFCreateError.CreateResFmt(@SFCreateErrorEx, [ExpandFileName(AFileName), SysErrorMessage(GetLastError)]); end |
AW: JPG im Blob Feld wird extrem groß
Zitat:
:? Sherlock |
AW: JPG im Blob Feld wird extrem groß
habe im debugger ein halte punkt bei der fehlermeldung gesetzt und das steht drin :-)
|
AW: JPG im Blob Feld wird extrem groß
Also anscheinend in der Zeile
Zitat:
|
AW: JPG im Blob Feld wird extrem groß
Wie TFileStream.Create aussieht, wissen wir auch schon.
Wichtiger ist es zu wissen was "in" sdBlob.FileName drin steht. |
AW: JPG im Blob Feld wird extrem groß
Zitat:
Und wo übergibst Du diese? Wohin? Fragen über Fragen. |
AW: JPG im Blob Feld wird extrem groß
Delphi-Quellcode:
oder die daten vom object inspektor?
sdBlob: TSaveDialog;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz