punnenjaeger Geschrieben 7. April 2009 Geschrieben 7. April 2009 Hallo Leute, habe folgendes Problem: In einer Tabelle vom SQL - Server befindet sich ein BLOB-Feld, dieses kann ich mittels ODBC auch auslesen. Wenn ich die Variable für das BLOB-Feld als CLongBinary deklariere hiermit: lBLOBSize = m_pRecTbl->m_lbBLOB.m_dwDataLength; buffer = (pBYTE)GlobalLock(m_pRecTbl->m_lbBLOB.m_hData); memcpy(m_pRecTbl->m_ALP, buffer, lBLOBSize); GlobalUnlock(m_pRecTbl->m_lbBLOB.m_hData); Jetzt stecken die Daten auch sauber im Struct (m_pRecTbl->m_ALP), aber wie bekomme ich geänderte Daten innerhalb des Structs wieder in die DB zurück? Das HANDLE ist ja bei jedem gelesenen Datensatz gleich. Ähnlich ergeht es mit, wenn ich die Variable für das BLOB-Feld als CByteArray deklariere hiermit: lBLOBSize = m_pRecTbl->m_baBLOB.GetSize(); buffer=m_pRecTbl->m_baBLOB.GetData(); memcpy(m_pRecTbl->m_ALP, buffer, lBLOBSize); Auch hier stecken die Daten sauber im Struct (m_pRecTbl->m_ALP), aber ich habe bisher keinen Weg gefunden die geänderten Daten vom Struct wieder in die DB zurück zu schreiben? Über einen Tip wie das gehen könnte wäre ich dankbar. Punnenjaeger Zitieren
Klotzkopp Geschrieben 7. April 2009 Geschrieben 7. April 2009 Auch hier stecken die Daten sauber im Struct (m_pRecTbl->m_ALP), aber ich habe bisher keinen Weg gefunden die geänderten Daten vom Struct wieder in die DB zurück zu schreiben?SetSize auf die notwendige Größe, Zeiger mit GetData holen und einfach zurückkopieren hat nicht geklappt? Zitieren
punnenjaeger Geschrieben 8. April 2009 Autor Geschrieben 8. April 2009 Irgendwie scheine ich die Lösung nicht recht zu sehen. Grundsätzlich ist es doch so das die Daten nur über einen Pointer "vorhanden" sind. Dieser Pointer auf die Daten wurde genutzt um an die eigentlichen Daten zu kommen. Die stehen jetzt innerhalb des Struct (m_pRecTbl->m_ALP) zur Verfügung. Sämtliches Ändern, Löschen oder Hinzufügen über einen Dialog geschieht aber im Struct. Die eigentlichen Daten (oder das Speicherabbild) haben sich ja noch nicht geändert, wenn ich im Struct ändere. Grundsätzlich fehlt mir also m.M.n. "nur" ein Ansatz wie ich die Daten wieder ins Binärformat bekomme und damit in die DB bekomme. Oder ich denke einfach zu kompliziert?! Punnenjaeger Zitieren
Klotzkopp Geschrieben 8. April 2009 Geschrieben 8. April 2009 Den Ansatz habe ich doch geschildert. Setz die Größe des CByteArray und kopier die Daten zurück. Zitieren
punnenjaeger Geschrieben 8. April 2009 Autor Geschrieben 8. April 2009 Hey Klotzkopp! Danke. Habe es gefunden. Manchmal sieht man den Wald vor lauter Bäumen nicht. *grummel* Hier die Lösung (falls mal jemand ebenso darüber stolpert): m_pRecTbl->m_baBLOB.SetSize(lBLOBSize,-1); memcpy(m_pRecTbl->m_baBLOB.GetData(),m_pRecTbl->m_ALP,sizeof(m_pRecTbl->m_ALP)); Nochmals DANKE!!! Punnenjaeger 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.