Zum Inhalt springen

Access Daten in Oracle DB updaten


JanGoXX

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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