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.

Access Daten in Oracle DB updaten

Empfohlene Antworten

Veröffentlicht

Hallo,

ich muss Datensätze aus einer Access 2000 DB in eine Oracle 8i DB updaten. Dazu habe ich in VBA ein kleines Programm geschrieben, was via ODBC ein Verbindung mit der Oracle DB herstellt und die updates macht. Das funktioniert auch. Mein Problem ist, das ich auch eine Spalte mit Datensätzen mit mehr als 4000 Zeichen in der Access DB hab (meno Feld) und diese sich nicht in der Oracle DB updaten lassen, obwohl diese Spalte in der Oracle DB als long definiert ist und bereits Datensätze mit mehr wie 4000 Zeichen enthält.

Ich habe gelesen, das in Oracle strings nur 4000 Zeichen haben können. Wie kann ich jetzt aber meinen string mit den Daten aus VB mit mehr als 4000 Zeichen in der Oracle DB eintragen/updaten?

Ich bin am verzeifeln!!! Wäre super wenn mir jemand weiter helfen könnte...

Hallo!

Also du kannst unter Oracle auch den Spaltentyp "text" verwenden. Ist allerdings nicht ganz leicht zu handhaben (du kannst nachher dir die Daten nicht so einfach anzeigen lassen...).

Gruß, Axl

hi,

wenn ich mich recht erinnere, war das ganze ein problem des ado-treibers (oder odbc??) jedenfalls hab ich das problem auch gehabt, daten über 4000byte einzufügen. ich meine mit einem resultset und der methode appendChunk (oder so ähnlich) konnte man auch grössere datenmengen (in 400byte grossen blöcken) in die oracle-db laden.

müsste ich aber bei bedarf noch mal genauer nachlesen...

hth

... das wäre super, wenn sie das noch mal nachschauen könnten. Ich sitze schon seit drei Tagen vor dieser Sache und komme einfach zu keinem Ergebnis.

hi,

ich hab das problem damals anders gelöst... :-)

aber beim googeln kam das hier heraus: http://support.microsoft.com/?kbid=185958

eingendlich selbsterklärend, nur für das verwendete bild musst du deinen text einsetzen...

bei fragen einfach posten.

hth...

... vielen Dank schon mal für den Tip!!! Das hat mir schon einiges weitergeholfen. Mir ist aber immer noch nicht ganz klar, wo ich meinen string jetzt einsetzen muss. Das Bild wird ja so viel ich weiss Stückchen für Stückchen zerlegt und ich habe ja alles am Stück.

hi,

du musst deinen string in teile zerlegen, also folgendes

          Numblocks = FileLength / BlockSize

          LeftOver = FileLength Mod BlockSize


          ReDim ByteData(LeftOver)

          Get SourceFile, , ByteData()

          Rs(1).AppendChunk ByteData()


          ReDim ByteData(BlockSize)

          For i = 1 To Numblocks

              Get SourceFile, , ByteData()

              Rs(1).AppendChunk ByteData()

          Next i


          Rs.Update   'Commit the new data.

durch etwas ersetzen, was dir deinen string in blöcke zerteilt und in der forschleife die einzelnen blöcke nacheinander mittels appendChunk an das field-object übergeben. z.b.
dim varText as Variant

for i = 0 to len(deinString) step BLOCKSIZE

    varText = mid(deinString, i, BLOCKSIZE)

    rs.fields("deinFeldname").appendChunk varText

next

das ist ungetestet! ich glaube das appendChunk bekommt einen Variant übergeben...

hth...

Hab das Programm jetzt abgeändert. Leider kommt die Fehlermeldung: Ungültiger Prozeduraufruf oder ungültiges Argument

Hier ist das Code:

Public Sub Command1_Click()

'erstellt eine Verbindung mit der Oracledatenbank

Dim db As ADODB.Connection

Set db = New ADODB.Connection

db.Provider = "MSDAORA"

db.Open "DNS", "USER", "PASS"

'öffnet die BlobTable Tabelle

Dim rs As ADODB.Recordset

Set rs = New ADODB.Recordset

strSQL = "Select MyID, BLOBfld from BLOBTABLE WHERE MyID = 1"

rs.ActiveConnection = db

rs.CursorType = adOpenKeyset

rs.LockType = adLockOptimistic

rs.Open strSQL, db

'holt sich die Sourcedaten aus der Accessdatenbank

Dim rec As New ADODB.Recordset

Dim source As String

rec.Open "select DATEN from ACCESSDATEN where NR = 250157"

source = rec.GetString

rec.Close

'schreibt sie in die Oracledatenbank

Dim varText As Variant

For i = 0 To Len(source) Step BlockSize

varText = Mid(source, i, BlockSize)

rs.Fields("BLOBfld").AppendChunk varText

Next

End Sub

So, er zerteilt jetzt den string in keine Stücke. Nur leider trägt er ihn jetzt nicht in die Oracledatenbank ein. Es kommt die Fehlermeldung:

Das aktuelle Recordset unterstützt keine Aktualisieren. Hierbei handelt es sich möglicherweise um eine Einschränkung seitens des Providers oder des gewählten LockTypes.

Hier ist noch mal das entscheidende Codestück:

'schreibt sie in die Oracledatenbank

Dim varText As String

Dim Numblocks As Integer

For i = 1 To Len(source)

varText = Mid(source, i, BlockSize)

i = i + BlockSize - 1

rs.Fields("BLOBfld").AppendChunk varText

Next i

rs.update

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.