Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hi,

wie ist es eigentlich mit ADO also ich will DB mit Hilfe von ADO verbinden ( früher habe ich es immer mit ODBC gemacht ) und so wie ich es verstanden habe brauche ich dazu auch ODBC Treiber ?? wenn es stimmt dann wo zu ist eigentlich ADO gut ?? Bis jetzt habe ich es immer so verstanden das ich das ganze mit ADO ohne ODBC Treiber machen kann , wer kann es mir erklären ???

Vielen Dank

Geschrieben

Hallo,

ODBC benutzt man zum Zugriff auf Datenbanken, wie Du schon gesagt hast. Man muss aber in den ODBC Einstellungen, die Datenbank definieren und einen ODBC Namen zum ansprechen der Einstellungen vergeben.

Bei ADO läuft das etwas anders. Mit ADO kann man direkt auf Datenbanken zugreifen ohne den Umweg über ODBC.

Frank

Geschrieben
Originally posted by palvoelgyi

Hallo,

ODBC benutzt man zum Zugriff auf Datenbanken, wie Du schon gesagt hast. Man muss aber in den ODBC Einstellungen, die Datenbank definieren und einen ODBC Namen zum ansprechen der Einstellungen vergeben.

Bei ADO läuft das etwas anders. Mit ADO kann man direkt auf Datenbanken zugreifen ohne den Umweg über ODBC.

Frank

Ok dann sagen wir ich habe ein DB der Test heißt und der hat dann Tabelle Benutzer wie greife ich auf die Tabelle zu ich kann nur so :

Open(L"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Test",L"",L"",adOpenUnspecified); }

Data Source=Test -> ist es nicht verweis auf ODBC Treiber ??

Geschrieben

Vielen Dank die Frage hat sich schon von selbst geklärt, jetz ist aber so

versuche mit Hilfe von ADO auf DB zugreifen, dazu habe eine Klasse geschrieben:

#define INITGUID

#import "C:\Programme\Gemeinsame Dateien\System\ADO\msado15.dll" rename_namespace("ADOCG") rename("EOF", "EndOfFile")

using namespace ADOCG;

#include "icrsint.h"

class CCustomRs : public CADORecordBinding

{

public:

BEGIN_ADO_BINDING(CCustomRs)

ADO_VARIABLE_LENGTH_ENTRY2(1, adVarChar, m_szFirstName, Âsizeof(m_szFirstName), lFirstNameStatus, TRUE)

ADO_VARIABLE_LENGTH_ENTRY2(2, adVarChar, m_szLastName, Âsizeof(m_szLastName), lLastNameStatus, TRUE)

ADO_VARIABLE_LENGTH_ENTRY2(3, adVarChar, m_szPhone, Âsizeof(m_szPhone), lPhoneStatus, TRUE)

END_ADO_BINDING()

public:

CHAR m_szFirstName[51];

CHAR m_szLastName[51];

CHAR m_szPhone[51];

};

leider kriege ich folgenden Fehler :

warning C4146: Einem vorzeichenlosen Typ wurde ein unaerer Minus-Operator zugewiesen; das Ergebnis ist weiterhin vorzeichenlos

wenn ich auf den Fehler klicke lande ich :

enum RecordCreateOptionsEnum

{

adCreateCollection = 8192,

adCreateStructDoc = -2147483648,

adCreateNonCollection = 0,

adOpenIfExists = 33554432,

adCreateOverwrite = 67108864,

adFailIfNotExists = -1

};

Geschrieben
Originally posted by Klotzkopp

Funktioniert es denn? Und was ist das für ein Zeichen vor sizeof?

Einem vorzeichenlosen Typ wurde ein unaerer Minus-Operator zugewiesen; das Ergebnis ist weiterhin vorzeichenlos

:confused:

Geschrieben
Originally posted by 007ski

Einem vorzeichenlosen Typ wurde ein unaerer Minus-Operator zugewiesen; das Ergebnis ist weiterhin vorzeichenlos

Ja, das hattest Du schon geschrieben. Das ist aber eine Warnung des Compilers, kein Fehler. Du kannst das Programm also trotzdem starten. Die Frage ist, tut es, was es soll?
Geschrieben

Leider nicht es ist so wenn ich es

#define INITGUID

#import "C:\Programme\Gemeinsame Dateien\System\ADO\msado15.dll" rename_namespace("ADOCG") rename("EOF", "EndOfFile")

using namespace ADOCG;

#include "icrsint.h"

in die class CCustomRs schreibe dann kriege ich Fehler:

Einem vorzeichenlosen Typ wurde ein unaerer Minus-Operator zugewiesen; das Ergebnis ist weiterhin vorzeichenlos

Aber wenn ich den import in die Dokument Header Klasse schreibe dann kriege ich es nicht als Fehler sondern als Warnung ???

Komisch oder ????

Geschrieben
Originally posted by 007ski

Leider nicht es ist so wenn ich es

[schnibbel]

in die class CCustomRs schreibe dann kriege ich Fehler:

Einem vorzeichenlosen Typ wurde ein unaerer Minus-Operator zugewiesen; das Ergebnis ist weiterhin vorzeichenlos

Welche Nummer hat dieser Fehler?

Aber wenn ich den import in die Dokument Header Klasse schreibe dann kriege ich es nicht als Fehler sondern als Warnung ???
Schreib den Block mal in stdafx.h.
Geschrieben

