PDA

Vollständige Version anzeigen : Excel 2003 - Daten in Sybase Datenbank einfügen


KASIC
02.03.2010, 09:10
Hallo zusammen,

ich hab eine Arbeitsmappe mit der per Button es möglich ist, einen Datenblock (sagen wir mal 10 - 100 Zeilen) in eine Sybase Datenbank zu schreiben. Leider passiert das mit dem Einfügen in die Sybase Datenbank pro einzelnen Datensatz (also eine Excel Zeile). Das kann bei 100 Datensätzen schon gut lang dauern. Ich würde nun gern wissen ob es möglich ist, ein Array an eine Datenbank zu übergeben, also einen ganzen Block (100 Zeilen) auf einen Schlag in die Datenbank zu schreiben??? KASIC

KASIC
04.03.2010, 08:42
Hat hierzu keiner Erfahrung? Mir würde es schon helfen wenn man allgemein sowas könnte, das man einen ganzen Block auf einmal in eine "Datenbank" schreibt.

chris-kaiser
08.03.2010, 12:39
Hallo

ich kenne mich ein wenig mit Arrays in Excel aus, aber ich kenne diese
Sybase Datenbank
nicht.

Wie sieht den dein Code im Moment aus?
der Zeile für Zeile einliest

Villeicht könnte ja dann wer der Code umbauen.

KASIC
08.03.2010, 15:35
For nRow = nStartRow To nStopRow
sSQL = sSQL & "INSERT INTO dit_tab_allocation_log (trade_no,revision,line_no,tradedate,loguser,acct_no,logdatetime," & _
sFields & ") VALUES (" & nTradeNo & ", " & nRevision & "," & (nRow + 1) - nStartRow & ", '" & xlWs.Range("B7") & "', '" & _
sUser & "', " & xlWs.Cells(nRow, 3) & ", '" & Date & "', "
For i = 2 To 100
If xlWss.Cells(i, 3) = "" Then Exit For
Select Case True
Case xlWs.Cells(nRow, xlWss.Cells(i, 3)) = ""
sSQL = sSQL & "NULL, "
Case xlWss.Cells(i, 4) = "N"
sSQL = sSQL & xlWs.Cells(nRow, xlWss.Cells(i, 3)) & ", "
Case xlWss.Cells(i, 4) = "D"
sSQL = sSQL & Format(xlWs.Cells(nRow, xlWss.Cells(i, 3)), "#.00") & ", "
Case Else
sSQL = sSQL & "'" & xlWs.Cells(nRow, xlWss.Cells(i, 3)) & "', "
End Select
Next i
sSQL = Left(sSQL, Len(sSQL) - 2) & ")"


db.Execute sSQL

Next nRow


db.Close

so schaut der Code aus

chris-kaiser
10.03.2010, 10:40
Hi

für was ist diese innere Schleife gut?
ich vermute mal, in Spalte 4 steht ein Kürzel für die Formatierung der Zelle in Spalte 3
nur warum läuft das ganze 200 mal durch?
reicht es nicht die gerade aktuelle Zeile abzufragen
der String wächst da ja mit jeder Zeile zum Quadrat an.

und xlWs.Cells(nRow, xlWss.Cells(i, 3)) = ""

steht in xlWss.Cells(i, 3) ein Bezug zu einer Spalte drinnen?

KASIC
10.03.2010, 12:41
Der Quellcode ist von einem externen Programmierer vor meiner Zeit geschrieben worden, was die Idee des ganzen ist, weiß ich leider nicht.

zu Tabelle xlWss:
In Spalte D steht drin (D für Decimal und C für Char).
In Spalte C wird die Spalte genannt, welche zurück zu schreiben ist in die Datenbank.

zu Tabelle xlWs:
Diese Tabelle enthält die Spalten die zurück zu schreiben sind.
Beispiel: xlWss.Cells(i, 3)

chris-kaiser
10.03.2010, 13:57
hi

es wird nach D und N gesucht bzw. zuvor ob in cells(i,3) überhaupt was steht und ob in
xlWs.Cells(nRow, xlWss.Cells(i, 3)) nichts drinnen ist

aber warum gerade das 99 mal durchgemacht werden sollte pro Zeile?
wird diese DB transponiert übergeben?
es wird schon irgenwelche Gründe geben, nur blicke ich da nicht durch, sry.

KASIC
10.03.2010, 15:58
ich hab es rausgefunden:
Einfach die beiden Zeilen vertauschen

anstatt:
db.Execute sSQL

Next nRow

ändern in :

Next nRow
db.Execute sSQL



Trotzdem vielen Dank für die Hilfe

chris-kaiser
10.03.2010, 16:04
Hi

^^
dann wird gleich alles übernommen
das macht Sinn

aber ich würde das 100 noch erstetzen durch die wirkliche Anzahl an Zeilen

mit xlWss.Cells(rows.count, 3).end(xlup).row

falls mal mehr als 100 Zeilen sein sollten