Office: (Office 2010) BLOB

Helfe beim Thema BLOB in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; von daolix hallo 64 ist irgendwie die letze Sch..e. probiers mal so: Code: #If VBA7 Then Private Declare PtrSafe Function CopyMemory Lib... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von muku, 14. Januar 2013.

  1. BLOB


    und den Aufruf dann:
    Code:
    Aber schau mal hier, das ist evtl genauer erklärt.

    Alternativ könntest du via VBA-Befehl LSet und 2 UDT's es versuchen und die RtlMoveMemory - Api rausschmeissen.
    ist aber etwas unflexibler wenn andere Dateigrößen abgearbeitet werden müssesten. Code:
    @ Thomas: Danke ich habs mir mal angeschaut und dann gleich heruntergeladen und installiert. Danke dafür :-).

    So, wieder zu meinem Problem.
    Ich hab die Deklaration mit "Any" angepasst und den Aufruf ensprechend deinem Vorschlag geändert. Auch hier wieder beim Kompilieren die Fehlermeldung, dass "Buffer" Typen unverträglich ist:
    Code:
    Ich bin im Moment ehrlich gesagt etwas Ratlos und hoffe das wir (ich) das noch mit Variante 1 (OHNE LSet und 2 UDT's) hinbekommen.

    Viele Grüße
    muku
     
    Zuletzt von einem Moderator bearbeitet: 2. März 2021
  2. Hallo

    lt. der, im velinkten Download von Thomas, enthaltenen Textdatei, lautet die Deklaration Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDestination As Any, pSource As Any, ByVal Length As LongPtr)
    der Aufruf ist dann CopyMemory dblVal, Buffer(0), 8

    sollte dies auch nicht funktionieren so ändere die Deklaration in Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (byval pDestination As LongPtr, byval pSource As LongPtr, ByVal Length As LongPtr)
    der Aufruf sollte dann CopyMemory CLngPtr(varptr(dblval)), CLngPtr(varptr(Buffer(0))), 8 sein.

    bedenke aber das du auch die 32 bit Deklaration entsprechend anpasst, sonst jibbet im Code probleme.
     
  3. Hallo,

    mit Vorschlag 2 hat es geklappt. *Smilie Wie genau muss das denn für 32bit Office angepasst werden?

    Leider gibt es auch etwas negatives zu berichten. Nun hab ich mir die vermutlichen Double-Wert anzeigen lassen und bekomme, falls byte-Länge=8, immer die gleiche Zahl für egal welchen Datensatz angezeigt.

    Code:
    Laut dieser Seite gibts nur drei Möglichkeiten für ein 8 byte große Variable
    1. Double
    2. Currency
    3. Date

    Ich habe im BCM (Business Contact Manager) nocheinmal nachgeschaut als welchen Datentyp BCM die Daten gespeichert hat, nämlich als Nummer OHNE Dezimalanzeil. Ich hab dazu bei Microsoft folgendes gefunden. Das heisst wohl, die Zahlen werden theoretisch als Integer gespeichert sind aber nich 2 oder 4 bytes lang sonder immer 8?! *upps

    edit:// Es wird auch der Datentyp "Währung" genutzt, welcher ebenfalls 8 bytes lang ist. Infos hier
     
    Zuletzt von einem Moderator bearbeitet: 2. März 2021
  4. BLOB

    Wenn das Feld Währung ist dann nimm Currency
    ...
    Dim dblVal As Currency
    ...

    Sollter das Feld aber Numeric sein so kann ich dir ab hier nicht weiterhelfen da mir der Aufbau von diesem Datenty nicht bekannt ist. lt diese msseite besteht dieser Datentyp aus zahlen, einem Vorzeichen und einem dezimalzeichen.
     
Thema:

BLOB

  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden