Icon View Thread

The following is the text of the current message along with any replies.
Messages 1 to 10 of 30 total
Thread Corrupt Temporary Table
Fri, Dec 4 2015 9:58 AMPermanent Link

M Eric Hubert

Avatar

Hi,
I use temporary table in local mode (version 2.20 on Delphi 7).
On a table update the post return Error #601 'the index is missing a request key'
This index is composed of one integer field. The table is composed of some string and integer fields ans some others index.
The table is created in memory at the beginning of the program.
All insert work but some edit return #601.
I have tested with temporary table on disk and i have the same error.
I reproduce this problem on different machine with the same data.
But with others data, all work.

Any idea ?
Fri, Dec 4 2015 10:34 AMPermanent Link

Roy Lambert

NLH Associates

Team Elevate Team Elevate

Eric

>I use temporary table in local mode (version 2.20 on Delphi 7).
>On a table update the post return Error #601 'the index is missing a request key'
>This index is composed of one integer field. The table is composed of some string and integer fields ans some others index.
>The table is created in memory at the beginning of the program.
>All insert work but some edit return #601.
>I have tested with temporary table on disk and i have the same error.
>I reproduce this problem on different machine with the same data.
>But with others data, all work.

Looking at the manual 601 is

The table <TableName> is corrupt (<ErrorMessage>)This error is raised when ElevateDB encounters an issue while reading, writing, or validating a table. If this error occurs during normal operation of ElevateDB,  please contact Elevate Software for further instructions on how to correct the issue. The specific error message is indicated within the parentheses.

Since you're using a freshly created table and it doesn't occur with someone else's data but does occur on different PCs I would suspect the data you are trying to insert.

You haven't said if you're using SQL or navigational methods to insert the data nor if its using f/s or c/s. But which ever way you're doing it you need to trap when the error occurs and then examine the data.

Roy Lambert
Fri, Dec 4 2015 12:48 PMPermanent Link

Tim Young [Elevate Software]

Elevate Software, Inc.

Avatar

Email timyoung@elevatesoft.com

Eric,

<< I reproduce this problem on different machine with the same data.  But with others data, all work. >>

I'm not quite sure what you're saying here.  Can you reproduce the problem on more than one machine, or does it only happen on one particular machine ?  If you have code that reproduces the problem, please send it to me and I'll take a look.

Also, when you say that you're creating the temporary table in memory, does that mean you are are using:

CREATE TEMPORARY TABLE xxxx

with an in-memory database ?

Tim Young
Elevate Software
www.elevatesoft.com
Mon, Dec 14 2015 4:09 AMPermanent Link

M Eric Hubert

Avatar

Hi, sorry for the delay. I was sick.
I try to isolate the problem. I suspect also the data.
At the beginning, the data is in EDB Table (not temporary). This table work well.
The temporary table is local (not C/S) Memory or not memory, the error is the same.
I insert data from the EDB Table to EDB Temporary Table with Table.Insert and Table.post.
This part work without error.
Then in the code, i made Table.Edit and Table.Post.
Always, in the same moment, with the same data, i have this error in the post.
In the Edit, i change the value of a integer column in the index.
If i change the datas : no error.
Mon, Dec 14 2015 5:38 AMPermanent Link

M Eric Hubert

Avatar

I have new information.
I check the data. All Fields containts null or '0'..'9' or ' ' or 'A'..'Z' characters.
The structure of the temporary table is :
CREATE TEMPORARY TABLE "TMP328504715"
(
"NO_UNIQUE" INTEGER,
"ORDRE" INTEGER,
"HUB" VARCHAR(1) COLLATE "ANSI_CI",
"PIC" VARCHAR(3) COLLATE "ANSI_CI",
"PTR" VARCHAR(4) COLLATE "ANSI_CI",
"PDC" VARCHAR(4) COLLATE "ANSI_CI",
"CODE_POSTAL" VARCHAR(5) COLLATE "ANSI_CI",
"COMMUNE" VARCHAR(32) COLLATE "ANSI_CI",
"PTR_DATA" INTEGER,
"POIDS_RTG" INTEGER,
"VALIDER" BOOLEAN,
"MINS_POIDS" INTEGER,
"MAXS_POIDS" INTEGER,
"MINL_POIDS" INTEGER,
"MAXL_POIDS" INTEGER,
"MINL_EXE" INTEGER,
"NO_ETQ" INTEGER,
"NO_LIASSE" INTEGER,
"LIASSE" VARCHAR(1) COLLATE "ANSI_CI",
"CODE_PRESENTATION" VARCHAR(2) COLLATE "ANSI_CI",
"NIVEAU_PREPARATION" INTEGER,
CONSTRAINT "PK" PRIMARY KEY("NO_UNIQUE")
)
;
CREATE INDEX "I_NO_ETQ" ON "TMP328504715" ("NO_ETQ" COLLATE "ANSI_CI" ) ;
CREATE INDEX "I_LIASSE" ON "TMP328504715" ("ORDRE" COLLATE "ANSI_CI" ,"HUB","PIC","PTR","PDC","CODE_POSTAL","COMMUNE","PTR_DATA") ;

