orausdo
Goto Top

Meldung 7347, Ebene 16, Status 1, Zeile 1

Hallo Admins,

ich bräuchte mal dringend Eure Hilfe.

Beim Zugriff auf eine Cache DB bekomme ich immer folgenden Fehler:

Meldung 7347, Ebene 16, Status 1, Zeile 1
Der OLE DB-Anbieter 'MSDASQL' für den Verbindungsserver 'XYZ' hat Daten zurückgegeben, die nicht der erwarteten Datenlänge für die [XYZ]..[Schema].[Tabellenname].AuftragsUhrzeit-Spalte entsprechen. Die (maximale) erwartete Datenlänge beträgt 5, die zurückgegebene Datenlänge dagegen 8.

Hab auch schon versucht das Feld zu casten oder zu converten... Bringt aber leider nichts. Immer der gleiche Fehler.

Kann mir bitte einer einen Tipp geben, wie ich diesen Fehler unterbinden kann?

Vielen vielen Dank für Eure Hilfe.

Gruss OR aus DO

Infos: SQL Server 2012, Intersystems Cache' DB

Content-ID: 243363

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

Ausgedruckt am: 26.11.2024 um 06:11 Uhr

MadMax
MadMax 11.07.2014 um 13:25:37 Uhr
Goto Top
Hallo OR aus DO,

welchen Datentyp hat denn AuftragsUhrzeit und welchen Datentyp hat das, was Du importierst? Wenn Du nicht weißt, was vom Import kommt, dann änder mal den Datentyp von AuftragsUhrzeit in varchar (50) und prüfe, was da ankommt. Cast oder convert ist mit Sicherheit der richtige Weg, aber da muß man auch wissen, was reinkommt und wie es hinterher aussehen soll. Wie hast Du denn cast/convert verwendet?

Gruß, Mad Max
orausdo
orausdo 11.07.2014 um 14:32:27 Uhr
Goto Top
Moin Mad Max,

der Datentyp der Quelle ist Text. Es handelt sich um eine Cache' DB.
Wo soll ich den Datentyp denn ändern? In der Quelle geht es nicht.
Beim Select schreibe ich ja noch nichts weg sondern lasse es nur anzeigen.
Habe auch schon den Wert gecastet. Aber das Statement schmeisst immer den selben Fehler raus.

Mache ich die Abfrage in Access ist das ganze kein Thema, Zieht er so durch. Aber die Abfrage mit dem Verbinungsserver ist echt übel.
Ach, Openquery habe ich auch schon angetestet.

Hast Du noch eine andere Lösung?

Danke Dir schon mal für Deine Hilfe.

Gruss O
orausdo
orausdo 16.07.2014 um 15:57:12 Uhr
Goto Top
Leider scheint sich keiner mit dieser Intersystems DB und die Connection via Linked Server auszukennen... face-sad
Biber
Biber 16.07.2014 aktualisiert um 17:14:02 Uhr
Goto Top
Moin Dortmunder,

es steht doch noch die Antwort auf MadMax' Rückfrage aus aus: wie sah denn dein CONVERT/CAST-Versuch aus?
Bzw. wie sieht dein Statement aus?

Wenn der Fehler auch geworfen wird, wenn das TEXT?/STRING?-Feld "AuftragsUhrzeit" gar nicht in der Liste der selektierten Felder enthalten ist, dann gibt es IMHO nur 3 Erklärungen:

- im Statement selbst ist ein Komma vor dem FROM zuviel (Wahrscheinlichkeit 86%)
- der Datentyp sollte statt TEXT auf String geändert werden ("TEXT" ist für Cache-DB indizierter/searchable Text=in etwa so etwas wie Access-Datentyp MEMO)
- der verwendete Treiber hat wirklich einen Bug.

Grüße
Biber
orausdo
orausdo 16.07.2014 um 20:37:09 Uhr
Goto Top
Moin Biber.

Dank für Deine Antwort. Sorry, dachte das wäre schon so rübergekommen das ich cast/convert schon mit einigen Datentypen getestet habe. Das Statement hat syntaktisch keinen Fehler. Da ist auch kein Komma. Dein Hinweis mit dem Typ Memo in accdb hört sich interessant an. Gibt's dazu nen passenden Dt in Sql? Zum Tip mit dem Treiber müsste ich mal bei Intersystems nachfragen. Sind allerdings nicht sehr gesprächig. Genaues Sql Statement kann ich morgen mal reineinsetzen. Ich danke Dir/Euch für die Hilfe.

Gruss O aus DO
orausdo
orausdo 23.07.2014 um 13:52:12 Uhr
Goto Top
Problem gelöst.

Für alle die mal einen Linked Server auf eine Cache' DB erstellen müssen.

Das Problem mit den Datenlängen liegt daran, dass die Cache' DB StingCollated organisiert ist.
Das hat zur Folge, dass auch wenn der Datentyp nur bsp. 25 Zeichen aufnehmen sollte man auch ohne Probleme 30 oder 1000 Zeichen reinschreiben kann.
Wenn der MS SQL Server nun versucht, einen Wert einer Spalte mit max 25 Zeichen abzufragen, in der Spalte aber tatsächlich 35 Zeichen gespeichert sind,
dann läuft er auf einen Fehler. SQL Server ist da ziemlich restriktiv im Gegensatz zu Access.
Um eine Verbindung zu einer Cache' DB via ODBC auzubauen benötig man sog. SQL Klassen auf diese die ODBC Verbindung dann verweist.
Ist in dieser Klasse die Datenlänge nicht so eingestellt, wie auch real Zeichen gespeichert sind kommt es zu einem Fehler.
Abhilfe bringt es, in der SQL Klasse die Datenlänge so weit anzupassen, dass alle gespeicherten Daten abgerufen werden können.

Für Rückfragen stehe ich gern zur Verfügung.

Danke an Alle die sich Gedanken gemacht haben und versucht haben mir zu helfen.

Grüsse aus Dortmund.