protec-lejo
Goto Top

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)

Content-ID: 49751

Url: https://administrator.de/contentid/49751

Ausgedruckt am: 22.11.2024 um 06:11 Uhr

AndreasHoster
AndreasHoster 29.01.2007 um 09:51:42 Uhr
Goto Top
Endlich mal eine lange Beschreibung und auch in fehlerfreiem Deutsch. Sieht man ja ansonsten eher selten face-wink

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.
ProTec-Lejo
ProTec-Lejo 29.01.2007 um 14:06:59 Uhr
Goto Top
Hallo Andreas,

ja, ja, das mit dem fehlerfreiem Deutsch ... und es wird immer wieder gern die Ausrede "... neue deutsche Rechtschreibung" genommen.

Fehlerbeschreibungsergänzung:
Sowie die Feldanzahl von 220 überschritten wird funktioniert die Übertragung generell nicht.
Übertragungsablauf:
Die Übertragung, wenn sie funktioniert, erkennt man daran, dass sich im unteren Bereich mit Fortschreitung der Datenübergabe ein blauer Balken aufbaut.
Die Übertragung, wenn sie nicht funktioniert, erkennt man daran, dass sich kein blauer Balken aufbaut und unmittelbar sich das Übertragungsfenster wieder schliesst.

Fehlermeldung:
Keine

SQL-Server:
MS SQL 2000 inkl. aller aktuellen Update´s

JDBC:
Java 2 SDK, SE v1.4.2_04

Sofern Du mit den Infos nicht klar kommst müsste ich tiefergehende Informationen vorab mit meinem Kollegen abklären da er sich wesentlich tiefer in die Materie eingearbeitet hat.

Gruss Achim
ProTec-Lejo
ProTec-Lejo 29.01.2007 um 14:50:53 Uhr
Goto Top
Antwortergänzung:

Aufgrund der zu verarbeitenden Datenmenge ist meines erachtens das Problemdie nicht im SQL- sondern eher im HTML-Bereich angesiedelt.

Gruss Achim
AndreasHoster
AndreasHoster 29.01.2007 um 15:07:45 Uhr
Goto Top
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.
ProTec-Lejo
ProTec-Lejo 31.01.2007 um 10:35:58 Uhr
Goto Top
Hallo,

ja das mit dem Deutsch und dem Lob hatte ich schon so verstanden.


Habt Ihr das programmiert? JA

Wenn ja, könnte man den Fehler mit try / catch abfangen und einen Stack Trace ausgeben?
Oder gibts irgendein Log, wo mehr drinsteht? ES WIRD KEINE FEHLERMELDUNG AUSGEGEBEN

Oder wie groß sind denn die einzelnen Spalten? ZWISCHEN 5 und 200 ZEICHEN

Kommen wir eventuell bei mehr als 220 Spalten in den Bereich der 8060 Bytes maximal pro Zeile? SPALTENGRÖSSENMÄSSIG NEIN; FELDINHALTSMÄSSIG NEIN; Anm.: Bei allen Spalten und Zeilen, sofern 220 Felder insgesamt überschritten werden kann auch die Byte-Grenze überschritten werden.

Problemlösungsansatz?
Sofern es denn an der Bytegrenze liegen sollte, wie kann ich dieses Problem so angehen, dass die Datenübergabe für den Anwender in einem Rutsch funktioniert?

Zurück zur Frage bei mehr als 220 Spalten...:
Pro Zeile werden 10 und es sollen in Zukunft 18 Spalten werden.
Die Tabelle ist so programmiert, dass mit jedem vorhandenen Datensatz eine Zeile erzeugt wird, eben dyn..

Gruss Achim
Alfredus
Alfredus 05.02.2007 um 15:28:26 Uhr
Goto Top
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