AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Qry:Params.Clear bringt Fehler
Thema durchsuchen
Ansicht
Themen-Optionen

Qry:Params.Clear bringt Fehler

Ein Thema von juergen · begonnen am 15. Feb 2020 · letzter Beitrag vom 19. Feb 2020
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#1

Qry:Params.Clear bringt Fehler

  Alt 15. Feb 2020, 22:09
Datenbank: ODBC • Version: xxx • Zugriff über: FireDAC
Edit: 16.02.2020, Bitte das hier ignorieren und direkt ab Post #6 weiterlesen. Danke!

Hallo zusammnen,

ich setze in einer Schleife -je nach Bedingung- die Params einer Query.
Z.B. (nur auszugsweise ohne Fehlerbehandliung usw.):

Delphi-Quellcode:
WITH FDQry_Update.Params DO
BEGIN
  WITH Add DO
  BEGIN
    NAME := 'Bild';
    DataType := ftStream;
    ParamType := ptInput;
    StreamMode := smOpenWrite; { uses FireDAC.Stan.Intf }
  END;
END;

FDQry_Update.ParamByName( 'Bild' ).AsStream := Bild_codiert_als_Base64_aus_StringList_in_Stream_encodieren( Bild_zaehler ) { function };

FDQry_Update.Close;
FDQry_Update.ParamByName( 'Bild' ).Free;
FDQry_Update.Params.Clear; { <=== ! hier knallt es }

Folgende Fehlermeldung erscheint:
Erste Gelegenheit für Exception bei $000000000040E315. Exception-Klasse $C0000005 mit Meldung 'c0000005 ACCESS_VIOLATION'. Prozess xxxx.exe (9564)

Ich habe nun schon einiges probiert mit .Free usw. und verstehe auch nicht warum bei Clear diese Fehlermedlung erscheint.
Nur bei dieser einen Bedingung -wo der Datentyp ftStream ist- knallt es. Die anderen funktionieren.

Kennt hier jemand das Problem, bzw. weiß Rat woran es liegen könnte?

Vielen Dank schon mal vorab!
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)

Geändert von juergen (16. Feb 2020 um 16:00 Uhr)
  Mit Zitat antworten Zitat
Alt 15. Feb 2020, 22:40     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Qry:Params.Clear bringt Fehler

  Alt 15. Feb 2020, 22:46
Hallo Frühlingsrolle,

leider ist das nicht das Problem. Anfangs hatte ich das auch nicht, hatte halt einiges probiert.
Wenn ich die Zeile weglasse kommt derselbe Fehler.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Alt 15. Feb 2020, 22:51     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Qry:Params.Clear bringt Fehler

  Alt 15. Feb 2020, 23:13
Hallo Frühlingsrolle,
Stop!
Das Problem scheint beim Stream zu sein, ist nämlich leer. Da hatte mich der Debugger auf die falsche Spur gebracht.
Danke erst mal für deine Unterstützung!
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)

Geändert von juergen (16. Feb 2020 um 09:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Qry:Params.Clear bringt Fehler

  Alt 16. Feb 2020, 13:52
Hallo zusammen,

ich kann machen was ich will, es kommt immer die selbe Schutzverletzung, wenn ich einen Parameter als ftStream definiert habe und dann entweder die Connection schließen will uDataModul.DataModule1.FDConnection1.Connected := False oder die Parameter löschen will uDataModul.DataModule1.FDQry_Update.Params.Clear oder den Stream frei geben will uDataModul.DataModule1.FDQry_Update.CloseStreams oder die Query schließen will uDataModul.DataModule1.FDQry_Update.Close .
Auch in allen möglichen Reihenfolgen/ Kombinationen probiert.

Delphi-Quellcode:
WITH uDataModul.DataModule1.FDQry_Update.Params DO
BEGIN
  Clear; { !  weil ich in einer Schleife zuvor auch schon Params anwende muss ich die hier löschen }
  WITH Add DO
  BEGIN
    NAME := 'Bild';
    DataType := ftStream;
    ParamType := ptInput;
    StreamMode := smOpenWrite; { uses FireDAC.Stan.Intf }
  END;
  WITH Add DO
  BEGIN
    NAME := 'RecID_GR';
    DataType := ftInteger;
    ParamType := ptInput;
  END;
END;
TRY
  uDataModul.DataModule1.FDQry_Update.ParamByName( 'Bild' ).AsStream := TStream( l_AStream );
  uDataModul.DataModule1.FDQry_Update.ParamByName( 'RecID_GR' ).AsInteger := gi_RecID_GR;

  uDataModul.DataModule1.FDQry_Update.ExecSQL;
FINALLY
  l_AStream.Free;
  // uDataModul.DataModule1.FDQry_Update.CloseStreams;
  // uDataModul.DataModule1.FDQry_Update.Close;
  // uDataModul.DataModule1.FDQry_Update.Params.Clear;
  // uDataModul.DataModule1.FDConnection1.Params.Free;
  // uDataModul.DataModule1.FDConnection1.Connected := False; <===== bei den 5 Anweisungen knallt es immer (wenn aktiv) mit der selben Fehlermeldung, in allen möglichen Kombinationen
END;
Fehlermeldung:
Zitat:
Erste Gelegenheit für Exception bei $000000000040E315. Exception-Klasse $C0000005 mit Meldung 'c0000005 ACCESS_VIOLATION'

Hat jemand noch eine Idee wie man die uDataModul.DataModule1.FDQry_Update closen kann, *ohne* dass die Fehlermeldung ausgelöst wird?

Vielen Dank.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)

