bigpoint Geschrieben 26. Januar 2004 Geschrieben 26. Januar 2004 Ein Problem, wenn ich mit VC Assistent eine SDI Anwendung mit OLE DB Verbindung erstelle funktioniert die DB Verbindung , sobald ich aber ganz normalen Dialog erstelle und da die OLE DB Verbindung alleine tippen will funktioniert es nicht obwohl es ist alles gleich CDBPropSet dbinit(DBPROPSET_DBINIT); dbinit.AddProperty(DBPROP_AUTH_PASSWORD, "password"); dbinit.AddProperty(DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO, false); dbinit.AddProperty(DBPROP_AUTH_USERID, "sa"); dbinit.AddProperty(DBPROP_INIT_CATALOG,"DB"); dbinit.AddProperty(DBPROP_INIT_DATASOURCE, "SERVERNAME"); dbinit.AddProperty(DBPROP_INIT_LCID, (long)1031); dbinit.AddProperty(DBPROP_INIT_PROMPT, (short)4); hr = db.OpenWithServiceComponents("SQLOLEDB.1", &dbinit);//hier kriege ich Probleme if (FAILED(hr)) return hr; hr = session.Open(db); if (FAILED(hr)) return hr; [/PHP] Zitieren
bigpoint Geschrieben 26. Januar 2004 Autor Geschrieben 26. Januar 2004 Original geschrieben von Klotzkopp Welchen Wert hat denn hr? -2147221008 Zitieren
Klotzkopp Geschrieben 26. Januar 2004 Geschrieben 26. Januar 2004 -2147221008 ist 0x800401F0, und das ist CO_E_NOTINITIALIZED. OLEDB basiert auf COM, d.h. du musst in jedem Thread, der COM benutzt, vorher CoInitialize (bzw. CoInitializeEx) aufrufen. Sehr hilfreich bei allen HRESULTs und Rückgabewerten von GetLastError ist das Error LookUp Tool des Visual Studio. Das sagt zu -2147221008: "CoInitialize wurde nicht aufgerufen" Zitieren
bigpoint Geschrieben 26. Januar 2004 Autor Geschrieben 26. Januar 2004 Original geschrieben von Klotzkopp -2147221008 ist 0x800401F0, und das ist CO_E_NOTINITIALIZED. OLEDB basiert auf COM, d.h. du musst in jedem Thread, der COM benutzt, vorher CoInitialize (bzw. CoInitializeEx) aufrufen. Sehr hilfreich bei allen HRESULTs und Rückgabewerten von GetLastError ist das Error LookUp Tool des Visual Studio. Das sagt zu -2147221008: "CoInitialize wurde nicht aufgerufen" erstmal Danke aber wo finde ich Error LookUp in Visual Studio ???:confused: Zitieren
bigpoint Geschrieben 26. Januar 2004 Autor Geschrieben 26. Januar 2004 Des weitere mache ich so : CDBPropSet propset(DBPROPSET_ROWSET); propset.AddProperty(DBPROP_CANFETCHBACKWARDS, true); propset.AddProperty(DBPROP_IRowsetScroll, true); propset.AddProperty(DBPROP_IRowsetChange, true); propset.AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_INSERT | DBPROPVAL_UP_DELETE ); // wenn ich die Daten nicht verändern will was muß hier stehen ?? hr = CCommand<CAccessor<CRezept> >::Open(session, "SELECT * FROM dbo.Tabell", &propset);//hier dauert es zimmlich lange if (FAILED(hr)) return hr; return MoveNext(); [/PHP] Wie kann ich jetzt diesen CCommand von die Tabelle benutzen, zB. ich will alles in einem List anzeigen wo kriege ich den Recordset :eek: Zitieren
Klotzkopp Geschrieben 26. Januar 2004 Geschrieben 26. Januar 2004 Original geschrieben von 007ski aber wo finde ich Error LookUp in Visual Studio ???:confused: Ich habe hier leider nur die englische Version von VC++.NET, da ist es unter Tools->Error Lookup hr = CCommand<CAccessor<CRezept> >::Open(session, "SELECT * FROM dbo.Tabell", &propset);//hier dauert es zimmlich lange Mich wundert, dass der Compiler das überhaupt schluckt. AFAIK ist CCommand::Open nicht statisch. Ich mache das normalerweise so: CCommand<MeinAccessor> cmd; HRESULT hr = cmd.Open(...); while(S_OK == cmd.MoveNext()) { // hier sind dann über cmd die Member des Accessors zugänglich. } [/CODE] Zitieren
bigpoint Geschrieben 27. Januar 2004 Autor Geschrieben 27. Januar 2004 Original geschrieben von Klotzkopp Ich habe hier leider nur die englische Version von VC++.NET, da ist es unter Tools->Error Lookup ach so ich benutze VC++ 6.0 vileich liegt es daran !? Zitieren
bigpoint Geschrieben 27. Januar 2004 Autor Geschrieben 27. Januar 2004 Original geschrieben von Klotzkopp Mich wundert, dass der Compiler das überhaupt schluckt. AFAIK ist CCommand::Open nicht statisch. Ich mache das normalerweise so: CCommand<MeinAccessor> cmd; HRESULT hr = cmd.Open(...); while(S_OK == cmd.MoveNext()) { // hier sind dann über cmd die Member des Accessors zugänglich. } moment also ich habe so class CTabell { public: CTabell() { memset( (void*)this, 0, sizeof(*this) ); }; // Die variablen von CTabell BEGIN_COLUMN_MAP(CTabell) //Die Spalten von CTabell END_COLUMN_MAP() }; class testSet : public CCommand<CAccessor<CTabell> > { public: HRESULT Open() { // Hier öfne ich den CCommand ....... CCommand<CTabell> cmd;//das stürt ihn ?!? hr = CCommand<CAccessor<CTabell> >::Open(session, "SELECT * FROM dbo.Tabell", &propset); // so geht es ? } Zitieren
Klotzkopp Geschrieben 27. Januar 2004 Geschrieben 27. Januar 2004 Original geschrieben von 007ski ach so ich benutze VC++ 6.0 vileich liegt es daran !? Nein, hab gerade eben nochmal nachgesehn, da gibt es das auch, an der gleichen Stelle. Was bei HRESULTs auch hilft: Den Wert mit angehängtem ",hr" ins Watchfenster des Debuggers eingeben: -2147221008,hr Anzeige: 0x800401f0 CoInitialize wurde nicht aufgerufen. Zitieren
bigpoint Geschrieben 27. Januar 2004 Autor Geschrieben 27. Januar 2004 Original geschrieben von Klotzkopp Nein, hab gerade eben nochmal nachgesehn, da gibt es das auch, an der gleichen Stelle. Was bei HRESULTs auch hilft: Den Wert mit angehängtem ",hr" ins Watchfenster des Debuggers eingeben: -2147221008,hr Anzeige: 0x800401f0 CoInitialize wurde nicht aufgerufen. ok ich habe gefunden es heist auf Deutsch Fehlermeldung suchen :OD Zitieren
bigpoint Geschrieben 27. Januar 2004 Autor Geschrieben 27. Januar 2004 Original geschrieben von 007ski moment also ich habe so class CTabell { public: CTabell() { memset( (void*)this, 0, sizeof(*this) ); }; // Die variablen von CTabell BEGIN_COLUMN_MAP(CTabell) //Die Spalten von CTabell END_COLUMN_MAP() }; class testSet : public CCommand<CAccessor<CTabell> > { public: HRESULT Open() { // Hier öfne ich den CCommand ....... CCommand<CTabell> cmd;//das stürt ihn ?!? hr = CCommand<CAccessor<CTabell> >::Open(session, "SELECT * FROM dbo.Tabell", &propset); // so geht es ? } die CTabell ist doch in meinem Fall MeinAccessor , oder ?? Zitieren
Klotzkopp Geschrieben 27. Januar 2004 Geschrieben 27. Januar 2004 Mach daraus mal: CCommand<CAccessor<CTabell> > cmd; hr = cmd.Open(session, "SELECT * FROM dbo.Tabell", &propset); [/code] Zitieren
bigpoint Geschrieben 28. Januar 2004 Autor Geschrieben 28. Januar 2004 Original geschrieben von Klotzkopp Mach daraus mal: CCommand<CAccessor<CTabell> > cmd; hr = cmd.Open(session, "SELECT * FROM dbo.Tabell", &propset); habe gemacht in hr steht 0, allerdings wenn ich die Variablen von der Tabelle abfragen möchte steht immer 0 obwohl in DB stehen werte ? Zitieren
Klotzkopp Geschrieben 28. Januar 2004 Geschrieben 28. Januar 2004 Hast du MoveNext aufgerufen? Zitieren
bigpoint Geschrieben 28. Januar 2004 Autor Geschrieben 28. Januar 2004 Original geschrieben von Klotzkopp Hast du MoveNext aufgerufen? So mache ich es: OpenDB opendb; opendb.SetDBParams(....); opendb.OpenDataSource(); while(S_OK == opendb.cmd.MoveNext()) { int k = opendb.m_ver; } [/PHP] Es ist sehr mehrwürdig denn wenn ich so mache [PHP] hr = cmd.Open(session, "SELECT TOP 10 * FROM dbo.Tabell", &propset); OpenDB opendb; opendb.SetDBParams(....); opendb.OpenDataSource(); int zeahler = 0; while(S_OK == opendb.cmd.MoveNext()) { zeahler++; int k = opendb.m_ver; } [/PHP] Kriege ich auch in zeahler 10 zurück Zitieren
bigpoint Geschrieben 28. Januar 2004 Autor Geschrieben 28. Januar 2004 Original geschrieben von Klotzkopp Hast du MoveNext aufgerufen? ich rufe MoveNext doch richtig auf, oder Zitieren
Klotzkopp Geschrieben 28. Januar 2004 Geschrieben 28. Januar 2004 Ja, das sieht gut aus. Sind in der Tabelle mehrere Felder? Falls ja, schreib bitte mal die tatsächlichen Feldnamen statt des * in das Select-Statement. Kann sein, dass die Reihenfolge in der COLUMN_MAP nicht auf die Reihenfolge der Felder passt, wie das Select sie liefert. Zitieren
bigpoint Geschrieben 28. Januar 2004 Autor Geschrieben 28. Januar 2004 Original geschrieben von Klotzkopp Ja, das sieht gut aus. Sind in der Tabelle mehrere Felder? Falls ja, schreib bitte mal die tatsächlichen Feldnamen statt des * in das Select-Statement. Kann sein, dass die Reihenfolge in der COLUMN_MAP nicht auf die Reihenfolge der Felder passt, wie das Select sie liefert. Es sind mehre Spalte und die stehen in COLUMN_MAP habe auch richtige Reihenfolge Ich habe auch die tatsächlichen Feldnamen statt des * in das Select-Statement angegeben !? Egal welchen Feldname ich aufrufe steht nur 0 ?!?!? Irgend wie verstehe ich es nicht ;( Zitieren
bigpoint Geschrieben 28. Januar 2004 Autor Geschrieben 28. Januar 2004 das kommische daran ist das sie schleife soviel mal durch läft wieviel Datensetze da drin sind Zitieren
Klotzkopp Geschrieben 28. Januar 2004 Geschrieben 28. Januar 2004 Original geschrieben von 007ski int k = opendb.m_ver; Mir fällt gerade auf: Die Feldinhalte sollten in den Membervaraiblen des Accessors stehen. Wenn OpenDB nicht gerade von deiner Accessorklasse abgeleitet ist (was nicht gut wäre), sollte da int k = opendb.cmd.m_ver; stehen. Zitieren
bigpoint Geschrieben 29. Januar 2004 Autor Geschrieben 29. Januar 2004 Hallo, also jetzt funktioniert obwohl ich es nicht verstehe warum ;( so hat nicht funktioniert: das habe ich in Heder CCommand<CAccessor<CTabell> > cmd; [/PHP] Das in cpp [PHP] hr = cmd.Open(session, "SELECT * FROM dbo.Tabell ", &propset); if (FAILED(hr)) return hr; return hr; // return MoveNext(); wenn so dann kriege ich Fehler so funkt nur cpp: hr = CCommand<CAccessor<CTabell> >::Open(session, "SELECT * FROM dbo. Tabell", &propset); if (FAILED(hr)) return hr; return MoveNext(); [/PHP] Irgend wie ist es komisch, oder ? Zitieren
Klotzkopp Geschrieben 29. Januar 2004 Geschrieben 29. Januar 2004 Ich kann mir das nur so erklären, dass dieser Code in einer Memberfunktion einer Klasse steht, die von CCommand abgeleitet ist. Ist das der Fall? Zitieren
bigpoint Geschrieben 29. Januar 2004 Autor Geschrieben 29. Januar 2004 Original geschrieben von Klotzkopp Ich kann mir das nur so erklären, dass dieser Code in einer Memberfunktion einer Klasse steht, die von CCommand abgeleitet ist. Ist das der Fall? ja es ist der Fall, aber trozd verstehe ich es nicht und ist es überhaupt sauber ? Zitieren
bigpoint Geschrieben 2. Februar 2004 Autor Geschrieben 2. Februar 2004 Noch einen Problem mit OLE DB Ich muß mit dem Progi auf SQL Server 2000 sowohl mit auch ohne Partitionierten Sichten. Wenn ich die DB ohne Partitionierten Sichten auswähle als verbindungs- DB dann funk wunder bar sobald ich aber auf die Partitionierte Sichten gehen knack hier hr = CCommand<CAccessor<CTabell> >::Open(session, "SELECT * FROM dbo.Tabell", &propset); , in hr steht -2147217887 Zitieren
Empfohlene Beiträge
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.