Newsgroup: it.comp.lang.visual-basic
Titolo: Errore di conversione dei dati, come lo aggiro?

Dunque, in un form ho alcune TextBox associate a un controllo Data,
per la gestione di un database mdb. Quelle che sono associate a campi
database in formato numerico (per la percisione in formato Intero), mi
stanno ponendo un problema che non sono riuscito a risolvere; in
pratica, se rimangono vuote per il fatto di non essere state mai
riempite, tutto funziona regolarmente, se invece vengono del tutto
cancellati i dati in precedenza inseriti (per esempio, se sono stati
inseriti per sbaglio), al primo evento Validate si genera un "Errore
di conversione dei dati" (senza numero, ma ho poi scoperto che è il
n.3421). C'è qualcuno che può suggerirmi come fare ad evitare che ciò
accada?
Il programma è stato realizzato con il buon vecchio VB4 (32bit) e gira
sotto Win95.
Grazie mille!
---------------
Stefano F.

Questo è quello che dice MICROSOFT :
PRB: "Data Type Conversion Error" When Using a Data Control
----------------------------------------------------------------------------
----
The information in this article applies to:
Microsoft Visual Basic Professional and Enterprise Editions for Windows,
versions 5.0, 6.0
Microsoft Visual Basic Standard, Professional, and Enterprise Editions,
32-bit only, for Windows, version 4.0
Microsoft Visual Studio 97
----------------------------------------------------------------------------
----
SYMPTOMS
Deleting the data from a text box bound to certain data types, such as an
integer or date, causes Error 3421:
"Data Type Conversion Error."
NOTE: If you are using a dbGrid, it's Error Method will produce Error 16389.
CAUSE
This is designed behavior of DAO. The data control is sending a NULL string
to DAO and DAO attempts to coerce it to a number and fails. This is not a
problem with the Data Control: The same behavior can be observed without the
use of a Data Control, using only code. For example:
   Set db = OpenDatabase("nwind.mdb", False, False)
   Set rs = db.OpenRecordset("select shipvia from orders", dbOpenDynaset)
   rs.Edit
   rs(0) = ""
RESOLUTION
Use the following code in the Data Controls Validate method to allow the
edit to occur as expected by user:
   Private Sub Data1_Validate(Action As Integer, Save As Integer)
      If Text1.DataChanged Then
         Text1.DataChanged = False 'So this data is not saved
         Data1.UpdateRecord  ' This saves the data that
                             ' may have changed in the other controls
         ' Now clear the numeric field
         Data1.Recordset.Edit
         Data1.Recordset![Year Born] = Null
         Data1.Recordset.Update
     End If
   End Sub
STATUS
This behavior is by design.
MORE INFORMATION
Steps to Reproduce Behavior
Place a data control and a textbox on a form.
Bind the textbox to an integer column of a table.
Delete the data from the text box.
Move off the record. Note that you get the "data type conversion error in
the error event of the data control. This happens with Jet 3.5, 3.0, or 2.5,
but does not happen in 16-bit Visual Basic.
Additional query words: kbVBp500 kbVBp600 kbVBp kbdse kbDSupport kbVBp400
kbVS97
Keywords          :
Version           :
Platform          : NT WINDOWS
Issue type        : kbprb
Last Reviewed: May 28, 1999
© 1999 Microsoft Corporation. All rights reserved. Terms of Use.
Article ID: Q172101
Last Reviewed:
May 28, 1999
Provided by Microsoft Product Support Services.
Ciao
Alfredo
----------------------------------------------------------------------------
----
      Did the information in this article help answer your question?
Yes
No
Did not apply
Please provide additional comments about this information. If you require a
response or technical support, please click Contact Us.
(255 character max)