In the Insert Part, if i write null or a constant in the CODE_POSTAL field, there is no error.
With no change, i have a problem with I_NO_ETQ
Mon, Dec 14 2015 6:03 AMPermanent Link

Roy Lambert

NLH Associates

Team Elevate Team Elevate

Eric


Can you post the insert statements that give rise to the problem please so that I can try it here

Roy Lambert
Mon, Dec 14 2015 8:07 AMPermanent Link

M Eric Hubert

Avatar

If i replace EDB by kbmMemTable for this temporary table. All work. (i have check all the results of the program)

The original code for the insert is:
   Try

     TableBuffer.Insert;
     TableBufferORDRE.Assign (TableRTGDESTINEOORDRE);
     TableBufferHUB.Assign (TableRTGDESTINEOHUB); //
     TableBufferPIC.Assign (TableRTGDESTINEOPIC); //
     TableBufferPTR.Assign (TableRTGDESTINEOPTR); //
     TableBufferPDC.Assign (TableRTGDESTINEOPDC); //

     TableBufferCODE_POSTAL.Assign (TableRTGDESTINEOCODE_POSTAL);

     TableBufferCOMMUNE.Assign (TableRTGDESTINEOCOMMUNE);
     TableBufferPOIDS_RTG.Assign (TableRTGDESTINEOPOIDS_RTG);
     TableBufferNO_UNIQUE.Assign (TableRTGDESTINEONO_UNIQUE);
     TableBufferPTR_DATA.Assign (TableRTGDESTINEOPTR_DATA);
     TableBufferVALIDER.Value := False;
     TableBuffer.Post;
   Except
     On E: Exception do
       Raise Exception.Create ('TDataModuleDESTINEO.InsererBuffer' + Crlf + E.Message);
   End;

The original code for the edit is (the error is on the post)
                                   Try
                                     TableBuffer.Edit;
                                     TableBufferNO_ETQ.Value := NoEtqSession;
                                     TableBufferCODE_PRESENTATION.value := CodePresentation;
                                     TableBufferNIVEAU_PREPARATION.value := NiveauPreparation;
                                     TableBufferNO_LIASSE.value := NoLiasseSession;
                                     if Not SansLiasseLot then
                                       begin
                                         TableBufferLIASSE.Value := Marquage;
                                       End;
                                     TableBufferMINS_POIDS.Value := MINS_POIDS;
                                     TableBufferMAXS_POIDS.Value := MAXS_POIDS;
                                     TableBufferMINL_POIDS.Value := MINL_POIDS;
                                     TableBufferMAXL_POIDS.Value := MAXL_POIDS;
                                     TableBufferMINL_EXE.Value := MINL_EXE;
                                     TableBufferValider.Value := True;
                                     TableBuffer.Post;
                                   Except
                                     On E: Exception do
                                       Raise Exception.Create ('TDataModuleDESTINEO....GererLiasse.Pt2' + Crlf + E.Message);
                                   End;

In the insert, if i change the line :
TableBufferCODE_POSTAL.Assign (TableRTGDESTINEOCODE_POSTAL);
By
//TableBufferCODE_POSTAL.Assign (TableRTGDESTINEOCODE_POSTAL);
Or
TableBufferCODE_POSTAL.Value := '92350'
There is no error
Mon, Dec 14 2015 8:43 AMPermanent Link

Roy Lambert

NLH Associates

Team Elevate Team Elevate

Eric

You've confused me a bit here. You get an error on two different tables, one on editing, one on inserting, and involving different columns. Is that right?

I think it would be useful, for me, and probably Tim, if you could put together a small project with data showing the problem and post it to the binaries.

Roy Lambert
Mon, Dec 14 2015 9:33 AMPermanent Link

M Eric Hubert

Avatar

No, TableBuffer is the same Temporary Table.
At the beggining of the program, i insert some records. This part have no error.
In the run of the program, i make some edit on this table. This part have the error.
But if i change the value on the insert for the CODE_POSTAL field, the edit have no error (it's strange).
The error is on the index I_NO_ETQ.
I don't understand why  the CODE_POSTAL value create or not create a table corruption on the index NO_ETQ
The CODE_POSTAL field contains always 5 numerics characters (0 to 9) (It's a french zip code). I have check all the datas.
I have do another test : i add +1 on the value of CODE_POSTAL field : there is no error.
Mon, Dec 14 2015 10:31 AMPermanent Link

Roy Lambert

NLH Associates

Team Elevate Team Elevate

Eric

I have no idea if I can help but I need something to work with. If I can't help Tim should be able to but the same will apply to him - he'll need something to work with.

What you're posting makes no sense. Altering a column should not have any impact on an index that its not part of. If it was affecting  I_LIASSE then at least its part of that index.

Please post a small demo to the binaries.



Roy Lambert
Page 1 of 3Next Page »
Jump to Page:  1 2 3
Image