ich versuche so:

#pragma warning (disable: 4146)

#define INITGUID

#import "C:\Programme\Gemeinsame Dateien\System\ADO\msado15.dll" rename_namespace("ADOCG") rename("EOF", "EndOfFile")

using namespace ADOCG;

#include "icrsint.h"

#pragma warning (default: 4146)

Geschrieben
Originally posted by Crush

Hier ist eine gute Link-Sammlung zum Thema ADO. Evtl. steht noch etwas Hilfreiches in den FAQs.

Also mit dem #pragma warning (disable: 4146) funk so weit gut jetzt ist aber so dass ich kann meinen progi überhaupt nicht ausführen kriege zwar keinen Fehler aber der bricht bei Debug an die Stelle

if (!CDocument::OnNewDocument())

return FALSE;

Mit einem Fensterfehler Meldung „Unbehandelte Ausnahme in ......exe

@Crush

PS.

dek Link ist OK Danke

Geschrieben
Originally posted by 007ski

Wenn ich es aber auskommentiere dann funk, was kann es sein ??

Erdstrahlen. Oder Polarlichter.

Mal im Ernst, wie soll irgendjemand alle Codeänderungen, die Du gemacht hast, nachvollziehen, und dann diese Frage beantworten, wenn Du nicht einmal sagst, was Du wo auskommentiert hast?

Und was die Ausnahme angeht: Starte das Programm im Debugger, damit Du uns sagen kannst, an welche Stelle im Code dieser Fehler auftritt, am besten mit Callstack.

Nur als Info:

#pragma warning (disable: 4146) macht nichts weiter, als die Warnung abzuschalten. Du behandelst die Symptome, nicht die Krankheit. Es gibt aber Fälle, wo man das einfach machen muss. Ich bin da bei ADO nicht ganz auf dem laufenden.

Kannst Du vielleicht Dein ganzes Projekt irgendwo hochladen, damit wir uns mal den Quellcode ansehen können? Natürlich nur, wenn Du das willst und das Copyright hast.

Geschrieben

Jetzt geht es um nichts anderes als um die Klasse OnNewDocument() die der Assistent alleine erstellt in der Klasse schreib er auch standardmäßig

if (!CDocument::OnNewDocument())

return FALSE

und wenn ich es auskommentiere dann funk :(

PS.

Mit dem Projekt irgendwo hochladen wurde gerne aber leider geht nicht :(

Vielen Dank

Geschrieben

Hast Du eine dieser drei Methoden überschrieben?

- IsModified

- DeleteContents

- SetModifiedFlag

Wie sieht der Callstack zum Zeitpunkt der Ausnahme aus?

Hast Du die MFC-Quellcodes installiert? Wenn ja, setze mal einen Breakpoint auf die Zeile, starte den Debugger und spring rein (F11). Da drin kannst Du dann mit F10 die einzelnen Schritte durchgehen, damit man genauer eingrenzen kann, wo der Fehler auftritt.

Geschrieben

Probier mal testweise ein paar Compileroptimierungen auszuschalten oder die C++- Ausnahmebehandlung deaktivieren und gucken was dann passiert. Versuch die Exception selber abzufangen oder den Ursprung mal genauer anzuschauen. Ohne Codebeispiel kommt man wohl kaum mehr weiter. Ich würde auch mal alles durchtracen wie Klotzkopp es sagt um zu sehen wann warum und wo was passiert und wie die Objekte zu dem Zeitpunkt aussehen.

Geschrieben

Also es ist so, bei Debug komme ich in die OnNewDocument() Methode von Microsoft in die Methode wird

DeleteContents () aufgerufen und da bringt er Fehler ?

Ich allerdings rufe die Methode DeleteContents() in ...Doc.cpp weil ich will sicherstellen, daß beim Schließen der Anwendung alles ordnungsgemäß aufgeräumt wird so sieht sie aus

void .........Doc::DeleteContents()

{

// Recordset schließen

if (m_pRs)

m_pRs->Close();

// Ist Zeiger auf Datensatzbindung gültig?

if (m_piAdoRecordBinding)

// Freigeben

m_piAdoRecordBinding->Release();

// Recordset-Zeiger auf NULL setzen

m_pRs = NULL;

// COM-Umgebung herunterfahren

CoUninitialize();

CDocument::DeleteContents();

}

Geschrieben

Vielleicht darfst Du das Deletecontents wegen Members nur über Dein Objekt aufrufen:


// This example is the handler for an Edit Clear All command.


void CMyDoc::OnEditClearAll()

{

   DeleteContents();

   UpdateAllViews(NULL);   

}


void CMyDoc::DeleteContents()

{

   // Re-initialize document data here.

}

Geschrieben

Der Aufruf von DeleteContents aus OnNewDocument heraus ist schon in Ordnung. Das ist die Standardimplementierung von OnNewDocument.

Aber weil DeleteContents u.a. auch zur Initialisierung eines neuen Dokuments verwendet wird, darf dieser Code da nicht rein.

@007ski:

Setze bitte mal den Code, der jetzt in DeleteContents steht, in die OnCloseDocument-Methode Deiner Dokumentklasse. Falls Du keine hast, kannst Du sie mit dem Klassenassistenten erstellen.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...