Benutzer mit den meisten Antworten
ADO Verweis

Frage
-
Guten Tag,
da ich meine Anwendung noch nicht durchgehend auf ADO.NET umstellen konnte, muss ich noch ADO verwenden. Die Anweisung
If rst.Fields(Feldname).Type = ADODB.DataTypeEnum.adCurrency Then
führt aber zum Laufzeitfehler:
Die Methode "instance valuetype ADODB.DataTypeEnum [gap6] ADODB.Field::get_Type()" der Klasse "ADODB.InternalField" ist nicht vorhanden.
Unter VB6 (auf demselben Rechner) ist sie fehlerfrei, und selbst unter VB2008 war sie ebenfalls fehlerfrei. Jetzt verwende ich VB2010.
Ado habe ich als COM-Verweis auf "Microsoft ActiveX Data Objects 2.8 Library" einbezogen? Ist daran etwas falsch?
Ersetze ich ADODB.DataTypeEnum.adCurrency durch den laut dahinter stehenden Wert 6, ändert sich nichts. Auch findet sich "Property Type As ADODB.DataTypeEnum .. Member von ADODB.Field" fehlerfrei im Objektkatalog. Beim Debuggen wird der aktuelle Wert von Type (z.B. adVarchar(200)) auch richtig angezeigt.
Jochen
Antworten
-
Hallo Jochen,
Ich finde nämlich lediglich im COM-Bereich den Verweis
auf "Microsoft ActiveX Data Objects 2.8 Library".
Den verwende ich ja bereits, sonst ließe sich das Prjekt
ja gar nicht kompilieren und starten.Nein, nicht COM und nicht "Microsoft ActiveX Data Objects 2.8 Library"
sondern eben "adodb", womit die adodb.dll gemeint ist.
Diese findet man z.B. unter
C:\Programme\Microsoft.NET\Primary Interop Assemblies\adodb.dllIm NET-Bereich finde ich nichts, was auch nur irgendwie nach
ADODB aussieht. Kann es sich unter einem anderen Namen
verbergen?Ja unter "adodb".
Die Liste der Verweise ist nicht unbedingt alphabetisch sortiert,
also ganz genau hinsehen.Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)- Als Antwort markiert Sansibla Freitag, 3. September 2010 06:51
Alle Antworten
-
Hallo Jochen,
da ich meine Anwendung noch nicht durchgehend auf ADO.NET
umstellen konnte, muss ich noch ADO verwenden. Die Anweisung
If rst.Fields(Feldname).Type = _
ADODB.DataTypeEnum.adCurrency Then
führt aber zum Laufzeitfehler:Verweis auf "adodb" im Projekt vorhanden?
Dim RS As new ADODB.Recordset
RS.Fields.Append("ID", ADODB.DataTypeEnum. adInteger)
RS.Fields.Append("Betrag", ADODB.DataTypeEnum.adCurrency)if RS.Fields("Betrag").Type = ADODB.DataTypeEnum.adCurrency then
stop
else
stop
end iffunktioniert hier ohne Probleme.
Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)- Als Antwort vorgeschlagen Robert BreitenhoferModerator Donnerstag, 2. September 2010 12:04
-
Hallo Peter, bei mir führt dein Beispielcode in einem neuen Projekt bereits beim "append" zu folgendem Fehler:
"Fehler: Die Methode "instance void [WindowsApplication1] ADODB.Fields::Append(string,valuetype ADODB.DataTypeEnum,int32,valuetype ADODB.FieldAttributeEnum,object)" der Klasse "ADODB.InternalFields" ist nicht vorhanden."
Die Details zum Fehler sind literarisch noch wertvoller:
*** quote ***
System.MissingMethodException wurde nicht behandelt.
Message=Fehler: Die Methode "instance void [WindowsApplication1] ADODB.Fields::Append(string,valuetype ADODB.DataTypeEnum,int32,valuetype ADODB.FieldAttributeEnum,object)" der Klasse "ADODB.InternalFields" ist nicht vorhanden.
Source=WindowsApplication1
StackTrace:
bei ADODB.Fields.Append(String Name, DataTypeEnum Type, Int32 DefinedSize, FieldAttributeEnum Attrib, Object FieldValue)
bei WindowsApplication1.Form1.Form1_Load(Object sender, EventArgs e) in C:\Dokumente und Einstellungen\Granzow.BIE\Lokale Einstellungen\Anwendungsdaten\Temporary Projects\WindowsApplication1\Form1.vb:Zeile 5.
bei System.EventHandler.Invoke(Object sender, EventArgs e)
bei System.Windows.Forms.Form.OnLoad(EventArgs e)
bei System.Windows.Forms.Form.OnCreateControl()
bei System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
bei System.Windows.Forms.Control.CreateControl()
bei System.Windows.Forms.Control.WmShowWindow(Message& m)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.ScrollableControl.WndProc(Message& m)
bei System.Windows.Forms.Form.WmShowWindow(Message& m)
bei System.Windows.Forms.Form.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
bei System.Windows.Forms.SafeNativeMethods.ShowWindow(HandleRef hWnd, Int32 nCmdShow)
bei System.Windows.Forms.Control.SetVisibleCore(Boolean value)
bei System.Windows.Forms.Form.SetVisibleCore(Boolean value)
bei System.Windows.Forms.Control.set_Visible(Boolean value)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.Run(ApplicationContext context)
bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
bei WindowsApplication1.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:Zeile 81.
bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
bei System.Threading.ThreadHelper.ThreadStart()
InnerException:*** unquote ***
Versteht das hier jemand?
Wie gesagt, der Verweis auf "Microsoft ActiveX Data Objects 2.8 Library" sorgt sonst eigentlich immer für fehlerfreie ADODB-Funktionalität.
Jochen
-
Hallo,
Hallo Peter, bei mir führt dein Beispielcode in einem
neuen Projekt bereits beim "append" zu folgendem Fehler:Weil mit hoher Wahrscheinlichkeit in Deinem Projekt der
Verweis auf "adodb" fehlt.So fügst Du diesen Verweis Deinem Projekt hinzu
Rechter Mausklick im Projektmappenexplorer auf Verweise
Verweis hinzufügenIm Fenster "Verweis hinzufügen":
Registerkarte ".Net" auswählen
In der Liste unter Komponentenname den
Eintrag adodb markieren.
Mit Button OK abschliessen.Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)- Als Antwort vorgeschlagen Robert BreitenhoferModerator Donnerstag, 2. September 2010 12:04
-
Damit kommen wir der Sache vielleicht näher.
Ich finde nämlich lediglich im COM-Bereich den Verweis auf "Microsoft ActiveX Data Objects 2.8 Library". Den verwende ich ja bereits, sonst ließe sich das Prjekt ja gar nicht kompilieren und starten.
Im NET-Bereich finde ich nichts, was auch nur irgendwie nach ADODB aussieht. Kann es sich unter einem anderen Namen verbergen?
Ist vielleicht etwas falsch installiert? Ich verwende derzeit noch die Expressversion, die Profession-Version ist bestellt.
Jochen
-
Hallo Jochen,
Ich finde nämlich lediglich im COM-Bereich den Verweis
auf "Microsoft ActiveX Data Objects 2.8 Library".
Den verwende ich ja bereits, sonst ließe sich das Prjekt
ja gar nicht kompilieren und starten.Nein, nicht COM und nicht "Microsoft ActiveX Data Objects 2.8 Library"
sondern eben "adodb", womit die adodb.dll gemeint ist.
Diese findet man z.B. unter
C:\Programme\Microsoft.NET\Primary Interop Assemblies\adodb.dllIm NET-Bereich finde ich nichts, was auch nur irgendwie nach
ADODB aussieht. Kann es sich unter einem anderen Namen
verbergen?Ja unter "adodb".
Die Liste der Verweise ist nicht unbedingt alphabetisch sortiert,
also ganz genau hinsehen.Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)- Als Antwort markiert Sansibla Freitag, 3. September 2010 06:51
-
Bingo, das wars's!
ADODB war und ist allerdings bei tatsächlich nicht in der NET-Liste (man kann die ja auch sortieren)!
Ich habe den Verweis auf die adodb.dll an der von dir genannten Stelle aber mit Hilfe von "durchsuchen" einrichten können.
In der NET-Liste wird die ADODB immer noch nicht angeboten, aber in der Liste der vorhandenen Verweise ist sie drinne, und der Fehler tritt nicht mehr auf.
Schönen Dank aus Hamburg nach St. Georgen!
Jochen