AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Probelme mit Datein in Datenbanken
Thema durchsuchen
Ansicht
Themen-Optionen

Probelme mit Datein in Datenbanken

Ein Thema von foxy · begonnen am 20. Jan 2003 · letzter Beitrag vom 21. Jan 2003
Antwort Antwort
Benutzerbild von foxy
foxy

Registriert seit: 4. Nov 2002
Ort: Saarbrücken
62 Beiträge
 
Delphi 6 Enterprise
 
#1

Probelme mit Datein in Datenbanken

  Alt 20. Jan 2003, 09:57
Guden all .... habe folgendes Problem ....
also
ich habe Paradox7 DB mit verschiedenen Datensätz.
Dann habe ich 2 Spalten, in denen Datei eingelagert werden sollten, die eine Grafikdateien(Graphic) die andere alle anderen Arten von Datein (Blob)...
so nur hab ich ein problem ich füge einem Datensatz so die datei zu
Delphi-Quellcode:
if opendialog1.Execute then
   begin
     pfad:=opendialog1.FileName;
     if (ExtractFileExt(OpenDialog1.FileName)='.bmp') then
       begin
        Table1.Edit;
        Table1File.AsString:=pfad;
        Table1BMP.LoadFromFile(pfad);
        DBlistbox1.Items.Add(pfad);
        Table1.Post;
        Pagecontrol1.ActivePageIndex:=2;
       end
     else
      begin
        Table1.Edit;
        Table1File.AsString:=pfad;
        Table1Datei.LoadFromFile(pfad);
        DbListbox1.Items.Add(Pfad);
        Table1.Post;
        Pagecontrol1.ActivePageIndex:=2;
      end;
     end;
alles schön und gut dann steht da auch der pfadname und anscheinend ist auch die Datei in dem entsprechenden feld.
dann kommt das erste Probelm .. schliess ich delphi und öffne es nochaml, dann sind die datensätze noch da nur die dateien nicht mehr.
2. Problem
ich will dann mit doppelklick auf den DBgrid die Dateien öffnen das mache ich so
Delphi-Quellcode:
 if FileExists(Table1.FieldbyName('BMP').AsString) then
      Begin
        Form4.Show;
      end
  else If FileExists(Table1.FieldByName('Datei').AsString) then
       Begin
          GetExe(ExtractFileExt(OpenDialog1.FileName));
       end;
aber wenn ich überprüfe ob eine datei da iss findet er keine ... bitte um hilfe was amche ich falsch???
Kein Plan von nix
MFG Heiko aka Foxy
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2
  Alt 20. Jan 2003, 11:09
Hi,

hast Du Dich da nicht vielleicht mit FileName, FieldByName ('BMP'),ExtractFileExt, usw. irgendwie verzettelt ? Gehe mal am besten alles wieder von vorne durch und lasse dir im Debugger oder mit Showmessage an verschiedenen Stellen die entsprechenden Werte anzeigen, um zu sehen, ob alles so stimmt. Vielleicht sieht irgendjemand anderes einen Fehler, auf die Schnelle sehe ich keinen.

Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von foxy
foxy

Registriert seit: 4. Nov 2002
Ort: Saarbrücken
62 Beiträge
 
Delphi 6 Enterprise
 
#3
  Alt 20. Jan 2003, 11:21
erst ma thx .... aber ich habe scho alles geprüft FieldByName Stimmt ..... also die namen die richtigen werte kommen auch raus also der pfad etc.... ich denke auch das der die file in die db läd, aber 1. sie bleibt da nich drin also wenn ich die db ausmache also auf false, dann sind die datensätze noch da nur die files nimma ... 2. ich merke es daran, denke ich ma das die files da drin sind, weil der rechner an der stelle bissal länger braucht 1 sec oder .... ich weis einfach nich weiter
Kein Plan von nix
MFG Heiko aka Foxy
  Mit Zitat antworten Zitat
Benutzerbild von harrybo
harrybo

Registriert seit: 26. Nov 2002
Ort: Aachen
87 Beiträge
 
Delphi 6 Enterprise
 
#4
  Alt 20. Jan 2003, 12:44
hi foxy, möglicherweise klappt es, wenn Du FieldByName verwendest. Bischen aufgeräumt habe ich auch noch, sollte aber keine Auswirkungen haben.
Delphi-Quellcode:
procedure ...
var
  pfad, vFieldName : string;
begin
  if opendialog1.Execute then begin
    pfad := opendialog1.FileName;
    if ExtractFileExt(pfad)='.bmpthen
      vFieldName := 'BMP'
    else
      vFieldName := 'Datei';
    with Table1 do try
      DisableControls;
      Edit;
      FieldByName('File').AsString := pfad;
      FieldByName(vFieldName).LoadFromFile(pfad);
      Post;
    finally
      EnableControls;
    end;
    DBlistbox1.Items.Add(pfad);
    Pagecontrol1.ActivePageIndex:=2;
  end;
end;
Viel Erfolg, harrybo
Harry Boldt
  Mit Zitat antworten Zitat
Benutzerbild von harrybo
harrybo

Registriert seit: 26. Nov 2002
Ort: Aachen
87 Beiträge
 
Delphi 6 Enterprise
 
#5
  Alt 20. Jan 2003, 13:12
