Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben
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?
Geschrieben

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

Geschrieben

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

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...