Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Delphi Öffnen einer durch DBEdit festgelegten .txt-Datei (https://www.delphipraxis.net/187060-oeffnen-einer-durch-dbedit-festgelegten-txt-datei.html)

jonrot1906 24. Okt 2015 20:30

Öffnen einer durch DBEdit festgelegten .txt-Datei
 
Liebe Delphi-Praxis-Community,

ist es möglich, eine Datei (genauer gesagt eine .txt-Datei), welche durch ein DBEdit-Feld festgelegt ist beispielsweise mit einer TProcess-Procedur oder ShellExecute zu öffnen? Der Dateiname soll also im DBEdit-Feld ausgegeben werden (vorher in einer Art Adressbuch festgelegt) und die Datei bei Click auf einen Button geöffnet werden - klingt simpel, aber ich beiße mir daran ein wenig die Zähne aus.:? Könnt ihr mir einen Tipp geben? Meine Ideen (beispielsweise eine ShellExecute "auseinandernehmen", den Dateinamen einfügen und öffnen) sind bis jetzt weitgehend schiefgegangen. Über eine Antwort würde ich mich sehr freuen.

Mit freundlichen Grüßen,

jonrot1906.

Sir Rufo 24. Okt 2015 20:42

AW: Öffnen einer durch DBEdit festgelegten .txt-Datei
 
Wobei hast du denn jetzt das Problem?
  1. String auslesen
  2. ShellExecute aufrufen

hoika 25. Okt 2015 03:51

AW: Öffnen einer durch DBEdit festgelegten .txt-Datei
 
Hallo,
was ich nie verstehen werde:
Warum gibt es bei so einer Frage nie Quellcode?

Heiko

Perlsau 25. Okt 2015 10:00

AW: Öffnen einer durch DBEdit festgelegten .txt-Datei
 
Was zum Geier soll das sein: ein DBEdit-Feld? DBEdit ist eine datensensitive Komponente zur Darstellung und Bearbeitung des Inhalts eines Tabellenfeldes. Dem Feld ist es dabei vollkommen egal, ob es durch ein DBEdit oder z.B. ein DBText dargestellt wird. Mit anderen Worten: die zufällig oder absichtlich gewählte Komponente zur Darstellung des Feldinhaltes definiert nicht das Feld. Daher gibt es auch kein DBEdit-Feld :!:

Hast du eine Tabelle, die über eine Spalte verfügt, in der du komplette Dateinamen abspeicherst, rufst du einfach den jeweiligen Dateinamen aus der Datenbank ab. Dabei ist es vollkommen gleichgültig, ob dieser Dateiname gerade in einer datensensitiven Komponente angezeigt wird oder nicht.
Delphi-Quellcode:
Procedure TDatMod.Q_MyTableAfterScroll(DataSet: TDataSet);
begin
  GlobalerDateiName := Q_MyTable.FieldByName('DATEINAME').AsString;
end;
Diesen Dateinamen übergibst du dann der entsprechenden Methode, um z.B. eine URL anzuzeigen:
Delphi-Quellcode:
Procedure TGlobalix.URLanzeigen(Const URLText: string; Handle: HWND);
begin
   URL := PChar(URLText + #0);
   ShellExecute(Handle, nil, URL, nil, nil, SW_SHOW);
end;
Oder um ein Programm zu starten, das mit dem Dateityp verknüpft ist:
Delphi-Quellcode:
Procedure TGlobalix.CallApplication(Const Datei: string; Handle: HWND);
begin
  ShellExecute(Handle, 'open',PChar(ExtractFileName(Datei)),
               nil,PChar(ExtractPileDir(Datei)),SW_SHOWNORMAL);
end;

jonrot1906 25. Okt 2015 18:27

AW: Öffnen einer durch DBEdit festgelegten .txt-Datei
 
Zunächst erstmal vielen Dank für die schnellen Antworten. Die angebrachten Bemerkungen werde ich mir zu Herzen nehmen und versuchen, es beim nächsten Mal besser zu machen.
Mein Grundproblem hat @perlsau ganz gut erkannt und auch sehr gut beantwortet, dankesehr dafür.
Im Folgenden habe ich den Quellcode meines Programms angefügt, wobei ich dazu sagen muss, dass dieser aktuell noch in Lazarus geschrieben ist.

Delphi-Quellcode:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, sqlite3conn, sqldb, db, FileUtil, Forms, Controls,
  Graphics, Dialogs, StdCtrls, ExtCtrls, DBGrids, DbCtrls, Calendar, EditBtn,
  ComCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Calendar1: TCalendar;
    DataSource1: TDataSource;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    DBEdit3: TDBEdit;
    DBEdit4: TDBEdit;
    DBEdit5: TDBEdit;
    DBEdit6: TDBEdit;
    DBEdit7: TDBEdit;
    DBEdit8: TDBEdit;
    DBEdit9: TDBEdit;
    DBGrid1: TDBGrid;
    DBNavigator1: TDBNavigator;
    FileNameEdit1: TFileNameEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    OpenDialog1: TOpenDialog;
    Panel1: TPanel;
    SQLite3Connection1: TSQLite3Connection;
    SQLQuery1: TSQLQuery;
    SQLTransaction1: TSQLTransaction;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }


procedure TForm1.Button1Click(Sender: TObject);
begin
    SQLQuery1.Edit;
    SQLQuery1.UpdateMode:=UpWhereChanged;
    SQLQuery1.ApplyUpdates;
    SQLTransaction1.Commit;
    SQLQuery1.Close;
    SQLQuery1.Open;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  SQLQuery1.Close;
  SQLQuery1.Open;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  close;
end;

procedure TForm1.Button4Click(Sender: TObject);
var
   o : String;
begin
  o:=DBEdit1.Text;
  FileNameEdit1.Text:='C:\Users\Jonas\Documents\BUSSE\Adressbuch2\' + o + '.txt';
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
     Form1. Caption:='SQLite database with DBNavigator';

      SQLite3Connection1.DatabaseName:='Adressbook.db';
      SQLite3Connection1.Connected:=true;

      SQLTransaction1.Database:=SQLite3Connection1;

      SQLQuery1.Database:=SQLite3Connection1;
      SQLQuery1.SQL.text:='Select * FROM Adressbook';
      SQLQuery1.open;

      DataSource1.DataSet:=SQLQuery1;

      DBGrid1.DataSource:=DataSource1;

      DBNavigator1.DataSource:=DataSource1;

      DBEdit1.DataSource:=Datasource1;
      DBEdit2.DataSource:=Datasource1;
      DBEdit3.DataSource:=Datasource1;
      DBEdit4.DataSource:=Datasource1;
      DBEdit5.DataSource:=Datasource1;
      DBEdit6.DataSource:=Datasource1;
      DBEdit7.DataSource:=Datasource1;
      DBEdit8.DataSource:=Datasource1;
      DBEdit9.DataSource:=Datasource1;

      DBEdit1.DataField:='ID';
      DBEdit2.DataField:='Vorname';
      DBEdit3.DataField:='Nachname';
      DBEdit4.DataField:='Strasse';
      DBEdit5.DataField:='PLZ';
      DBEdit6.DataField:='Ort';
      DBEdit7.DataField:='EMail';
      DBEdit8.DataField:='Telefon';
      DBEdit9.DataField:='Verzeichnis';

      DBGrid1.AutoFillColumns:=true;
end;

end.
Anstelle von FileNameEdit wollte ich gern ShellExecute oder ähnliches einfügen, um den in der Spalte 'Verzeichnis' ausgegebenen Dateinamen schließlich zu öffnen.
Die Idee von @perlsau werde ich gleich mal ausprobieren, mal sehen ob es funktioniert.

Mit freundlichen Grüßen

jonrot1906


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:00 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