AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken PDF's und Jpg im Datensatz speichern, vorschau und abrufen
Thema durchsuchen
Ansicht
Themen-Optionen

PDF's und Jpg im Datensatz speichern, vorschau und abrufen

Ein Thema von calikey · begonnen am 27. Mär 2015 · letzter Beitrag vom 31. Mär 2015
Antwort Antwort
calikey

Registriert seit: 19. Mär 2015
29 Beiträge
 
Delphi XE7 Architect
 
#1

PDF's und Jpg im Datensatz speichern, vorschau und abrufen

  Alt 27. Mär 2015, 10:33
Datenbank: clientdataset1 • Version: ? • Zugriff über: xml
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
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
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.739 Beiträge
 
Delphi 6 Enterprise
 
#2

AW: PDF's und Jpg im Datensatz speichern, vorschau und abrufen

  Alt 27. Mär 2015, 15:13
Ich schreibe nur mal ein paar Stichworte auf, die dir vielleicht helfen können.

Zitat:
sollte das über button gelöst werden ?
Das musst du ja wissen, wie der User das auslösen soll, oder was generell in deinem Programm passieren soll. Prinzipiell ist es aber sinnvoll dir Prozeduren und Funktionen zu erstellen, die das machen was du erreichen willst und dann im Button-OnClick diese Prozeduren zu verwenden/aufzurufen. Du solltest nicht im ButtonOnClick den ganzen Code unterbringen (falls die Frage so gemeint war).

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:
zu 3.
denke mal über onklick aber wie ist da der quellcode auch showmodal?
Was soll uns diese Frage sagen?
Ralph