Geändert von juergen (16. Feb 2020 um 16:03 Uhr) Grund: kleinere Anpassungen zum besseren Verständnis
  Mit Zitat antworten Zitat
Alt 16. Feb 2020, 19:07     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Qry:Params.Clear bringt Fehler

  Alt 16. Feb 2020, 21:47
Hallo Frühlingsrolle,

das With entfernen hatte leider nichts geändert.
Ich habe nun aber herausgefunden, dass im Finally-Block nur noch

Delphi-Quellcode:
uDataModul.DataModule1.FDQry_Update.Close;
uDataModul.DataModule1.FDConnection1.Connected := False;
stehen darf! DANN FUNKTIONERT ES (es kommt KEINE Schutzverletzung mehr)!!!

Ich darf also meinen Stream l_AStream nicht freigeben...
Wird denn durch FDQry_Update.Close auch mein Stream l_AStream gefree'ed (l_AStream.Free) ????
Denn ich erhalte wider Erwarten kein Speicherleck beim Beenden des Programms (FastMM4 ist eingebunden und ReportMemoryLeaksOnShutdown steht auch auf True)
Das hatte ich so nicht erwartet.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)

Geändert von juergen (16. Feb 2020 um 21:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#6

AW: Qry:Params.Clear bringt Fehler

  Alt 16. Feb 2020, 22:22
Mit der Zuweisung auf TFDParam.AsStream wird der TFDParam Eigentümer des Streams. Willst du das steuern, musst du SetStream verwenden.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Qry:Params.Clear bringt Fehler

  Alt 17. Feb 2020, 08:35
Guten Morgen Uwe,

danke für aufklärenden Worte. Das bestätigt mein Verdacht im *Nachhinein*. Leider hatte ich diesen Umstand nicht in Betracht gezogen und in der Hilfe auch nichts dazu gefunden, so dass ich viel Zeit benötigt hatte um zu dieser Erkenntnis zu gelangen. Wieder was gelernt.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#8

AW: Qry:Params.Clear bringt Fehler

  Alt 17. Feb 2020, 09:58
und in der Hilfe auch nichts dazu gefunden
Dann hast du offenbar nicht gründlich genug gesucht. Daher hier für's nächste Mal:
Unterstützung für das Blob-Streaming in FireDAC:
Zitat:
Der Parametereigenschaft AsStream eine Stream-Referenz zuweisen. In diesem Fall wird FireDAC zum Eigentümer der Stream-Referenz. Das Objekt wird nach dem Aufheben der Vorbereitung der Abfrage oder nach der nächsten Wertzuweisung freigegeben. Alternativ können Anwendungen mit der Parametermethode SetStream die Eigentümerschaft steuern. Der Stream wird ab der aktuellen Stream-Position verwendet.
FireDAC.Stan.Param.TFDParam.AsStream:
Zitat:
Durch Festlegen der Eigenschaft AsStream wird die Eigenschaft DataType auf ftStream gesetzt, falls es sich nicht um die Zeichen-String-/Byte-String-/BLOB-Datentypen handelt. Der TFDParam wird Eigentümer des zugewiesenen TStream-Objekts. Mit der Methode SetStream können Sie die Eigentümerschaft explizit steuern.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Qry:Params.Clear bringt Fehler

  Alt 17. Feb 2020, 20:27
Danke Uwe!
In meiner Offline Hilfe war ich wohl zu dämlich das zu finden.

Die Hilfe ist an der Stelle ja richtig Klasse.
Habe meinen Code jetzt auch so geändert wie in der Hilfe beschrieben.

Schönen Abend noch!
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#10

AW: Qry:Params.Clear bringt Fehler

  Alt 17. Feb 2020, 22:00
Ich muss gestehen, daß im deutschen Text zu TFDParam.AsStream erst ein Übersetzungsfehler bereinigt werden musste, der für Verwirrung sorgen konnte.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:05 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