Übergabe einer Datei an eine Access DB



  • Hi @ all,

    ich versauche eine Datei in eine Acces Datenbank zu schreiben.
    Diese soll in einem Image(BLOB) Feld abgeelgt werden.
    ich versuche es auf folgende Weise und bekomme ständig einen unbekannten Fehler.

    LPSTREAM lpStr = NULL;
    COleStreamFile osFile;
    CString strPath = "C:\\NoRA\\noradat\\00000001.doc";
    osFile.Open(strPath, COleStreamFile::modeRead | COleStreamFile::typeBinary     
         | COleStreamFile::shareDenyWrite); 
    osFile.CreateMemoryStream();
    lpStr = osFile.GetStream();
    //Datenbankfelder 
    db.m_id = 1; // long
    lstrcpy(db.m_name, "Karsten"); // 
    TCHARdb.m_bin = lpStr; //ISequentialStream*
    
    HRESULT hRes;
    hRes = db.Insert();
    if(FAILED(hRes))	
         AfxThrowOleException(hRes); //Unbekannter Fehler
    

    Was mache ich falsch?

    Gruß
    Karsten


  • Mod

    Grmbl...

    Ich habe schon mal nach dem hRes gefragt! Was passiert denn nun?



  • hRes gibt Unbekannter Fehler aus.
    Wenn ich es mit anderen Feldern in der DB mache ist alles kein Problem z.B. char und int oder auch datetime. Läuft wunderbar.

    Es muss an dem Stream liegen.

    Aber was ich da falsch mache K.A.
    Ich habe bisher noch nie mit Streams gearbeitet wenn ich Daten an eine Datenbanktabelle übergeben muss.



  • So nun habe ich festgestellt, dass das so wie oben nicht richtig funktioniert mit dem Stream.
    Habe es nun mal ganz so gemacht wie es sein sollte, kann den Stream aber dennoch nicht übergeben.

    h = ::FindFirstFile(strPath, &fData);
    if(h == (HANDLE)0xFFFFFFFF)
    {     
       AfxMessageBox("Verzeichnis nicht gefunden");
       return;
    }
    do
    {     
      if(!::FindNextFile(h, &fData)) 
      {        
         nStop = 0;
      }
    }while(strcmp(fData.cFileName, strFileName) != 0 && nStop != 0);
    if(nStop != 0)
    {	     
       VERIFY(::StgCreateDocfile(T2COLE(g_szRootStorageName), STGM_READWRITE |  
         STGM_SHARE_EXCLUSIVE | STGM_CREATE,0, &pStg) == S_OK); 
       VERIFY(pStg->CreateStorage(T2COLE(szStorageName), STGM_CREATE | 
          STGM_READWRITE | STGM_SHARE_EXCLUSIVE, 0,0, &pStgFile)== S_OK); 
       strcpy(szStreamName, fData.cFileName);
    
       VERIFY(pStg->CreateStream(T2COLE(szStreamName), STGM_CREATE |             
       STGM_READWRITE | STGM_SHARE_EXCLUSIVE, 0,0, &lpStr) == S_OK);
    }
    db.m_id = 1;
    lstrcpy(db.m_name, "Karsten");
    db.m_bin = lpStr;
    hRes = db.Insert();
    if(FAILED(hRes))     
      AfxThrowOleException(hRes); //Nun bekomme ich 
            //allerdings "Interner   
            //Anwendungsfehler zurück
    

Anmelden zum Antworten