Geändert von Jumpy (27. Mär 2015 um 15:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: PDF's und Jpg im Datensatz speichern, vorschau und abrufen

  Alt 27. Mär 2015, 15:22
Mal etwas zum Drumherum:
  • Deine Delphi-Version kannst du in deinem Profil angeben
  • Deine User-Skills (Ich bin Anfänger) kannst du in deiner Profil-Signatur angeben
  • Die verwendete Datenbank ist MyBase und der Zugriff erfolgt über TClientDataSet
Schon verkürzen sich deine Fragen und beschränken sich auf das Wesentliche. Den Rest kann man ganz bequem deinem Profil/Signatur entnehmen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#4

AW: PDF's und Jpg im Datensatz speichern, vorschau und abrufen

  Alt 27. Mär 2015, 15:42
@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.
  Mit Zitat antworten Zitat
calikey

Registriert seit: 19. Mär 2015
29 Beiträge
 
Delphi XE7 Architect
 
#5

AW: PDF's und Jpg im Datensatz speichern, vorschau und abrufen

  Alt 31. Mär 2015, 12:35
So hab bissel was gefunden und versucht es um zuschreiben aber delphi mag nicht. jetzt ist eure hilfe gefragt
Delphi-Quellcode:
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.
was ist mein fehler oder besser wie muss ich das ändern?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: PDF's und Jpg im Datensatz speichern, vorschau und abrufen

  Alt 31. Mär 2015, 12:41
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 uses Teil lässt schon mal eine große Verwirrung erahnen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
calikey

Registriert seit: 19. Mär 2015
29 Beiträge
 
Delphi XE7 Architect
 
#7

AW: PDF's und Jpg im Datensatz speichern, vorschau und abrufen

  Alt 31. Mär 2015, 21:39
So jetzt hab ich endlich mal bissel zeit.
Also versuch das jetzt mal etwas aufzuarbeiten.

@Bernhard Geyer
ja Gnostice. habs mir zum testen geladen weil ich dachte das ist ja im grunde was ich suchen würde.
wenn das aber sehr instabil ist, dann bin ich sehr gern für eine alternative offen.

@Perlsau
Ich bin ein Mensch der am besten durch versuch und irrtum lernt. Das was ich grad vorhabe ist im grunde eine erweiterung zu meiner selbst gebastelten Personal Datenbank. Ich Habe mit bekommen das Die von mir gewählte Mybase datenbank nicht unbedingt die optimalste lösung ist. Da ich aber bereits unsere datenbank mit allen daten von unseren gesamten Mitarbeitern gefüllt habe sehe ich es als schwierig an die datenbankform zuändern ohne die daten zuverlieren. ich find es schon interessant was eigenes zu kreieren und damit dann zu arbeiten, denn wenn dann was nicht funktioniert kan man nur auf einen sauer sein und zwar auf sich selbst. Ich weiß das ich noch nicht alle Grundlagen und Vorgänge verstanden habe, aber ich lerne schnell und wenn ich tipps und kleine hilfestellungen bekomme bei sachen die ich nicht versteh kann ich mir auch oft was herleiten. dafür ist denke ich mal auch so ein forum da man versteht etwas nicht und benötigt hilfe.
zb hier du sagst ich habe zu viele uses die alte und auch neue. ok dann schau ich mir die uses an was die tun und ob ich diese brauchen könnte. ohne diesen hinweis wären die dring und unbeachtet geblieben. danke an dieser stelle. zeit intensiv ja das kann ich mir vorstellen. deswegen dränge ich keinen falls und keine ist gezwiungen etwas zu schreiben oder zu Antworten, wer helfen mag ist aber sehr willkommen und ich habe kein Problem mit hinweisen oder verbesserungen.

@blondervolker
Ja MyBase Der code Stammt von einer Absolut Database Wenn ich mich nicht täusche. und ich versuche ihn so zu ändern das er mit der MyBase Funktioniert.

@Sir Rufo
Ja ich bin nicht einfach aber danke das du verstehst was ich mein
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#8

AW: PDF's und Jpg im Datensatz speichern, vorschau und abrufen

  Alt 31. Mär 2015, 23:32
Was du hier machst, hat mit Lernen aber eher wenig bis gar nichts zu tun, denn du kopierst nur irgendwelche Code-Teile zusammen und hoffst, daß das dann irgendwie läuft. Da es das erwartungsgemäß nicht tut, fragst du hier im Forum nach, und aufgrund deiner fehlenden Grundkenntnisse nützen dir die Erklärungen nicht wirklich was bzw. bringen dich nicht weiter, weil du sie nicht verstehst. Letztlich läuft es wie so oft darauf hinaus, daß man dem Fragesteller den benötigten Code schreibt oder, was wahrscheinlicher ist, einfach nicht mehr antwortet.

Dieses absolute Unverständnis zeigt sich auch in dieser Antwort wieder: Du schreibst, du hättest bereits eine Datenbank mit allen Mitarbeitern gefüllt und willst daher die Datenbankform nicht ändern, weil die Daten sonst verloren wären. Das kann ich nicht nachvollziehen. Wie sollten die Daten verlorengehen, wenn du sie aus der alten Datenbank ausliest und in die neue Datenbank einträgst? Mir sagt diese deine Sichtweise vor allem, daß es dir an grundsätzlichem Verständnis mangelt, nicht nur was Datenbanken betrifft, sondern überhaupt was den Umgang mit Daten betrifft. Geht denn ein Text in einer Textdatei (*.txt) verloren, wenn du nun eine Word-Datei (*.doc) anlegst, um dort den Inhalt der Textdatei reinzukopieren?

Ein Fachforum ist nicht wirklich dazu da, um jedem Anfänger erstmal die Basiskenntnisse zu vermitteln. Das kannst du im Grunde nur selber machen. Man weiß ja gar nicht, wo man ansetzen soll, wenn man feststellt, daß im Grunde jeder Erklärungsversuch auf Unverstädnis stößt, weil eben diese Grundkenntnisse fehlen.

Auch an deinem Textverstädnis scheint es zu hapern, denn du behauptest, ich hätte gesagt, du hättest zu viele Uses. Nein, das habe ich nicht gesagt, sondern daß du doppelte Units (und nicht Uses) im Uses-Abschnitt stehen hast. Du weißt aber gar nicht, was das bedeutet, auch nicht, wenn ich dir erkläre, daß dein Programm gar nicht wissen kann, welche Units zu verwenden sind, wenn du da zwei Versionen derselben Units (für ältere und für neuere Delphi-Versionen) drinstehen hast. Und genau das meinte ich: Man kann eigentlich überhaupt keine Fehlerbehebung machen, ohne dir auch gleich den vollständigen Code zu liefern, denn du begreifst die Hinweise aufgrund fehlender Basiskenntnisse erst gar nicht. Wenn du jemanden suchst, der dir ein Programm schreibt, dann kostet das was, denn schließlich leben die meisten hier davon und haben mit Sicherheit keine Lust, dir deinen gesamten Code zu schreiben, nur weil du letztlich, um es mal deutlich zu sagen, zu faul bist, dich um die Grundlagen zu bemühen, so daß du hilfreiche Hinweise auch zu verstehen in der Lage bist.

Hast du dir nun die Uses angeschaut und herausgefunden, was die tun und ob du sie "brauchen könntest"?

Tatsächlich gibt es keine Uses zum anschauen, denn Uses ist lediglich ein Befehl, der eine Sektion einleitet, die mit Semikolon abgeschlossen wird. Innerhalb dieser Sektion stehen Unit-Bezeichner, die in der jeweiligen Unit Verwendung finden. Wenn du z.B. eine Komponente auf deiner Form platzierst, fügt Delphi automatisch die benötigten Units deiner Uses-Klausel hinzu.

Das war jetzt ein Beispiel für Grundkenntnisse ... die dir fehlen, was deine eigentlich völlig unnötige Verwirrungen weiter verstärkt. Wie gesagt: Mach dir mal die Mühe und arbeite ein paar Anfänger-Tutorials durch, damit zu zumindest das Grundlegende verstehen kannst. Du wirst dabei lernen,
  • was eine Unit ist,
  • wozu Uses-Klauseln dienen,
  • was es mit den weiteren Sektionen in einer Unit auf sich hat,
  • wie eine Unit überhaupt strukturiert ist,
  • wie man Methoden implementiert,
  • und vieles mehr, was dir bislang völlig fremd zu sein scheint, aber fürs Programmieren unbedingte Voraussetzung ist.

Du schreibst, du hättest kein Problem mit Hinweisen oder Verbesserungen. Offenbar hast du aber doch ein Problem, wenn der Hinweis darin liegt, deinem Mangel an Basiskenntnissen abzuhelfen. Du kannst nicht die Programmiersprache allein durch Versuch und Irrtum lernen – mit dieser Methode versuchst und irrst du in zehn Jahren noch immer. Es gibt hier in der Tat ein paar solcher Kandidaten, die sind hier schon seit Jahren angemeldet und fragen immer mal wieder auf demselben Niveau, das du hier zeigst. Da antwortet dann auch kaum noch jemand, weil es sich nicht lohnt, denn schließlich will keiner hier seine Perlen vor die Säue werfen ...
  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:03 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