Hot News:

Unser Angebot:

  Foren auf CAD.de
  VBasic / vb.net / vbs / wsh
  AutoCAD/.Net: INTERNER FEHLER: !dbobji.cpp@8749: eNotOpenForWrite

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
Autor Thema:  AutoCAD/.Net: INTERNER FEHLER: !dbobji.cpp@8749: eNotOpenForWrite (2566 mal gelesen)
BillFrankShepard91
Mitglied
Student


Sehen Sie sich das Profil von BillFrankShepard91 an!   Senden Sie eine Private Message an BillFrankShepard91  Schreiben Sie einen Gästebucheintrag für BillFrankShepard91

Beiträge: 15
Registriert: 18.10.2013

Hardware:
Acer TimlineX 4830TG Notebook<P>Software:
AutoCad 2014 Studentenversion; Visual Studio Express 2012;

erstellt am: 18. Okt. 2013 14:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Liebe cad.de Gemeinde,

Ich bin noch relativ neu im Bereich CAD-Programmierung, deshalb hoffe ich, dass hier vieleicht jemand eine Lösung für mein Problem hat:

Ich muss im Rahmen einer Studienarbeit ein vb.net Programm für AutoCAD schreibe, welches mir ermöglicht einen Datensatz einzulesen und diesen dann zeichnet. Die Daten(viele Kreise  ) sind relativ einfach aufgebaut: x-Wert, y-Wert und Radius. Außerdem gibt es unterschiedliche Layer.
Die Daten werden aus einem DataSet mittels einer For schleife ausgelesen und dann gezeichnet.
Das glaubt auch alles wunderbar, solange ich die Layerinformation weglasse.

Füge ich zu den Kreisinformationen noch die Layerinformation, führt das zu einem Absturz von AutoCAD. Dabei wird der schon im Betreff genannte Fehler Code: "INTERNER FEHLER: !dbobji.cpp@8749: eNotOpenForWrite" ausgegeben.

Ich füge mal meinen Code an und vielleicht hat ja jemand eine Lösung für mein Problem...! Danke schön schon ein Mal fürs anschauen!! 

Code:

Option Strict On
Imports System.IO
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.Geometry
Imports System.Windows.Forms
Imports Autodesk.AutoCAD.Colors


Public Class Form2

    Public _dataPath As String = "data.xml"

    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        DataSet1.ReadXml(_dataPath)
    End Sub

    Public Sub Zeichnen()

        Dim y, x, r, z, layer As String
        Dim i As Integer
        z = "0"

        For i = 0 To DataSet1.DataTable1.Count - 1

            Dim acDoc As Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
            Dim acCurDb As Database = acDoc.Database
            Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()


                layer = DataSet1.DataTable1.Rows(i).Item("Layer").ToString


                ' Wenn ich diesen Teil weglasse, funktioniert alles ohne Probleme:
                ' Anfang Layerabschnitt

                Dim acLyrTbl As LayerTable
                acLyrTbl = CType(acTrans.GetObject(acCurDb.LayerTableId, OpenMode.ForWrite), LayerTable)

                If acLyrTbl.Has(layer) = False Then

                    Dim acLyrTblRec As LayerTableRecord = New LayerTableRecord()

                    acLyrTblRec.Name = layer
                    acLyrTblRec.Color = Color.FromColorIndex(ColorMethod.ByAci, 1)

                    acLyrTbl.UpgradeOpen()

                    acLyrTbl.Add(acLyrTblRec)
                    acTrans.AddNewlyCreatedDBObject(acLyrTblRec, True)

                End If

                ' Ende Layerabschnitt


                Dim acBlkTbl As BlockTable
                acBlkTbl = CType(acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead), BlockTable)

                Dim acBlkTblRec As BlockTableRecord
                acBlkTblRec = CType(acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), OpenMode.ForRead), BlockTableRecord)

                y = DataSet1.DataTable1.Rows(i).Item("y").ToString
                x = DataSet1.DataTable1.Rows(i).Item("x").ToString
                r = DataSet1.DataTable1.Rows(i).Item("r").ToString

                Dim acCirc As Circle = New Circle()
                acCirc.SetDatabaseDefaults()
                acCirc.Center = New Point3d(CDbl(y), CDbl(x), CDbl(z))
                acCirc.Radius = CDbl(r) / 100
                acCirc.Layer = layer

                acBlkTblRec.AppendEntity(acCirc)

                acTrans.AddNewlyCreatedDBObject(acCirc, True)
                acTrans.Commit()

            End Using

        Next

    End Sub

    Private Sub BtnZeichnen_Click(sender As Object, e As EventArgs) Handles BtnZeichnen.Click
        Zeichnen()
    End Sub
End Class


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

BillFrankShepard91
Mitglied
Student


Sehen Sie sich das Profil von BillFrankShepard91 an!   Senden Sie eine Private Message an BillFrankShepard91  Schreiben Sie einen Gästebucheintrag für BillFrankShepard91

Beiträge: 15
Registriert: 18.10.2013

Hardware:
Acer TimlineX 4830TG Notebook<P>Software:
AutoCad 2014 Studentenversion; Visual Studio Express 2012;

erstellt am: 21. Okt. 2013 20:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ich habe mittlerweile selbst ein Lösung gefunden.  Ich hab die If-Abfrage ob der Layer im Layertable enthalten ist um ein Else erweitert.
Die Frage ist nur, ob das so elegant ist...! Seis drum es funktioniert! 

              If acLyrTbl.Has(layer) = False Then

                    acLyrTblRec = New LayerTableRecord()

                    acLyrTblRec.Name = layer

                    If acLyrTbl.IsWriteEnabled = False Then acLyrTbl.UpgradeOpen()

                    acLyrTbl.Add(acLyrTblRec)
                    acTrans.AddNewlyCreatedDBObject(acLyrTblRec, True)


                    Dim acCirc As Circle = New Circle()
                    acCirc.SetDatabaseDefaults()
                    acCirc.Center = New Point3d(CDbl(y), CDbl(x), CDbl(z))
                    acCirc.Radius = CDbl(r) / 100
                    acCirc.Layer = layer

                    acBlkTblRec.AppendEntity(acCirc)

                    acTrans.AddNewlyCreatedDBObject(acCirc, True)

                Else

                    acLyrTblRec = CType(acTrans.GetObject(acLyrTbl(layer), OpenMode.ForWrite), LayerTableRecord)

                    Dim acCirc As Circle = New Circle()
                    acCirc.SetDatabaseDefaults()
                    acCirc.Center = New Point3d(CDbl(y), CDbl(x), CDbl(z))
                    acCirc.Radius = CDbl(r) / 100
                    acCirc.Layer = layer

                    acBlkTblRec.AppendEntity(acCirc)

                    acTrans.AddNewlyCreatedDBObject(acCirc, True)


                End If

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz