开发者

VB6 execution with database is different when stepping through vs running

I've come across a weird scenario with the following code in a vb6 app:

Private database As dao.Database
Set database = openDaoDatabase([some valid database l开发者_运维技巧ocation], False)

createDBField database, "Table", "FirstRow", dao.dbInteger, 0, "0"

Public Sub createDBField(targetDB As dao.Database, strTable As String, strField As String, dbType As dao.DataTypeEnum, Size As Integer, strDefValue As String)
   Dim td  As dao.TableDef
   Dim fld As dao.field

   Set td = targetDB.TableDefs(strTable)
   Set fld = td.CreateField(strField, dbType, 0)
   If dbType = dao.DataTypeEnum.dbText Or dbType = dao.DataTypeEnum.dbMemo Then fld.AllowZeroLength = True
   If strDefValue <> "" Then fld.DefaultValue = strDefValue
   td.Fields.Append fld
   Set td = Nothing
   Set fld = Nothing
End Sub

When I step through, everything works and the new field is added to the database. However, when I simply run the application, the database becomes corrupted due to 'inconsistency'. I added some error handling and now get the error: "Unrecognized database format: [path]". After searching the Microsoft database, I found a solution: http://support.microsoft.com/kb/238401. I'm using the Microsoft.Jet.OLEDB.4.0 provider, have SP6 installed and have a reference to the Microsoft DAO 3.6 Object Library, but it's still not working!

Any thoughts?

Update: td.Fields.Append fld is the culprit. After removing all silent error handling, I was able to catch an error: "Run-time error 3343 Unrecognized Database Format". For some reason, I can just step over it though.


I suspect your problem is happening because of the AllowZeroLength property. I suspect the field should be added to the fields collection and the AllowZeroLength property updated.

After

td.Fields.Append fld

put something like the following:

Set tdfField = tabledef.Fields(strField)
Set prp = tdfField.CreateProperty("AllowZeroLength", dbboolean, True)
tdfField.Properties.Append prp

Note the above is aircode and not tested.

That said, it doesn't make a lot of sense to me for a text or MEMO field's AllowZeroLength property to default to True. After all, the front end user can't really visually distinguish between the NULL value and a zero length string value.


I don't see a call to database.close that might be the cause. If your VB app terminates abruptly that might leave the DB in an inconsistent state.


Which line is the error occurring on? Usually when I run into VB errors like this they are timing related. Stepping through gives enough time for something to finish processing. Try adding some sleep commands before the statement that is causing the error.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