Veröffentlicht 1. September 200322 j 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...
1. September 200322 j 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
1. September 200322 j 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
2. September 200322 j ... 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.
2. September 200322 j 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...
3. September 200322 j ... 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.
3. September 200322 j 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...
3. September 200322 j 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
3. September 200322 j 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.