![]() |
Datenbank: ODBC • Version: xxx • Zugriff über: FireDAC
Qry:Params.Clear bringt Fehler
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! |
AW: Qry:Params.Clear bringt Fehler
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. :( |
AW: Qry:Params.Clear bringt Fehler
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! |
AW: Qry:Params.Clear bringt Fehler
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
Delphi-Quellcode:
oder die Parameter löschen will
uDataModul.DataModule1.FDConnection1.Connected := False
Delphi-Quellcode:
oder den Stream frei geben will
uDataModul.DataModule1.FDQry_Update.Params.Clear
Delphi-Quellcode:
oder die Query schließen will
uDataModul.DataModule1.FDQry_Update.CloseStreams
Delphi-Quellcode:
.
uDataModul.DataModule1.FDQry_Update.Close
Auch in allen möglichen Reihenfolgen/ Kombinationen probiert.
Delphi-Quellcode:
Fehlermeldung:
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; Zitat:
Hat jemand noch eine Idee wie man die uDataModul.DataModule1.FDQry_Update closen kann, *ohne* dass die Fehlermeldung ausgelöst wird? Vielen Dank. |
AW: Qry:Params.Clear bringt Fehler
Hallo Frühlingsrolle,
das With entfernen hatte leider nichts geändert. Ich habe nun aber herausgefunden, dass im Finally-Block nur noch
Delphi-Quellcode:
stehen darf! DANN FUNKTIONERT ES (es kommt KEINE Schutzverletzung mehr)!!!
uDataModul.DataModule1.FDQry_Update.Close;
uDataModul.DataModule1.FDConnection1.Connected := False; Ich darf also meinen Stream l_AStream nicht freigeben... Wird denn durch
Delphi-Quellcode:
auch mein Stream l_AStream gefree'ed (l_AStream.Free) ????
FDQry_Update.Close
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. |
AW: Qry:Params.Clear bringt Fehler
Mit der Zuweisung auf
Delphi-Quellcode:
wird der
TFDParam.AsStream
Delphi-Quellcode:
Eigentümer des Streams. Willst du das steuern, musst du
TFDParam
Delphi-Quellcode:
verwenden.
SetStream
|
AW: Qry:Params.Clear bringt Fehler
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. |
AW: Qry:Params.Clear bringt Fehler
Zitat:
![]() Zitat:
![]() Zitat:
|
AW: Qry:Params.Clear bringt Fehler
Danke Uwe!
In meiner Offline Hilfe war ich wohl zu dämlich das zu finden. :oops: 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! |
AW: Qry:Params.Clear bringt Fehler
Ich muss gestehen, daß im deutschen Text zu
Delphi-Quellcode:
erst ein Übersetzungsfehler bereinigt werden musste, der für Verwirrung sorgen konnte. 8-)
TFDParam.AsStream
|
AW: Qry:Params.Clear bringt Fehler
Du willst doch bestimmt nicht die Params löschen (und neu erstellen), sonden die Werte der Params zurücksetzen? :zwinker:
Das SQL und somit die Parameter-Definitionen änderst du ja scheinbar nicht. Aber wenn das alle Parameter sind und du denen sowieso neue Werte zuweist, wäre es garnicht nötig die vorher leer zu machen. ![]() ![]() Zitat:
![]() Zitat:
|
AW: Qry:Params.Clear bringt Fehler
Hallo himitsu,
doch, ich muss tatsächlich die Params pro Schleifendurchlauf löschen.:-D Ich lese eine XML Datei in unsere DB ein. Da sind jeweils pro Schleifenzähler auch unterschiedliche Tabellen betroffen. Und um da noch durchzusteigen verwende ich dann auch Bezeichner, mit denen ich dann klar komme. Verwendet ihr eigentlich immer die Embarcadero Online Hilfe? Ich werd diese in Zukunft wohl auch öfter nutzen. Muss nur klar kommen WIE man da was findet. |
AW: Qry:Params.Clear bringt Fehler
Moin...:P
Zitat:
besser und aktuell: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:51 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