Serious Problem when Closing Dataset!!

ThomasW69

Member
Hi @All
I Ise Delphi 2009 and DOA 4.1.1.0.
I have a serious problem Closing a Toracledataset. I can close it once! After reopen and then try to close it a 'invalid pointer' Error will occur.
This is the Error from Delphi

Code:
[1C60A5CD]{doa41d2009.bpl} Oracledata.TOracleDataSet.FreeRowId + D
[500041D2]{rtl120.bpl  } System.ErrorAt (Line 4057, "System.pas" + 3) + 
[1C60A5CD]{doa41d2009.bpl} Oracledata.TOracleDataSet.FreeRowId + D
[1C5F7571]{doa41d2009.bpl} Oracledata.TRecordDataList.FreeRecords + 
[1C5F7125]{doa41d2009.bpl} Oracledata.TRecordDataList + $D
[50006C34]{rtl120.bpl  } System.TObject.Free (Line 9829, "System.pas" + 1) + 
[1C6088DC]{doa41d2009.bpl} Oracledata.TOracleDataSet.InternalClose + 
[504943CE]{dbrtl120.bpl} DB.TDataSet.CloseCursor (Line 10649, "DB.pas" + 6) + 
[50494297]{dbrtl120.bpl} DB.TDataSet.SetActive (Line 10601, "DB.pas" + 21) + 
[1C5F9F89]{doa41d2009.bpl} Oracledata.TOracleDataSet.InternalSetActive + $F9
[5003FC4E]{rtl120.bpl  } TypInfo.SetOrdProp (Line 1506, "TypInfo.pas" + 31) + 
[code]
select a.*, a.rowid from HD_Timeseries_Values a where a.TS_ID=:TSID

[20ABACF2]{designide120.bpl} DesignEditors.TPropertyEditor.SetOrdValue (Line 838, "DesignEditors.pas" + 2) + $E
[20ABBDFB]{designide120.bpl} DesignEditors.TEnumProperty.SetValue (Line 1398, "DesignEditors.pas" + 5) +
[20ABA961]{designide120.bpl} DesignEditors.TPropertyEditor.Edit (Line 668, "DesignEditors.pas" + 11) +
[207ABC62]{coreide120.bpl} PropInsp.TPropertyInspector.PropListEditDblClick (Line 883, "PropInsp.pas" + 20) +
[20BA7451]{vclide120.bpl} IDEInspListBox.TInspListBox.DoEditDblClick (Line 976, "IDEInspListBox.pas" + 2) + $A
[20BA8C92]{vclide120.bpl} IDEInspListBox.TInspListBox.EditDblClick (Line 1546, "IDEInspListBox.pas" + 0) +
[501C5BE1]{vcl120.bpl } Controls.TControl.DblClick (Line 6763, "Controls.pas" + 1) +
[501C5D44]{vcl120.bpl } Controls.TControl.WMLButtonDblClk (Line 6806, "Controls.pas" + 4) + $C
[501C565A]{vcl120.bpl } Controls.TControl.WndProc (Line 6642, "Controls.pas" + 91) +
[501C9640]{vcl120.bpl } Controls.TWinControl.IsControlMouseMsg (Line 9129, "Controls.pas" + 9) +
[501C9CE7]{vcl120.bpl } Controls.TWinControl.WndProc (Line 9336, "Controls.pas" + 136) +
[20BA65F3]{vclide120.bpl} IDEInspListBox.TPropInspEdit.WndProc (Line 439, "IDEInspListBox.pas" + 7) +
[501C9400]{vcl120.bpl } Controls.TWinControl.MainWndProc (Line 9065, "Controls.pas" + 3) +
[500591DC]{rtl120.bpl } Classes.StdWndProc (Line 12703, "Classes.pas" + 8) +
Code:
select a.* from HD_Timeseries_Values a where a.TS_ID=:TSID

[501EFC55]{vcl120.bpl } Forms.TApplication.StopHintTimer (Line 10390, "Forms.pas" + 3) +
[501EEABD]{vcl120.bpl } Forms.TApplication.ProcessMessage (Line 9660, "Forms.pas" + 30) +
[501EEB02]{vcl120.bpl } Forms.TApplication.HandleMessage (Line 9690, "Forms.pas" + 1) +
[501EEE2D]{vcl120.bpl } Forms.TApplication.Run (Line 9827, "Forms.pas" + 26) +
[004259E6]{bds.exe } bds.bds (Line 198, "" + 8) + $FFFB
[/code]

The SQL Statement in the dataset is
___SNIPPET___

When I change it to
___SNIPPET___
all works fine but now I can not insert or append records. :(
It looks like a problem with the rowid.
It is not an Oracle instance problem. The error also occurs on other databases.
What can I do to get the program run?
 
Can you isolate the dataset in a demo project and send it to me so that I can reproduce it? Please also include the creation DDL for the database object(s) involved.
 
Hi. I have same problem on some datasets:

Delphi 2010, DOA 4.1.2.0, Oracle 10.2. Some fields in database declared as NVARCHAR2.

The SQL Statement in the TOracleDataSet is:

SQL:
SELECT g.*, g.ROWID
  FROM ware.gp2compl_spec g
 WHERE condid = :CONDID

ROWID value is
*BAEALFIDwgwzA8ICKgTDC1lW/g
vsize(g.rowid) = 20

Error message and situation was described by ThomasW69.

In Delphi 2005 this TOracleDataSet works fine.
 
Last edited:
Hi Marco,
I seem to have the same problem.
D2010 DOA 4.1.2
Closing and reopening a TOracleDataset causes an invalid pointer operation.
In this case the TOracleDataset contains a pl/sql procedure call that returns a cursor.
There are static fields defined: TFloatField, TDateTimeField and one TWideStringField
With Fast4MM i see something like:

This block was allocated by thread 0xD20, and the stack trace (return addresses) at the time was:
404A96 [System.pas][System][@GetMem][2979]
5C379C [OracleData][TOracleDataSet.AllocRecordBuffer]
597413 [DB.pas][DB][TDataSet.SetBufListSize][12243]
5975A2 [DB.pas][DB][TDataSet.SetBufferCount][12300]
5956AD [DB.pas][DB][TDataSet.DoInternalOpen][11330]
595757 [DB.pas][DB][TDataSet.OpenCursor][11357]
595613 [DB.pas][DB][TDataSet.SetActive][11310]
59545A [DB.pas][DB][TDataSet.Open][11266]

thanks for any help!
Nicola
 
i've just noticed that there is a 4.1.2.2 version, while I have the
4.1.2.0.
Would it be a good idea to install it ?
 
I don't think 4.1.2.2 will affect the problem.

Can you create a little demo project to reproduce this?
 
Back
Top