Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.188 Beiträge
 
Delphi 12 Athens
 
#5

AW: UnpreparedExecute führt SQL doppelt aus

  Alt 8. Aug 2014, 17:33
Ist eine 4.3.7, meinte grade der Einstellungsdialog an der PgConnection.

sieht nach Idee 1 aus.
Allerdings ist das schon recht alter Kram. Ist Dein Treiber so alt? Oder haben sie den Bug redeployed?
Sieht danach aus, vielleicht hatten die den auch zweimal drin und nur das erste Vorkommen behoben, oder doch für mich wieder eingebaut.

Zitat:
4.1.3 18-Sep-13
Bug when UnpreparedExecute option is set to True is fixed
Wobei Dieses eigentlich auch nicht schlecht klingt, aber sollte ebenfalls schon drin sein.



Schön ist auch der Fehler darüber.
Zitat:
Fixed bug with string fields longer than 65535
DevExpress dreht gern voll durch, wenn VARCHAR-Felder, ohne Längenangabe, rüberkommen, denn PgDAC behauptet dann das Feld sei 16 KB groß (8192 Chars), aber da VARCHAR dennoch mehr enthalten kann, rauchen dann die DBGrids ab und nehmen das Programm mit wenn doch mal mehr als 8191 Zeichen in soeinem Feld drin stecken.



Hab mich nochmal bissl durchgekämpft.

bei SELECT pg_sleep(15), 1 :
Code:
dac150.MemData.TData.Open ===> einmal Ausführen
dac150.MemDS.TMemDataSet.InternalOpen
dac150.DBAccess.TCustomDADataSet.InternalOpen
:5071fd43 TDataSet.DoInternalOpen + $1F
dac150.DBAccess.TCustomDADataSet.OpenCursor(False)
:5071fcb7 TDataSet.SetActive + $5B
dac150.DBAccess.TCustomDADataSet.SetActive(???)
:5071fafe TDataSet.Open + $A
...
bei SELECT pg_sleep(15) :
Code:
dac150.MemData.TData.Open ===> nochmal Ausführen
:02074a05 TPgSQLCommand.ReadOutParams + $335
:02074627 TPgSQLCommand.DescribeParams + $5B
:02073918 TPgSQLCommand.SetProp + $30
dac150.CRAccess.TCRRecordSet.ExecCommand
:020752d1 TPgSQLRecordSet.InternalCreateComplexField + $C9
dac150.CRAccess.TCRRecordSet.ExecFetch(???)
dac150.CRAccess.TCRRecordSet.InternalOpen(False)
:02076b79 ReadBlobs + $15
dac150.MemData.TData.Open ===> einmal Ausführen
dac150.MemDS.TMemDataSet.InternalOpen
dac150.DBAccess.TCustomDADataSet.InternalOpen
:5071fd43 TDataSet.DoInternalOpen + $1F
dac150.DBAccess.TCustomDADataSet.OpenCursor(False)
:5071fcb7 TDataSet.SetActive + $5B
dac150.DBAccess.TCustomDADataSet.SetActive(???)
:5071fafe TDataSet.Open + $A
...
30 sec mit Unpepared=True
SELECT pg_sleep(15) 15 sec mit Unpepared=False
SELECT pg_sleep(15) 15 sec
SELECT pg_sleep(15), 1 Liefert ein "Unexpected server response" und danach ist die ganze Connection futsch.
SQL-Code:
SELECT COALESCE(pg_sleep(15), '')

-- oder
SELECT pg_sleep(15);
SELECT 1;
Doppelt mit Unpepared=True => liefert den "function does not exists"-Fehler (wurde ja schon im ersten Durchlauf gelöscht)
DROP FUNCTION Test() Einfach mit Unpepared=False
DROP FUNCTION Test()
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat