Question
Ruiyan Yu · Feb 9

ERROR #5540: SQLCODE: -104 Message: Field

Hi,

Management Portal SQL Interface

ERROR #5540: SQLCODE: -104 Message: Field 'QT.Fehlermeldung.parameter' (value '<params wert=\"\" feldName=\"Modul.name:...') failed validation

I've checked the syntax with some public tools with adjusted Tablename "Fehlermeldung" -> `Fehlermeldung`. It seems to be valid, but cache does not accept it.

INSERT INTO "Fehlermeldung" VALUES (1001021,'qsDataFieldOutOfRange','10','Der Wert ''<wert>'' des Datenfeldes <feldName> \"<feldBezeichnung>\" ist <artDerAbweichung> als <feldBound>.','<params wert=\"\" feldName=\"Modul.name:Bogen.name:Feld.name\" feldBezeichnung=\"Feld.bezeichnung\"  artDerAbweichung=\"Ein Wert aus [größer, kleiner]\" feldBound=\"Minimal- oder Maximalwert des Feldes je nach Wert in artDerAbweichung\" />','','Leistungserbringer','','','Leistungserbringer','Als Template-Meldung kann diese auch auf modifizierte Daten der DAS zutreffen.','')

Best regards

RY

 
Spoiler
Product version: Caché 2018.1
$ZV: Cache for Windows (x86-64) 2018.1.4 (Build 505_1U) Thu May 28 2020 10:01:40 EDT
0
0 473
Discussion (9)2
Log in or sign up to continue

Can you show the class definition ? 
If you use standard string properties, it could be longer than the default maximum length (50).

Are you shure that you match the column list?

An INSERT without a column list is not very stable about changes.

I crated a table and use your data:

CREATE TABLE Fehlermeldung (
    Field01 VARCHAR(32000),
    Field02 VARCHAR(32000),
    Field03 VARCHAR(32000),
    Field04 VARCHAR(32000),
    Field05 VARCHAR(32000),
    Field06 VARCHAR(32000),
    Field07 VARCHAR(32000),
    Field08 VARCHAR(32000),
    Field09 VARCHAR(32000),
    Field10 VARCHAR(32000),
    Field11 VARCHAR(32000),
    Field12 VARCHAR(32000)
)


Use the data you provided:

INSERT INTO "Fehlermeldung" VALUES (
1001021,
'qsDataFieldOutOfRange',
'10',
'Der Wert ''<wert>'' des Datenfeldes <feldName> \"<feldBezeichnung>\" ist <artDerAbweichung> als <feldBound>.',
'<params wert=\"\" feldName=\"Modul.name:Bogen.name:Feld.name\" feldBezeichnung=\"Feld.bezeichnung\"  artDerAbweichung=\"Ein Wert aus [größer, kleiner]\" feldBound=\"Minimal- oder Maximalwert des Feldes je nach Wert in artDerAbweichung\" />',
'',
'Leistungserbringer',
'',
'',
'Leistungserbringer',
'Als Template-Meldung kann diese auch auf modifizierte Daten der DAS zutreffen.',
'')


And the write is ok.

The class structure created:

 

/// 
Class User.Fehlermeldung Extends %Persistent [ ClassType = persistent, DdlAllowed, Final, Owner = {desenv}, ProcedureBlock, SqlRowIdPrivate, SqlTableName = Fehlermeldung ]
{

Property Field01 As %Library.String(MAXLEN = 32000) [ SqlColumnNumber = 2 ];
Property Field02 As %Library.String(MAXLEN = 32000) [ SqlColumnNumber = 3 ];
Property Field03 As %Library.String(MAXLEN = 32000) [ SqlColumnNumber = 4 ];
Property Field04 As %Library.String(MAXLEN = 32000) [ SqlColumnNumber = 5 ];
Property Field05 As %Library.String(MAXLEN = 32000) [ SqlColumnNumber = 6 ];
Property Field06 As %Library.String(MAXLEN = 32000) [ SqlColumnNumber = 7 ];
Property Field07 As %Library.String(MAXLEN = 32000) [ SqlColumnNumber = 8 ];
Property Field08 As %Library.String(MAXLEN = 32000) [ SqlColumnNumber = 9 ];
Property Field09 As %Library.String(MAXLEN = 32000) [ SqlColumnNumber = 10 ];
Property Field10 As %Library.String(MAXLEN = 32000) [ SqlColumnNumber = 11 ];
Property Field11 As %Library.String(MAXLEN = 32000) [ SqlColumnNumber = 12 ];
Property Field12 As %Library.String(MAXLEN = 32000) [ SqlColumnNumber = 13 ];

/// Bitmap Extent Index auto-generated by DDL CREATE TABLE statement.  Do not edit the SqlName of this index.
Index DDLBEIndex [ Extent, SqlName = "%%DDLBEIndex", Type = bitmap ];

}

Check the definition of the fifth property if there any unusual restriction.
Or, if you could, post the class definition here.
 

Hi,

