AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Parameter unter Firedac
Thema durchsuchen
Ansicht
Themen-Optionen

Parameter unter Firedac

Ein Thema von Delbor · begonnen am 4. Mär 2016 · letzter Beitrag vom 11. Mär 2016
 
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.192 Beiträge
 
Delphi 11 Alexandria
 
#22

AW: Parameter unter Firedac

  Alt 10. Mär 2016, 14:08
Hi zusammen
Im Moment siehts ganz danach aus, als ob die DB den String/Stream akzeptiert:
Delphi-Quellcode:
procedure TOpenFileFrame.Btn_OkClick(Sender: TObject);
  var AUser,APass, Bildpfad, LPath : String;
      FolderID : TStringstream; LIdFolder: String; // <=Da Fettdarstellung innerhalb der Delphi-Tags nicht funktioniert - die Änderungen
      LPathCount, i: integer;
begin
  LPathCount := Self.FPathlist.Count;
  CM_First.CreateProgressbarDlg(LPathCount); // Create den ProgressbarDialog und zeigt ihn an // Dazu braucht das System etwas Zeit
  try
    CM_First.ProgressbarDlg.Top := 20;
    CM_First.ProgressbarDlg.Left := (CM_First.ProgressbarDlg.Monitor.Width - CM_First.ProgressbarDlg.Width) div 2;
    Application.ProcessMessages;
    FDMySQLDml.Pathlist.AddStrings(FPathlist);
    CM_First.Listbox1.Items.AddStrings(FPathlist);
    Bildpfad := FPathList[0];
    LPath := ExtractFilePath(Bildpfad)+'IdentFile.cgf';
    if not FileExists(LPath+'IdentFile.cgf') then
    begin // ist in dem Ordner kein IdentifikationsFile
      FolderID := TStringstream.Create;
      LIdFolder := CreateIDFile(LPath);
      FolderID.WriteString(LIdFolder); /// wird eines angelegt
    end;
    if FDMySQLDml.DefineContentmasterConnection then
    begin
      try
        FDMySQLDml.FDConnectionMySql.StartTransaction;
        FDMySQLDml.BildTabelleInsert2(100, FolderID); // Startet die Insert-Prozeduren
        FDMySQLDml.FDConnectionMySql.Commit;
      except
        FDMySQLDml.FDConnectionMySql.Rollback;
      end;
    end;
  finally
      CM_First.ProgressbarDlg.FormStyle := fsnormal;
      CM_First.ProgressbarDlg.Close;
      FreeAndNil(CM_First.ProgressbarDlg);
      if assigned(FolderID) then
        FolderID.Free;
  end;
end;
Für einmal die komplette Prozedure, welche die Inserts startet. Die Änderungen sind fett dargestellt.
Delphi-Quellcode:
procedure TFDMySQLDml.BildTabelleInsert2(Seitenlaenge: Integer; FolderID: TStringstream);
  var BMap: TBitmap; BJpeg: TJPEGImage; SQLString,Bildname, Bildpfad: String;
       BildTabelleLastId,IDBild, i,inserted : Integer; LPicture : TPicture;
       LThumbMemory : TMemoryStream;
begin
  LThumbMemory := TMemoryStream.Create;
  LPicture := TPicture.Create;
  BMap := TBitmap.Create; //Lokal
  BJpeg := TJpegImage.Create; //Lokal
  BJpeg.CompressionQuality := 100;
  BJpeg.PixelFormat := jf24Bit;
 try
    FTotal := FPathList.Count;
    for i := 0 to FPathList.Count - 1 do
    begin
      FRest := FPathList.Count - i;
      if FDQueryMain.Active then
        FDQueryMain.Active := False;
      Bildname := ExtractFileName(FPathList[i]);
      Bildpfad := FPathList[i];
      Delete(BildName,Length(BildName)-3,4);
        LThumbMemory.Clear; //<= Beim 2. durchlauf gibts hier eine AV
        if ExtractFileExt(FPathList[i]) = '.NEFthen
        begin
          LPicture.LoadFromFile(FPathList[i]);
          BMap.Assign(LPicture.Graphic);
          FModifyBitmap.ScaleBitmaps(BMap, Seitenlaenge);
          BJpeg.Assign(BMap);
          BJpeg.SaveToStream(LThumbMemory);
          BildTabelleLastId := BildInsertQuery(LThumbMemory, FolderId);
          FReportList.Add(' '+ IntToStr(i)+'-TPicAdmin.BildTabelleInsert2');
          FReportList.Add(' ');
          BildDescribeTabelleInsert(BildTabelleLastId,BildName,Bildpfad); //Ab hier werden nacheinander die Insert-Prozeduren
          inserted := 1; //aufgerufen
          if Assigned(FOnInsertedRecord) then //<== Hier wird das Event gefeuert; zu dem Zeitpunkt wurde
            FOnInsertedRecord(Self,inserted); //<== ein Datensatz über die verschiedenen Tabellen eingefügt
        end;
    end;
  finally
    LThumbMemory.Free;
    FreeAndNil(BJpeg);
    FreeAndNil(BMap);
    FreeAndNil(LPicture);
  end;
end;
In der 2. Prozedur wird die Iteration durch die Pfadliste begonnen, wobei beim 2. Durchlauf eine AV ausgelöst wird, wenn LThumbMemory geleert werden soll. Wie aber ersichtlich ist, wiird LThumbMemory erst nach getaner Arbeit freigegeben.
Da ich LThumbMemory als Parameter übergebe, kamm mir die Idee, Firedac gäbe den Stream nach getaner Arbeit frei. Das aber kannnicht sein, da ein Probelauf schonmal funktioniert hatte.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch

Geändert von Delbor (10. Mär 2016 um 14:12 Uhr)
  Mit Zitat antworten Zitat
 


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 02:30 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