Feldmengen-Begrenzung bei der Datenübergabe nach SQL
Hallo,
wir arbeiten bei uns schon seit längerer Zeit mit einem eigens entwickelten Java-Programm (Sun).
Das Programm hat folgende Funktion:
- Wir lesen damit Dateien von unseren Prüfgeräten aus.
- Während dem Einlesen vergleichen wir diese mit den Datenbeständen (MS-SQL Datenbank).
- Nach Abgleich mit der SQL-DB werden die Datensätze in einer Tabelle am Bildschirm angezeigt.
- Die angezeigten Datensätze können bedingt manipuliert werden
um danach in die SQL-DB übertragen zu werden.
- Nach der Übertragung werden die Daten von einem in C geschriebenen Programm weiterverarbeitet.
Java-Bildschirmmaske:
Die angezeigten Datenfelder überschreiten zwischenzeitlich mehr als 220 Felder.
Anm.: Die Bildschirmmaske bzw. Tabelle ist dyn. aufgebaut.
Problem:
Sowie mehr als 220 Felder vorhanden sind funktioniert die Übertragung nicht mehr.
Problemlösung:
Wie können wir sicher stellen, dass zukünftig auch mehr als die begrenzte Feldanzahl
übertragen wird?
Es geht nicht um ein paar mehr - es können in der Zukunft schon so annähernd 1.000 Felder werden!
Und es geht auch nicht darum die Daten gesplittet einzulesen (also Blocks mit weniger als 220).
Es geht uns vielmehr darum, dass ohne erneutes zutun, alle Felder von 10 bis 1.000 in einem rutsch
übertragen werden. Die Betonung liegt auf ohne weiteres zutun des Anwenders!!
Über Tipps und Anregungen würden wir uns freuen
mit freundlichen Grüssen
Achim und Niko
(die verzweifelten Programmierer)
wir arbeiten bei uns schon seit längerer Zeit mit einem eigens entwickelten Java-Programm (Sun).
Das Programm hat folgende Funktion:
- Wir lesen damit Dateien von unseren Prüfgeräten aus.
- Während dem Einlesen vergleichen wir diese mit den Datenbeständen (MS-SQL Datenbank).
- Nach Abgleich mit der SQL-DB werden die Datensätze in einer Tabelle am Bildschirm angezeigt.
- Die angezeigten Datensätze können bedingt manipuliert werden
um danach in die SQL-DB übertragen zu werden.
- Nach der Übertragung werden die Daten von einem in C geschriebenen Programm weiterverarbeitet.
Java-Bildschirmmaske:
Die angezeigten Datenfelder überschreiten zwischenzeitlich mehr als 220 Felder.
Anm.: Die Bildschirmmaske bzw. Tabelle ist dyn. aufgebaut.
Problem:
Sowie mehr als 220 Felder vorhanden sind funktioniert die Übertragung nicht mehr.
Problemlösung:
Wie können wir sicher stellen, dass zukünftig auch mehr als die begrenzte Feldanzahl
übertragen wird?
Es geht nicht um ein paar mehr - es können in der Zukunft schon so annähernd 1.000 Felder werden!
Und es geht auch nicht darum die Daten gesplittet einzulesen (also Blocks mit weniger als 220).
Es geht uns vielmehr darum, dass ohne erneutes zutun, alle Felder von 10 bis 1.000 in einem rutsch
übertragen werden. Die Betonung liegt auf ohne weiteres zutun des Anwenders!!
Über Tipps und Anregungen würden wir uns freuen
mit freundlichen Grüssen
Achim und Niko
(die verzweifelten Programmierer)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 49751
Url: https://administrator.de/contentid/49751
Ausgedruckt am: 22.11.2024 um 06:11 Uhr
6 Kommentare
Neuester Kommentar
Endlich mal eine lange Beschreibung und auch in fehlerfreiem Deutsch. Sieht man ja ansonsten eher selten
Aber die genaue Fehlerbeschreibung ist trotzdem etwas kurz.
<... funktioniert die Übertragung nicht mehr> bedeutet was?
Werden nur die ersten Felder übertragen, der Rest nicht, gibts Fehlermeldungen (und wenn ja, welche) etc?
Welche SQL Server Version, welche JDBC Version?
Kommt man über die Begrenzungen des SQL Servers? (Bei SQL 2000: 1024 Spalten und was wichtiger ist: Maximale Zeilenlänge: 8060 Bytes).
Dabei ist es nämlich möglich mit varchar 1000 Spalten mit jeweils max. 200 Zeichen zu erstellen, nur beim Einfügen der Werte gibts Fehler, falls es mehr als 8060 Bytes werden.
Aber die genaue Fehlerbeschreibung ist trotzdem etwas kurz.
<... funktioniert die Übertragung nicht mehr> bedeutet was?
Werden nur die ersten Felder übertragen, der Rest nicht, gibts Fehlermeldungen (und wenn ja, welche) etc?
Welche SQL Server Version, welche JDBC Version?
Kommt man über die Begrenzungen des SQL Servers? (Bei SQL 2000: 1024 Spalten und was wichtiger ist: Maximale Zeilenlänge: 8060 Bytes).
Dabei ist es nämlich möglich mit varchar 1000 Spalten mit jeweils max. 200 Zeichen zu erstellen, nur beim Einfügen der Werte gibts Fehler, falls es mehr als 8060 Bytes werden.
Ich bräuchte es etwas spezifischer mit dem Fehler. Der blaue Balken ist ja nicht sehr aussagekräftig. Und das mit dem Deutsch war ein Lob und keine Kritik. Viele verzichten ja komplett auf Groß und Kleinschreibung und Satzzeichen und hier war es sogar schön aufgebaut mit unterstrichenen Überschriften etc.
Habt Ihr das programmiert?
Wenn ja, könnte man den Fehler mit try / catch abfangen und einen Stack Trace ausgeben?
Oder gibts irgendein Log, wo mehr drinsteht?
Oder wie groß sind denn die einzelnen Spalten? Kommen wir eventuell bei mehr als 220 Spalten in den Bereich der 8060 Bytes maximal pro Zeile?
Ohne richtige Fehlermeldung bleibt das halt ein Gestochere im Nebel.
Habt Ihr das programmiert?
Wenn ja, könnte man den Fehler mit try / catch abfangen und einen Stack Trace ausgeben?
Oder gibts irgendein Log, wo mehr drinsteht?
Oder wie groß sind denn die einzelnen Spalten? Kommen wir eventuell bei mehr als 220 Spalten in den Bereich der 8060 Bytes maximal pro Zeile?
Ohne richtige Fehlermeldung bleibt das halt ein Gestochere im Nebel.
Oder gibts irgendein Log, wo mehr drinsteht? ES WIRD KEINE FEHLERMELDUNG AUSGEGEBEN
Hmmm...Das glaube ich erstmal so nicht. ;) Nimm das Problem-Statement und gib es mal direkt auf der SQL-Konsole ein. Vielleicht ist der MS-SQL-Server geschwätziger als der Treiber.
Bei den meisten JDBC-Treibern kann man im Verbindungstring noch ein extra Logging einschalten. Bei MS-SQL habe ich es nicht im Kopf, aber prinzipiell sollte da etwas in der Richtung möglich sein.
Wenn ihr einen OR-Mapper/Persistenzlayer dazwischen habt, ggf. mal da nachhaken/debugen. Habe da schon einige böse Fouls erlebt.
Es geht nicht um ein paar mehr - es können in der Zukunft schon so annähernd 1.000 Felder werden!
Oha...1000+ Spalten breite Tabelle sind aber hart am Wind gesegelt. Bei 1024 ist nämlich Schicht im Schacht(IMO).
Gruss
Alfredus