The error occurs when i try to import a sql dump file with

    d $SYSTEM.SQL.SetDefaultSchema("QT",$SYSTEM.SQL.DefaultSchema(),1)
    d $SYSTEM.SQL.DDLImport("MySQL","VM","c:\temp\meh.sql","C:\temp\all.log",,,";")

You can see the summary in my previous post under spoiler. It is the only error.

After that I tried to run the query in the sql interface and there is the same error with a little more detail.

A working query for comparison. I can not see much difference...

INSERT INTO "Fehlermeldung" VALUES (1001020,'qsDataFieldCode.isInvalid','10','Der Wert ''<wert>'' des Datenfeldes <feldName> \"<feldBezeichnung>\" ist kein zulässiger Code des Schlüssels <schluesselName> (<schluesselBezeichnung>).','<params wert=\"\" feldName=\"Modul.name:Bogen.name:Feld.name\" feldBezeichnung=\"Feld.bezeichnung\" schluesselName=\"Schluessel.name\" schluesselBezeichnung=\"Schluessel.bezeichnung\" />','','Leistungserbringer','','','Leistungserbringer','Als Template-Meldung kann diese auch auf modifizierte Daten der DAS zutreffen.','')
Class QT.Fehlermeldung Extends %Persistent [ ClassType = persistent, DdlAllowed, Final, Owner = {VM}, ProcedureBlock, SqlRowIdPrivate, SqlTableName = Fehlermeldung ]
{

Property idFehlermeldung As %Library.Integer(MAXVAL = 2147483647, MINVAL = -2147483648) [ SqlColumnNumber = 2 ];

Property name As %Library.String(MAXLEN = 58) [ SqlColumnNumber = 3 ];

Property fkFehlerart As %Library.String(MAXLEN = 2) [ SqlColumnNumber = 4 ];

Property meldung As %Stream.GlobalCharacter [ SqlColumnNumber = 5 ];

Property parameter As %Library.String(MAXLEN = 229) [ SqlColumnNumber = 6 ];

Property hilfetext As %Stream.GlobalCharacter [ SqlColumnNumber = 7 ];

Property verursacherWennDAS As %Library.String(MAXLEN = 18) [ SqlColumnNumber = 8, SqlFieldName = verursacher_Wenn_DAS ];

Property verursacherWennVST As %Library.String(MAXLEN = 18) [ SqlColumnNumber = 9, SqlFieldName = verursacher_Wenn_VST ];

Property verursacherWennBAS As %Library.String(MAXLEN = 37) [ SqlColumnNumber = 10, SqlFieldName = verursacher_Wenn_BAS ];

Property verursacherWennVPB As %Library.String(MAXLEN = 18) [ SqlColumnNumber = 11, SqlFieldName = verursacher_Wenn_VPB ];

Property verursacherErläuterung As %Library.String(MAXLEN = 193) [ SqlColumnNumber = 12, SqlFieldName = verursacher_Erläuterung ];

Property verursacherWennBASindirekt As %Library.String(MAXLEN = 18) [ SqlColumnNumber = 13, SqlFieldName = verursacher_Wenn_BAS_indirekt ];

/// Bitmap Extent Index auto-generated by DDL CREATE TABLE statement.  Do not edit the SqlName of this index.
Index DDLBEIndex [ Extent, SqlName = "%%DDLBEIndex", Type = bitmap ];

Storage Default
{
idFehlermeldungnamefkFehlerartmeldungparameterhilfetextverursacherWennDASverursacherWennVSTverursacherWennBASverursacherWennVPBverursacherErläuterungverursacherWennBASindirekt^QT.FehlermeldungDFehlermeldungDefaultDatasequence^QT.FehlermeldungD^QT.FehlermeldungI^QT.FehlermeldungS%Library.CacheStorage
}

}

Best regards

RY

The rejected  insert has 239 chars in the fifth column. The working insert has 186 chars.

So check your table defintion. How are the columns defined?

Hi, That's strange. It's auto-generated by mysqldump

CREATE TABLE "Fehlermeldung" (
  "idFehlermeldung" int(11) DEFAULT NULL,
  "name" varchar(58) DEFAULT NULL,
  "fkFehlerart" varchar(2) DEFAULT NULL,
  "meldung" text DEFAULT NULL,
  "parameter" varchar(229) DEFAULT NULL,
  "hilfetext" text DEFAULT NULL,
  "verursacher_Wenn_DAS" varchar(18) DEFAULT NULL,
  "verursacher_Wenn_VST" varchar(18) DEFAULT NULL,
  "verursacher_Wenn_BAS" varchar(37) DEFAULT NULL,
  "verursacher_Wenn_VPB" varchar(18) DEFAULT NULL,
  "verursacher_Erläuterung" varchar(193) DEFAULT NULL,
  "verursacher_Wenn_BAS_indirekt" varchar(18) DEFAULT NULL
);

The column parameter has MAXLEN 229:

parameter As %Library.String(MAXLEN = 229) [ SqlColumnNumber = 6 ];

that is why the insert fails

Vielen Dank Herr Schneider laugh. Wieder was gelernt :)

Ich werde es manuell fixen.

Freut mich wenn ich helfen konnte. Gerne mit DU ;-)

Andreas