![]() |
Datenbank: clientdataset1 • Version: ? • Zugriff über: xml
PDF's und Jpg im Datensatz speichern, vorschau und abrufen
Hey Leute
Bei vielen fragen konnte ich mir schon ganz gut helfen nur hier versag ich als anfänger. Plan: Datei Pdf oder Jpg soll vom User im Datensatz gespeichert werden. Es soll eine minivorschau des pdf oder jpg zusehen sein. Beim klick soll es geöffnet werden zb mit adobe reader oder welches programm für die datei zuständig ist. Meine Vorraussetzungen: Emparcado rad studio xe7 trail Kaum Delphi wissen bzw Programierkenntnisse Ergeiz:-D Ist mein erstes Programm. so jetzt zu meinen fragen wie bekomme ich es hin. Aufgaben Plan: 1. Dem User eine Möglichekeit geben Dokumente auszuwählen und im datensatz zuspeichern. 2. Miniaturvorschau des Dokuments 3. Öffnen und drucken Zu 1. sollte das über button gelöst werden ? wenn ja wie sieht da der quell code aus? bzw was muss ich anpassen? habe mit bekommen das es in der datenbank ein blob feld sein muss ist das richtig oder hab ich mir das falsch her geleitet? zu 2. habe mir gedacht ein TDBimage zu benutzen. nur keine ahnung ob sinvoll oder ob es geht. zu 3. denke mal über onklick aber wie ist da der quellcode auch showmodal? Ich danke schon mal allen die mir helfen werden. bin auch für änderungs vorschläge offen :-) |
AW: PDF's und Jpg im Datensatz speichern, vorschau und abrufen
Ich schreibe nur mal ein paar Stichworte auf, die dir vielleicht helfen können.
Zitat:
Was du so brauchen könntest: - Einen TOpenDialog um eine Datei auszuwählen, hier kannst du bereits Filter setzen, welche Dateitypen du haben möchtest (PDF/JPG). - Für die Dateivorschau könnte man eine (modeal?) aufgehende weitere Form machen. Darauf brauchst du eine Möglichkeit JPG (TImage, TBitmap, ...) und PDF anzuzeigen. Beim PDF wirds schwieriger evtl. mit einer TWebbrowser Komponente. - Um die Datei in einem passenden anderen Programm (ImageViewer, PDFReader) zu öffnen könntest du dir mal den Befehl ShellExecute anschauen. Falls die Datei zu diesem Zeitpunkt aus der Datenbak kommt, also nicht mehr auf der Platte liegt, müsstest du sie dazu evtl. erst mal temporär auf Platte speichern. - Um die Datei in deiner "Datenbank" zu speichern, habe ich keine Ahnung ob und wie das geht. Es gibt hier schöne Beispiele wie das in einer "richtigen" Datenbank gehen würde, z.B. Firebird, via Blobstream, wie du schon vermutet hast. Aber in einer XML-Datei die du in einem ClientDataset öffnest, k.A. vielleicht geht es da genauso? Zitat:
|
AW: PDF's und Jpg im Datensatz speichern, vorschau und abrufen
Mal etwas zum Drumherum:
|
AW: PDF's und Jpg im Datensatz speichern, vorschau und abrufen
@calikey
Ich weiß nicht ob ich dich richtig verstanden habe, aber vorausgesetzt du willst eine Datei öffnen, dazu würde ich dir ShellExecute (Unit ShellApi) ans Herz legen. |
AW: PDF's und Jpg im Datensatz speichern, vorschau und abrufen
So hab bissel was gefunden und versucht es um zuschreiben aber delphi mag nicht. jetzt ist eure hilfe gefragt
Delphi-Quellcode:
was ist mein fehler oder besser wie muss ich das ändern?
unit doku;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.ExtCtrls, Vcl.ImgList, Vcl.ExtDlgs, Data.DB, Datasnap.DBClient, Vcl.DBCtrls, Vcl.StdCtrls, gtScrollingPanel, gtPDFViewer, gtPDFClasses, gtCstPDFDoc, gtExPDFDoc, gtExProPDFDoc, gtPDFDoc, gtPDFPrinter, Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids, DB; type TForm2 = class(TForm) OpenDialog1: TOpenDialog; Button1: TButton; SaveDialog1: TSaveDialog; gtPDFViewer1: TgtPDFViewer; gtPDFViewer2: TgtPDFViewer; gtPDFViewer3: TgtPDFViewer; dbDemos: TClientDataSet; //von mir geändert tVenues: TClientDataSet; //von mir geändert tVenuesVenueNo: TAutoIncField; tVenuesVenue: TStringField; tVenuesCapacity: TIntegerField; tVenuesVenue_Map: TGraphicField; tVenuesRemarks: TMemoField; DataSource1: TDataSource; DBNavigator1: TDBNavigator; DBMemo1: TDBMemo; DBImage1: TDBImage; btLoadMemo: TButton; btSaveMemo: TButton; btLoadImage: TButton; btSaveImage: TButton; odBlob: TOpenDialog; sdBlob: TSaveDialog; ClientDataSet1: TClientDataSet; ClientDataSet1Arbeitsvertragimg: TBlobField; ClientDataSet1kopie1: TBlobField; ClientDataSet1kopie2: TBlobField; ClientDataSet1kopie3: TBlobField; ClientDataSet1kopie4: TBlobField; ClientDataSet1kopie5: TBlobField; ClientDataSet1kopie6: TBlobField; ClientDataSet1kopie7: TBlobField; ClientDataSet1kopie8: TBlobField; ClientDataSet1kopie9: TBlobField; const TClientDataSet: String = '..\..\Data\Demos.abs'; procedure FormCreate(Sender: TObject); procedure btLoadMemoClick(Sender: TObject); procedure btSaveMemoClick(Sender: TObject); procedure btLoadImageClick(Sender: TObject); procedure btSaveImageClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form2: TForm2; openDialog : TOpenDialog; implementation {$R *.dfm} uses Unit1; procedure TForm2.FormCreate(Sender: TObject); begin dbDemos.DatabaseFileName := ExtractFilePath(Application.ExeName) + DataBaseFileName; //Hier Tclientdataset enthält kein databasefilename dbDemos.Open; tVenues.Open; end; procedure TForm2.btLoadMemoClick(Sender: TObject); var FileStream: TFileStream; BlobStream: TStream; begin if (odBlob.Execute) then begin tVenues.Edit; try BlobStream := tVenues.CreateBlobStream(tVenues.FieldByName('kopie1'),bmWrite); FileStream := TFileStream.Create(odBlob.FileName,fmOpenRead or fmShareDenyNone); BlobStream.CopyFrom(FileStream,FileStream.Size); FileStream.Free; BlobStream.Free; tVenues.Post; except tVenues.Cancel; end; end; end; procedure TForm2.btSaveMemoClick(Sender: TObject); var FileStream: TFileStream; BlobStream: TStream; begin if (sdBlob.Execute) then begin FileStream := TFileStream.Create(sdBlob.FileName,fmCreate); BlobStream := tVenues.CreateBlobStream(tVenues.FieldByName('kopie1'),bmRead); FileStream.CopyFrom(BlobStream,BlobStream.Size); BlobStream.Free; FileStream.Free; end; end; procedure TForm2.btLoadImageClick(Sender: TObject); var FileStream: TFileStream; BlobStream: TStream; begin if (odBlob.Execute) then begin tVenues.Edit; try BlobStream := tVenues.CreateBlobStream(tVenues.FieldByName('kopie1'),bmWrite); FileStream := TFileStream.Create(odBlob.FileName,fmOpenRead or fmShareDenyNone); BlobStream.CopyFrom(FileStream,FileStream.Size); FileStream.Free; BlobStream.Free; tVenues.Post; except tVenues.Cancel; raise; end; end; end; procedure TForm2.btSaveImageClick(Sender: TObject); var FileStream: TFileStream; BlobStream: TStream; begin if (sdBlob.Execute) then begin FileStream := TFileStream.Create(sdBlob.FileName,fmCreate); BlobStream := tVenues.CreateBlobStream(tVenues.FieldByName('kopie1'),bmRead); FileStream.CopyFrom(BlobStream,BlobStream.Size); BlobStream.Free; FileStream.Free; end; end; end. |
AW: PDF's und Jpg im Datensatz speichern, vorschau und abrufen
Ist das jetzt das Rätsel des Tages "Wo ist hier ein Fehler?" oder teilst du uns - irgendwann - mit was genau nicht funktioniert?
Ein Blick in den
Delphi-Quellcode:
Teil lässt schon mal eine große Verwirrung erahnen.
uses
|
AW: PDF's und Jpg im Datensatz speichern, vorschau und abrufen
Delphi-Quellcode:
so noch mal das problem :-)
procedure TForm2.FormCreate(Sender: TObject);
begin dbDemos.DatabaseFileName := ExtractFilePath(Application.ExeName) + DataBaseFileName; //Hier Tclientdataset enthält kein databasefilename dbDemos.Open; tVenues.Open; end; habe
Delphi-Quellcode:
vorher
dbDemos: TClientDataSet; //von mir geändert
tVenues: TClientDataSet; //von mir geändert
Delphi-Quellcode:
da ich ja eine mybase datenbank habe dachte ich änder das mal und bis auf das eine meckert delphi ja auch nicht.aber wie sag ich da jetzt delphi das er da meine datenbank benutzen soll?
dbDemos: TABSDatabase;
tVenues: TABSTable; |
AW: PDF's und Jpg im Datensatz speichern, vorschau und abrufen
gt ? Gnostice-Units?
Ist zwar jetzt nicht direkt das Problem. Aber stell dich schon mal darauf ein das beim Betrachten von realen PDFs dir die Anwendung öfter um die Ohren fliegen wird. Die Implementierung von Gnostice ist mehr oder minder so aufgebaut das unbekannte Elemente als erstes zu einem Programmabsturz fürhen sollen. |
AW: PDF's und Jpg im Datensatz speichern, vorschau und abrufen
Wenn man in ganzen Sätzen spricht und dabei sehr genau in der Beschreibung ist, dann wird es für Aussenstehende einfacher zu verstehen.
Ich versuche es jetzt mal zu interpretieren: Kann es sein, dass
Delphi-Quellcode:
- was ja jetzt auch ein
tVenues
Delphi-Quellcode:
ist - nicht geöffnet werden kann, weil das Programm nicht weiß wie bzw. woher, weil du diesem keinen Dateinamen (und damit keine Quelle, woher die Daten kommen sollen) gegeben hast?
TClientDataSet
|
AW: PDF's und Jpg im Datensatz speichern, vorschau und abrufen
Mein lieber Calikey,
ganz offensichtlich bist du mit der Delphi-Programmierung nicht nur kaum vertraut, sondern scheinst im Grunde auch keine Ahnung davon zu haben, was irgendwelche Befehle in deinem ![]()
Wenn du dagegen weiterhin so vorzugehen beabsichtigst, wie du das hier sehr anschaulich vorgeführt hast, wirst du erfahrungsgemäß eher früher als später das Handtuch werfen und dich in Zukunft nicht mehr mit Programmieren beschäftigen wollen, weil du durch die falsche Herangehensweise gelernt hast, daß Programmieren nur Frust und Enttäuschung bietet. Es ist auch kaum möglich, dir hier im Rahmen des Forums diese fehlenden Grundlagen beizubringen, denn erstens wäre das sowieso nur eine Wiederholung bereits existierender Tutorials und zweitens äußerst zeitintensiv, wie z.B. ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 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 by Thomas Breitkreuz