Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Problem mit CLongBinary oder CByteArray und ODBC!

Empfohlene Antworten

Veröffentlicht

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

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?

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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.