hi foxi,
zu Deinem zweiten Problem: ich verstehe nicht ganz, was in die Zeile GetExe(ExtractFileExt(OpenDialog1.FileName)); die GetExe mit der FielExtension machen soll. Ich nutze zum Starten externer Dateien mit der zugehörigen Application ShellExecute und habe mir dafür eine kleine Funktion geschrieben:
Delphi-Quellcode:
// in Abschnitt interface
function StartFile (Hdl: word; FileStr: String; Par: String ): integer;

// in Abschnitt implementation
function StartFile (Hdl: word; FileStr: string; Par: string ): integer;
var
  i : integer;
  path : string;
  vErr : string;
begin
  FileStr := FileStr + chr(0);
  path := '' + chr(0);
  try
    i := shellexecute(Hdl, nil, @FileStr[1], @Par[1], @path[1], SW_SHOW);
  except
    vErr := 'Problem beim Starten der externen Datei';
    MessageDlg(vErr, mtInformation, [mbOk], 0);
    i:= -1;
  end;
  result:= i;
end;
Dein Aufruf sähe dann so aus:
Delphi-Quellcode:
procedure ...
var
  vFileName : string;
begin
  if FileExists(Table1.FieldbyName('BMP').AsString) then
    Form4.Show
  else begin
    vFileName := Table1.FieldByName('Datei').AsString;
    If FileExists(vFileName) then
      StartFile(Handle, vFileName, '');
  end;
end;
Nochmals viel Erfolg, harrybo
Harry Boldt
  Mit Zitat antworten Zitat
Benutzerbild von foxy
foxy

Registriert seit: 4. Nov 2002
Ort: Saarbrücken
62 Beiträge
 
Delphi 6 Enterprise
 
#6
  Alt 21. Jan 2003, 07:48
getexe iss eine Function, die rausfindet, über die registry, welche dazugehörige Programm zu der entsprechenden .xxx gehört
Delphi-Quellcode:
function GetExe(Ext:string):string;
var reg : TRegistry;
    s : String;
Begin
  s:='';
  reg:=TRegistry.Create;
  reg.RootKey:=HKEY_CLASSES_ROOT;
  if reg.OpenKey('.'+ext+'\shell\open\command', false) then
   begin
    s:=reg.ReadString('');
    reg.CloseKey;
  end
  else begin
    if reg.OpenKey('.'+ext, false) then begin
      s:=reg.ReadString('');
      reg.CloseKey;
      if s<>'then begin
        if reg.OpenKey(s+'\shell\open\command', false) then
          s:=reg.ReadString('');
          reg.CloseKey;
      end;
    end;
  end;
  if Pos('%', s)>0 then
    Delete(s, Pos('%', s), length(s));
  if ((length(s)>0) and (s[1]='"')) then
    Delete(s, 1, 1);
  if ((length(s)>0) and (s[length(s)]='"')) then
    Delete(s, Length(s), 1);
  while ((length(s)>0) and
   ((s[length(s)]=#32) or (s[length(s)] = '"'))) do
    Delete(s, Length(s), 1);
  result := s;
end;
aber dennoch thx für deine Hilfe ... ich denke ich verwende einfach nur den Pfad in der DB
Kein Plan von nix
MFG Heiko aka Foxy
  Mit Zitat antworten Zitat
Benutzerbild von harrybo
harrybo

Registriert seit: 26. Nov 2002
Ort: Aachen
87 Beiträge
 
Delphi 6 Enterprise
 
#7
  Alt 21. Jan 2003, 13:55
Hi foxy,
Deiner Antwort kann ich leider nicht entnehmen, ob Dir mein Codebeispiel zu 1 weitergeholfen hat.

Zu 2: Shellexecute würde ich dennoch dem Stöbern in der Registry vorziehen. Es startet ein File, ähnlich, als würde man auf dieses doppelt klicken. Welche Application nun gestartet wird übernimmt das System, GetExe wird damit überflüssig. Zumindest sehe ich im Moment keinen Vorteil von GetExe, zumal: das gefundene Programm muss dann immer noch aufgerufen werden, mit dem entsprechend zu ladenden File als Parameter.

gruß, harrybo
Harry Boldt
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8
  Alt 21. Jan 2003, 17:38
Hi Foxy,

hehe Das hast Du nun davon. Ich hab es Dir ja prophezeit. In dem anderen Thread habe nur ich Dir gepostet. Anscheinend verstehe mittlerweile nur noch ich den Zusammenhang zwischen den Threads. In dem anderen stehen die Antworten schon zu ca. 80 % drin und hier weiß keiner was davon, die wundern sich nur, daß keine Fragen mehr kommen. Wie denn auch ? Wenn ich das Gröbste schon woanders geklärt habe. Wenn Du Pech hast, hängst Du jetzt länger am Rest, als an den 80 %. Jetzt muß ich selber überlegen, was da noch übrig war

Der arme Harrybo beantwortet Dir Fragen, zu denen Du von mir schon längst ein Beispiel hast. Hoffentlich siehst Du, daß er ungefähr dasselbe schreibt wie ich. In Zukunft würde ich diesen Unfug sein lassen. Dann wärst Du wahrscheinlich schon fertig. Wie heißt es : "Viele Köche verderben den Brei!" Und Du kochst ihn noch an 10 Stellen gleichzeitig.

Gruß
Hansa
  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 20:24 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