Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-devel / 2008-01

"Invalid field size : 8"

1 message · 1 person ·

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Bogusław Brandys

Hello,

I'm trying to work with InstantObjects using Free Pascal but I encountered strange exception which is generated when I'm trying to retrieve persistent class from Firebird 2.0 database.

Below is and extended output of stack trace (I've also turned on dsdebug to watch all possible informations plus I;ve added a few lines to fields.inc).

As you can see problem is with setting TField.Size to 8 for ftInteger field , but I've also modified code to force Size of ftInteger to 4 and error still persisted.

I've found that exception is generated inside this method of fields.inc:

class procedure TField.CheckTypeSize(AValue: Longint);
begin
   If (AValue0) and Not IsBlob Then
     DatabaseErrorFmt(SInvalidFieldSize,[AValue]);
end;

questions:

Is that a bug inside fields.inc or just a calling layer must prepare TFieldDef to avoid this exception ? Is that a known problem ?

Regards
Boguslaw Brandys

D:\projekty\instantobjects\svn_io\Demos\test1>flamenco TLCLComponent.NewInstance WARNING: missing FWidgetSetClass TScreen Before: INSERT INTO Contact (Address , CategoryClass, CategoryId , City , Name ,
Phones , Class , Id , UpdateCount ) VALUES (:Address , :CategoryClass, :Categor
yId , :City , :Name , :Phones , :Class , :Id , :UpdateCount ) Class: ftString = TContact
Id: ftString = 8E41F46CE1991E459939352E950F7661
UpdateCount: ftInteger = 1
Address: ftMemo = <TAddress><City></City></TAddress> CategoryClass: ftString = TCategory
CategoryId: ftString = CAT000
City: ftString =
Name: ftString = Testowy1
Phones: ftMemo =
TInstantSQLResolver.InternalRetrieveMap Params.Count=0 TInstantSQLResolver.InternalRetrieveMap AObject.ClassName=TContact Before: SELECT Address , CategoryClass, CategoryId , City , Name , Phones , Upda
teCount FROM Contact WHERE Class = :Class AND Id = :Id Class: ftString = TContact
Id: ftString = 8E41F46CE1991E459939352E950F7661
TFieldDef.Create : ADDRESS(1)
TFieldDef.Create : CATEGORYCLASS(2)
TFieldDef.Create : CATEGORYID(3)
TFieldDef.Create : CITY(4)
TFieldDef.Create : NAME(5)
TFieldDef.Create : PHONES(6)
TFieldDef.Create : UPDATECOUNT(7)
Creating fields
Count : 7
Def 0 : ADDRESS(1)
Def 1 : CATEGORYCLASS(2)
Def 2 : CATEGORYID(3)
Def 3 : CITY(4)
Def 4 : NAME(5)
Def 5 : PHONES(6)
Def 6 : UPDATECOUNT(7)
About to create fieldADDRESS
Creating field ADDRESS
1
2
3
4
5
6
7
8
FieldNo= 1
Field.Size= 8
Attempt to SetFieldType
After SetFieldType
TFieldDef.CReateField : Trying to set dataset
TFieldDef.CReateField : Result Fieldno : 1 Self : 1 Setting dataset
About to create fieldCATEGORYCLASS
Creating field CATEGORYCLASS
1
2
3
4
5
6
7
8
FieldNo= 2
Field.Size= 32
Attempt to SetFieldType
After SetFieldType
TFieldDef.CReateField : Trying to set dataset
TFieldDef.CReateField : Result Fieldno : 2 Self : 2 Setting dataset
About to create fieldCATEGORYID
Creating field CATEGORYID
1
2
3
4
5
6
7
8
FieldNo= 3
Field.Size= 32
Attempt to SetFieldType
After SetFieldType
TFieldDef.CReateField : Trying to set dataset
TFieldDef.CReateField : Result Fieldno : 3 Self : 3 Setting dataset
About to create fieldCITY
Creating field CITY
1
2
3
4
5
6
7
8
FieldNo= 4
Field.Size= 30
Attempt to SetFieldType
After SetFieldType
TFieldDef.CReateField : Trying to set dataset
TFieldDef.CReateField : Result Fieldno : 4 Self : 4 Setting dataset
About to create fieldNAME
Creating field NAME
1
2
3
4
5
6
7
8
FieldNo= 5
Field.Size= 50
Attempt to SetFieldType
After SetFieldType
TFieldDef.CReateField : Trying to set dataset
TFieldDef.CReateField : Result Fieldno : 5 Self : 5 Setting dataset
About to create fieldPHONES
Creating field PHONES
1
2
3
4
5
6
7
8
FieldNo= 6
Field.Size= 8
Attempt to SetFieldType
After SetFieldType
TFieldDef.CReateField : Trying to set dataset
TFieldDef.CReateField : Result Fieldno : 6 Self : 6 Setting dataset
About to create fieldUPDATECOUNT
Creating field UPDATECOUNT
1
2
3
SetBufListSize: -1
Freeing buffers :1
SetBufListSize: Final FBufferCount=0
TApplication.HandleException Error retrieving object TContact('8E41F46CE1991E459
939352E950F7661'): "Invalid field size : 8"
Stack trace:
$0050DBB1 TINSTANTOBJECTSTORE__RETRIEVEOBJECT, line 7413 of D:/projekty/inst
antobjects/svn_io/Source/Core/InstantPersistence.pas $0050BDC3 TINSTANTOBJECT__RETRIEVE, line 6614 of D:/projekty/instantobjects/
svn_io/Source/Core/InstantPersistence.pas
$0041C165 TMAIN__TEST, line 184 of mainunit.pas
$0041BA94 TMAIN__BUTTON2CLICK, line 58 of mainunit.pas $0047E394 TCONTROL__CLICK, line 2024 of ./include/control.inc $0048CEDF TBUTTONCONTROL__CLICK, line 57 of ./include/buttoncontrol.inc $0048D495 TCUSTOMBUTTON__CLICK, line 185 of ./include/buttons.inc $0048D931 TBUTTON__CLICK, line 326 of ./include/buttons.inc $0048D64A TCUSTOMBUTTON__WMDEFAULTCLICKED, line 240 of ./include/buttons.inc

$004099B2
$004759E2 TWINCONTROL__WNDPROC, line 4696 of ./include/wincontrol.inc $004EDA2B DELIVERMESSAGE, line 614 of win32proc.pp $004D7C90 WINDOWPROC, line 2310 of win32callback.inc $7E368734
$7E368816
$7E36B89B
$7E36B903

D:\projekty\instantobjects\svn_io\Demos\test1>

Reply by email