metaldan Posted December 15, 2011 Posted December 15, 2011 HI I have to open all dwg in a directory, modify some block attribute ( like BOM..drawng number..) and make a saveas. Fist i make the code for a already opened dwg, modifiy it and saveas ( with mydwg.CloseAndSave(ligneF) ) All work greet, a soon i put it in a loop to open all dwg. autocad crash when i saveas the file. can you help me. I try to option , with readdwgfile, and Application.DocumentManager.Open . I have the same error on both way. ps 1, if i run only the open, and saveas line, i have the same error too. thanks' for your help this is my code [size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] fichiersTrouv = Directory.GetFiles(T_CIBLE.Text, [/size][size=2][color=#a31515][size=2][color=#a31515]"*.dwg"[/color][/size][/color][/size][size=2], SearchOption.AllDirectories)[/size] [size=2][color=#0000ff][size=2][color=#0000ff]For[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Each[/color][/size][/color][/size][size=2] ligneF [/size][size=2][color=#0000ff][size=2][color=#0000ff]In[/color][/size][/color][/size][size=2] fichiersTrouv [/size][size=2][color=#008000][size=2][color=#008000]' the list of file is correct[/color][/size] [/color][/size][size=2][color=#008000][size=2][color=#008000]'Application.DocumentManager.Open option[/color][/size] [/color][/size][size=2][color=#008000][size=2][color=#008000]'Dim mydwg As Document = Application.DocumentManager.Open(ligneF)[/color][/size] [/color][/size][size=2][color=#008000][size=2][color=#008000]' Dim myDWG As Document = Application.DocumentManager.MdiActiveDocument[/color][/size] [/color][/size][size=2][color=#008000][size=2][color=#008000]' myDB = myDWG.Database[/color][/size] [/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] myDB [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]New[/color][/size][/color][/size][size=2] Database([/size][size=2][color=#0000ff][size=2][color=#0000ff]False[/color][/size][/color][/size][size=2], [/size][size=2][color=#0000ff][size=2][color=#0000ff]True[/color][/size][/color][/size][size=2])[/size] [size=2]myDB.ReadDwgFile(ligneF, IO.FileShare.ReadWrite, [/size][size=2][color=#0000ff][size=2][color=#0000ff]True[/color][/size][/color][/size][size=2], [/size][size=2][color=#a31515][size=2][color=#a31515]""[/color][/size][/color][/size][size=2])[/size] [size=2][color=#008000][size=2][color=#008000]' this section have no error, it work alone[/color][/size] [/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Using[/color][/size][/color][/size][size=2] mytrans [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] Transaction = myDB.TransactionManager.StartTransaction[/size] [size=2][color=#0000ff][size=2][color=#0000ff]For[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Each[/color][/size][/color][/size][size=2] myBlockName [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]String[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]In[/color][/size][/color][/size][size=2] GetTopLevelBlocks(myDB)[/size] [size=2][color=#0000ff][size=2][color=#0000ff]For[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Each[/color][/size][/color][/size][size=2] BRefID [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] ObjectId [/size][size=2][color=#0000ff][size=2][color=#0000ff]In[/color][/size][/color][/size][size=2] GetBRefIDs(myDB, myBlockName)[/size] [size=2][color=#0000ff][size=2][color=#0000ff]If[/color][/size][/color][/size][size=2] myBlockName = [/size][size=2][color=#a31515][size=2][color=#a31515]"DANCART"[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Then[/color][/size] [/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] MYATTVALS [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]New[/color][/size][/color][/size][size=2] Dictionary([/size][size=2][color=#0000ff][size=2][color=#0000ff]Of[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]String[/color][/size][/color][/size][size=2], [/size][size=2][color=#0000ff][size=2][color=#0000ff]String[/color][/size][/color][/size][size=2])[/size] [size=2]MYATTVALS.Add([/size][size=2][color=#a31515][size=2][color=#a31515]"PROJET"[/color][/size][/color][/size][size=2], [/size][size=2][color=#a31515][size=2][color=#a31515]"A"[/color][/size][/color][/size][size=2])[/size] [size=2]MYATTVALS.Add([/size][size=2][color=#a31515][size=2][color=#a31515]"CLIENT1"[/color][/size][/color][/size][size=2], [/size][size=2][color=#a31515][size=2][color=#a31515]"B"[/color][/size][/color][/size][size=2])[/size] [size=2]MYATTVALS.Add([/size][size=2][color=#a31515][size=2][color=#a31515]"CLIENT2"[/color][/size][/color][/size][size=2], [/size][size=2][color=#a31515][size=2][color=#a31515]"C"[/color][/size][/color][/size][size=2])[/size] [size=2]MYATTVALS.Add([/size][size=2][color=#a31515][size=2][color=#a31515]"DESSINATEUR"[/color][/size][/color][/size][size=2], [/size][size=2][color=#a31515][size=2][color=#a31515]"D"[/color][/size][/color][/size][size=2])[/size] [size=2]MYATTVALS.Add([/size][size=2][color=#a31515][size=2][color=#a31515]"DATE"[/color][/size][/color][/size][size=2], [/size][size=2][color=#a31515][size=2][color=#a31515]"E"[/color][/size][/color][/size][size=2])[/size] [size=2]MYATTVALS.Add([/size][size=2][color=#a31515][size=2][color=#a31515]"DESSIN"[/color][/size][/color][/size][size=2], [/size][size=2][color=#a31515][size=2][color=#a31515]"F"[/color][/size][/color][/size][size=2])[/size] [size=2][color=#0000ff][size=2][color=#0000ff]Using[/color][/size][/color][/size][size=2] myTrans2 [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] Transaction = BRefID.Database.TransactionManager.StartTransaction[/size] [size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] myBRef [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] BlockReference = BRefID.GetObject(OpenMode.ForRead)[/size] [size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] myAttCollection [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] AttributeCollection = myBRef.AttributeCollection[/size] [size=2][color=#0000ff][size=2][color=#0000ff]For[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Each[/color][/size][/color][/size][size=2] myAttRefID [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] ObjectId [/size][size=2][color=#0000ff][size=2][color=#0000ff]In[/color][/size][/color][/size][size=2] myAttCollection[/size] [size=2][color=#0000ff][size=2][color=#0000ff]Dim[/color][/size][/color][/size][size=2] myAttRef [/size][size=2][color=#0000ff][size=2][color=#0000ff]As[/color][/size][/color][/size][size=2] AttributeReference = myAttRefID.GetObject(OpenMode.ForWrite)[/size] [size=2][color=#0000ff][size=2][color=#0000ff]If[/color][/size][/color][/size][size=2] MYATTVALS.ContainsKey(myAttRef.Tag) [/size][size=2][color=#0000ff][size=2][color=#0000ff]Then[/color][/size] [/color][/size][size=2]myAttRef.TextString = MYATTVALS(myAttRef.Tag)[/size] [size=2][color=#0000ff][size=2][color=#0000ff]End[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]If[/color][/size] [/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Next[/color][/size] [/color][/size][size=2]myTrans2.Commit()[/size] [size=2][color=#0000ff][size=2][color=#0000ff]End[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Using[/color][/size] [/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]End[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]If[/color][/size] [/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Next[/color][/size] [/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Next[/color][/size] [/color][/size][size=2]mytrans.Commit()[/size] [size=2][color=#0000ff][size=2][color=#0000ff]End[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Using[/color][/size][/color][/size] [size=2][color=#0000ff] [/color][/size][size=2]myDB.SaveAs(ligneF & [/size][size=2][color=#a31515][size=2][color=#a31515]"1.dwg"[/color][/size][/color][/size][size=2], DwgVersion.AC1004) [/size][size=2][color=#008000][size=2][color=#008000]' crash on this line[/color][/size] [/color][/size][size=2]myDB.Dispose()[/size] [size=2][color=#008000][size=2][color=#008000]' mydwg.CloseAndSave(ligneF) 'Application.DocumentManager.Open option crash [/color][/size] [/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Next[/color][/size] [/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]End[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]Sub[/color][/size] [/color][/size] Quote
fixo Posted December 15, 2011 Posted December 15, 2011 Use Try ... Catch statement to get descriptive error message Something like Try ...your code goes here Catch ex as AutoDesk.Autocad.Runtime.Exception ''/*or System.Exception*/ Application.ShowAlertDialog(ex.Message + vblf + ex.StackTrace Finally 'keep it blank yet End Try Next use namespace System.IO to get valid fullpath, probably you had missed a backslash in this line: Imports System.IO ................... myDB.SaveAs(Path.Combine(ligneF, "1.dwg"), DwgVersion.AC1004) Then (I don't know your current version) perhaps, you have to pass 3 arguments instead of two to this method: myDB.SaveAs(Path.Combine(ligneF, "1.dwg"), DwgVersion.AC1004,DataBase.SecurityParameters) Would be good to use Using ... End Using statement for myDB object Just on the quick glance Quote
metaldan Posted December 16, 2011 Author Posted December 16, 2011 THANKS' I use the TRY..CATCH and i found that i use the wrong dwgversion with the MYDB.SAVEAS command The sSAVEAS work well now I try the MYDB.SAVE() command but it don't work ??? the TRY CATCH give me a eFileINternalErr bizzard Quote
shirazbj Posted December 30, 2011 Posted December 30, 2011 see here http://208.74.205.69/t5/NET/Autocad-Database-Save/td-p/3196432 it says: Database.Save() is not implemented and always gives an error. btw: if ligneF="my.dwg" ligneF & "1.dwg" gives a file name like: my.dwg1.dwg and Path.Combine(ligneF, "1.dwg") gives a file name like: my.dwg\1.dwg I use; Left(ligneF, Len(ligneF) - 4) + "1.dwg" Quote
metaldan Posted December 31, 2011 Author Posted December 31, 2011 thank's for your help. I see somewhere that only the SAVEAS work, to keep the integrity of the database. SO, i saveas, delete the old file, rename the new file Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.