JanGoXX Geschrieben 1. September 2003 Teilen Geschrieben 1. September 2003 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
AxlHammer Geschrieben 1. September 2003 Teilen Geschrieben 1. September 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Peregrin Geschrieben 1. September 2003 Teilen Geschrieben 1. September 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
JanGoXX Geschrieben 2. September 2003 Autor Teilen Geschrieben 2. September 2003 ... 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Peregrin Geschrieben 2. September 2003 Teilen Geschrieben 2. September 2003 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
JanGoXX Geschrieben 3. September 2003 Autor Teilen Geschrieben 3. September 2003 ... 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Peregrin Geschrieben 3. September 2003 Teilen Geschrieben 3. September 2003 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
JanGoXX Geschrieben 3. September 2003 Autor Teilen Geschrieben 3. September 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
JanGoXX Geschrieben 3. September 2003 Autor Teilen Geschrieben 3. September 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.