CRowset::Insert()



  • Hi@all,

    ich möchte per CRowset::Insert Daten in eine Tabelle schreiben.
    Zwei kleine Probleme habe ich dabei allerdings noch.
    Siehe die Kommentare dahinter.

    m_dboMand.MoveLast();
    	CString strPath;
    	strPath = "C:\\NoRA\\noradat\\dk000000\\00000001.doc";
    	CFile file;
    	int nLength, nFind = 0;
    	char* Dateiinhalt;
    	while((nFind = strPath.Find("\\", nFind + 2)) != - 1)
    		strPath.Insert(nFind, "\\");
    	if(file.Open(strPath, CFile::modeRead | CFile::typeBinary | CFile::shareDenyWrite))
    	{
    		Dateiinhalt = new char[ file.GetLength() ];
    		file.Read( Dateiinhalt, file.GetLength() ); 
    		nLength = file.GetLength();
    	}
    	HANDLE hFile;
    	IStream *iStreamDoc;
    	hFile = GlobalAlloc(GHND, nLength);
    	CreateStreamOnHGlobal(hFile, TRUE, &iStreamDoc); //Ist das File jetzt schon drin? Ich glaube nicht da ich ja
    // nirgends das File an dien Stream übergebe.
    	lstrcpy(m_dboMand.m_Test, "Karsten Asche");
    	lstrcpy(m_dboMand.m_Test1, "TestOLE");
    	lstrcpy(m_dboMand.m_Test2, "Test2OLE");
    	static const GUID testid = 
    	{ 0x3ea1003f, 0x3a06, 0x43e3, { 0x8a, 0x5d, 0x20, 0xcf, 0xc3, 0x86, 0x8f, 0x34 } };
    
    	m_dboMand.m_ID = testid;
    	m_dboMand.m_Image = iStreamDoc;
    	m_dboMand.m_est = 345;
    	lstrcpy(m_dboMand.m_LInk, "http://www.testOLE.de");
    
    	m_dboMand.Insert()://Bekomme ich ganz bescheuerte Werte zurück "-26345745683" Kann  ja auch damit zusammenhängen,
    //dass File noch nicht korrekt an den Stream übergeben ist.
    

    Kann mir da jemand behilflich sein bin noch absoluter Beginner was OLE DB angeht:)

    Gruß
    CrazyPlaya


  • Mod

    Welchen HRESULT bekommst Du denn zurück.
    Der höchste HRESULT ist -2147483647. Deiner (-26345745683) ist technisch nicht möglich!



  • Sorry du hast recht. Meinen Wert habe ich einfach so daher getippt, da ich mal davon ausgegangen bin, das dies ein Wert für eine nicht initialisierte Variable ist.
    Welche Bedeutung hat den dieser Wert?


  • Mod

    Dies ist ein Fehlercode. Mit dem Error Lookup Programm kannst Du sogar die Bedeutung nachschlagen, oder es steht dazu sogar was in der MSDN!



  • Hi nochmal,
    also der genaue Returnwert lautet -2147217879 oder 0x80040E29 aber damit läßt sich weder im Error - Lookup noch in der MSDN etwas finden.
    Jemand eine Idee wie der Fehler lauten könnten?

    Gruß
    CrazyPlaya


  • Mod

    Jet Engine Fehler:
    0x80040E29 -2147217879 The rowset cannot scroll backwards



  • @Martin Richter
    Oh Danke wo rausgefunden?
    Tut mir auch leid habe gerade gesehen das war die Fehlermeldung die ich bei MoveLast() zurückbekommen habe:)
    Insert gibt -2147217887 bzw. 0xF3338331 zurück.
    Ich weiß jetzt auch nicht mehr was ich falsch mache. Ich weise alle Werte zu.
    Ich habe es auch genau nach den beispielen gemacht die Microsoft gibt. Bzw. Ich habe es versucht.
    Hast du vielleicht ein gutes Tutorial zu OLE DB zur Verfügung oder ne Buchempfehlung.



  • So hier noch mal mein derzeitiger Codestand vielleicht fällt ja jemandem auf was ich falsch mache.

    int nLength;
    	BYTE byteFile[50];
    	byteFile[0] = 0;
    	strPath = "C:\\NoRA\\noradat\\dk000000\\00000001.doc";
    	COleStreamFile osFile;
    	osFile.Open(strPath, COleStreamFile::modeRead | COleStreamFile::shareDenyWrite);
    	nLength = 65535;
    	WIN32_FIND_DATAA fData;
    	HANDLE hFile;
    	hFile = ::FindFirstFile(strPath, &fData);
    	if(hFile == (HANDLE)0xFFFFFFFF) 
    	{
    		AfxMessageBox("Verzeichnis nicht gefunden");
    		return;
    	}
    	hFile = GlobalAlloc(GHND, nLength);
    	IStream *iStreamDoc;
    	ISequentialStream *iSeqStream;
    	//iStreamDoc->Read(osFile.GetLength(), NULL);
    	CreateStreamOnHGlobal(hFile, TRUE, &iStreamDoc);
    	iSeqStream = iStreamDoc;
    	//m_dboMand.MoveLast();
    	HRESULT hRes;	
    	m_dboMand.m_Inhalt[0] = 0;
    	lstrcpy(m_dboMand.m_Test, "Karsten Asche");
    	lstrcpy(m_dboMand.m_Test1, "TestOLE");
    	lstrcpy(m_dboMand.m_Test2, "Test2OLE");
    	m_dboMand.m_Anlage = dbTime;
    	static const GUID testid = 
    	{ 0x3ea1003f, 0x3a06, 0x43e3, { 0x8a, 0x5d, 0x20, 0xcf, 0xc3, 0x86, 0x8f, 0x34 } };
    
    	m_dboMand.m_ID = testid;
    	m_dboMand.m_Image = iSeqStream;
    	m_dboMand.m_est = 345;
    	lstrcpy(m_dboMand.m_LInk, "http://www.testOLE.de");
    
    	hRes = m_dboMand.Insert();
    	if(hRes != S_OK)
    		AfxThrowOleException(hRes);
    

    Fehler ist nun Interner Anwendungsfehler

    ??? 😕 ???



  • So wie das ausschaut liegt das irgendwie mit dem Stream zusammen.
    Habe mir gerade mal einen kleinen Testcontainer gebastelt und dann nach und nach alle Werte der Tabelle hinzugefügt und sobald ich den Stream benötigte war Feierabend mit Insert.

    PS: Das Binary Feld bereitet mir auch noch sorgen


Anmelden zum Antworten