DA Schema randomly changes field types from WideMemo to Memo

It looks like in the latest version of DA 8 and the previous one (7), the Schema modeler changes WideMemo field data type to Memo thus creating error messages such as:


Debugger Exception Notification

Project xxx.exe raised exception class EDAException with message 'Format of the data in the stream doesn’t match the destination table format.

Data type mismatch for column ‘projects.comment’: datWideMemo expected but datMemo found in stream.
’.

How to reproduce:
When you change a field from Memo to WideMemo, then close the schema modeler: the modification is taken into account and the app is working fine. But when you re-open the Schema modeler, all WideMemo revert to Memo and if you forget to update them, when you close the Schema modeler next time, the Memo type is saved and used by the app.

Using Delphi XE3 with DA 8.0.81.1131

FWIW, I have several nvarchar(max) fields in my database which come through to the schema correctly as WideMemo fields and don’t seem to revert back to Memo fields.

Might be handy to specify what database and driver you’re using and the field type in question for the RO guys to help out with :slight_smile:

My schema is already defined with WideMemo but when I open the schema editor and close it, it reverts back to Memo for all the WideMemo fields.
I’m using UniDac with SQLite but no connections are defined in the Schema editor as I create them by code.

Hello John,

First of all I’m sorry for inconvenience. I’m trying to reproduce your situation but so far with no success.
In any simple scenario with my test SQLite database and UniDac driver it allows me to manually change and save fields datatype from datMemo to datWideMemo and and vice versa without any problem.

Though during investigation I found one problem but for much more sophisticated scenario. For example if you had certain field with datatype as datBlob and set its blob subtype as Memo or OraClob, later when you switch its type to datWideString then value in BlobType remains (in spite of the blobType combo becomes disabled) and during saving that BlobType can force schema to change that field to datMemo.

I have certain doubts that you have the same scenario, though can you check your schema? What value has DataType property for your field that incorrectly saved?

Actually it could help me if you can send me your DASchema to allow me to try to reproduce that at my side.
You can send it directly to support@

Thanks!

@alexk I’ve just sent a sample with clear instructions on how to reproduce to support@

Regards,

John.

Hi John,

yeah I received your schema, though there was no instruction to reproduce.
I’ve played with the schema a bit and seems I could see your problem at the “hndmeta” table.
What I did is tried to change dataType to datWideString for the field “value” but it always remains as datMemo.
As it turned out this is the same problem I’ve suggested before.
For some reasons - this field has BlobType property set to Memo and this forces the DA consider this field as the Memo field.
I already registered it as the bug #68594 and we will fix it for next release.

As the temporary workaround you need to set BlobType for such field to “Unknown”.
But BlobType combobox is enabled only when field type is Blob.
So you need to do following:

  1. change field DataType to Blob
  2. change field BlobType to Unknown
  3. change field DataType to WideString and set proper size for it.
  4. save.

As I can see, you probably will need to perform that operation at following fields that have BlobType as Blob:

  • hndmeta.value
  • libraryitemsmeta.value
  • topicsmeta.value
  • projects.comment
  • projectsmeta.value
  • topics.headertext
  • topics.footertext
  • keywordsmeta.value

Hope it helps
And thank You for your report!

Thank you @alexk that fixes the problem.

FWIW instructions were in the e-mail body, perhaps “Marvin, your faithful if slightly depressed RemObjects Software Support Robot” cut that part when it received it :slight_smile: It might be worth checking.

Anyways, here they are for future reference:

  • Double click on the schema to open the schema editor
  • Select Tables / HndMeta / Fields
  • Change the field named “value” from “Memo” to “WideMemo”
  • Save and close the schema editor
  • Re-open: field type changes back from WideMemo to Memo
    Using Delphi XE3 with RO/DA 8.0.81.1131

I appreciate your help and I’m glad to see that RO/DA support is far better than what I used to experience for years.

yes, I’ll pass this to guy who is in charge of our mail bot. Thanks again! :wink: