Zum Inhalt springen

Access Daten in Oracle DB updaten


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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