![]() |
Datenbank: Advantage • Version: 7 • Zugriff über: TDataSet, TQuery
Fehlermeldung: Data truncated
Hallo,
manche Kunden unserer Software bekommen beim Einfügen von Einträgen (die Texte und Bilder / Sounds enthalten (können)) in eine ADS-Datenbank folgende SQL-Fehlermeldung: Zitat:
Zitat:
Delphi-Quellcode:
So schaut die Tabelle aus:
function TDBModule.AddNewDatabaseItem (DBName: String; DatabaseData: TDatabaseData;
var TreeNodeData: PTreeMenuEntry): Integer; begin Result := 0; with AdsQuery, SQL do try Clear; Add ('INSERT INTO "' + DBName + ' DB" ' + ' (CategoryID, ' + ' Problem, ' + ' ProblemDescription, ' + ' Solution, ' + ' SolutionDescription, ' + ' SymbolType1, ' + ' Symbol1, ' + ' SymbolType2, ' + ' Symbol2) ' + 'VALUES (' + #39 + DelphiEscapeString (DatabaseData.CategoryID) + #39 + ', ' + ':Problem, ' + ':ProblemDescription, ' + ':Solution, ' + ':SolutionDescription, ' + inttostr (Integer (DatabaseData.SymbolType1)) + ', ' + ':Symbol1, ' + inttostr (Integer (DatabaseData.SymbolType2)) + ', ' + ':Symbol2);'); Prepare; ParamByName ('Problem').AsMemo := DatabaseData.Problem; ParamByName ('ProblemDescription').AsMemo := DatabaseData.ProblemDescription; ParamByName ('Solution').AsMemo := DatabaseData.Solution; ParamByName ('SolutionDescription').AsMemo := DatabaseData.SolutionDescription; if (DatabaseData.SymbolType1 <> stNoSymbol) then begin DatabaseData.Symbol1.Position := 0; ParamByName ('Symbol1').LoadFromStream (DatabaseData.Symbol1, ftBlob); end else ParamByName ('Symbol1').Clear; if (DatabaseData.SymbolType2 <> stNoSymbol) then begin DatabaseData.Symbol2.Position := 0; ParamByName ('Symbol2').LoadFromStream (DatabaseData.Symbol2, ftBlob); end else ParamByName ('Symbol2').Clear; ExecSQL; Result := LastAutoIncVal; Close; inc (TreeNodeData.ItemsCount); except ThrowSQLException (SQL[0]); end; end;
SQL-Code:
Die Felder der DB sind imho auch korrekt, um mit den entsprechenden Daten umgehen zu können.
/* Table Type of Data DB.adt is ADT*/
Create Table [Data DB]( ID AutoInc, CategoryID Char( 32 ), Problem Memo, ProblemDescription Memo, Solution Memo, SolutionDescription Memo, SymbolType1 Short, Symbol1 Blob, SymbolType2 Short, Symbol2 Blob ); Create Unique Index "ID" on [Data DB]( ID ); Create Index "CATEGORYID" on [Data DB]( CATEGORYID ); Problem ist, dass diese Fehlermeldung auf keiner unserer Testmaschinen bisher auftauchte. Jemand eine Idee? :gruebel: |
Re: Fehlermeldung: Data truncated
Bei welchem Feld? Versuche mal die Strings auf die richtige Länge zu stutzen.
|
Re: Fehlermeldung: Data truncated
Naja, das macht das Problem ja gerade so undurchsichtig. Es steht kein Feld da ... :wall:
Die SQL-Abfrage selber dazu schaut so aus:
SQL-Code:
Durch die Parametrisierung sieht man den Text (leider) auch nicht. Das ganze sieht aber so aus, als ob der Kunde da versucht, einen Eintrag einzufügen, welcher ein Bild als "Symbol2" enthält.
INSERT INTO "Data DB" (CategoryID, Problem, ProblemDescription, Solution, SolutionDescription, SymbolType1, Symbol1, SymbolType2, Symbol2)
VALUES ('48aa08de2a388ea2e0142456a88087af', :Problem, :ProblemDescription, :Solution, :SolutionDescription, 0, :Symbol1, 1, :Symbol2);
Delphi-Quellcode:
Das Bild hat aber 'ne max. Größe von 400x400 und wird runterskaliert, falls es diese irgendwo überschreitet.
TSymbolType = (stNoSymbol, stImage, stSound, stUnknown, stVibration);
Wie groß kann denn ein Memo-Feld sein? Da sollte es doch eigentlich nicht wirklich Einschränkungen (ausser die üblichen OS-Grenzen) geben, oder? Hab dem Kunden nochmal geschrieben, dass er mir mal soviele Infos wie möglich zukommen lassen soll. Also was für ein OS, was für ein Rechner, was für ein Text, was für ein Bild, etc. |
Re: Fehlermeldung: Data truncated
Der Fehler könnte aber auch bei den anderen Feldern ( Problem, ProblemDescription, Solution, SolutionDescription, ..) auftreten.
|
Re: Fehlermeldung: Data truncated
Ja, mal schauen, was der Kunde antwortet. Hoffentlich muss man da nicht fünfmal nachfragen und alles aus der Nase ziehen. :mrgreen:
Hab das grad hier nochmal mit der Software getestet. In alle Memo-Felder (Problem, ProblemDescription, Solution, SolutionDescription) nen 67.815 Bytes (66kB) langen Text eingefügt, zwei 1024x768 Bilder dazu (die er runterskaliert hat), klappt ohne Probleme ... :gruebel: [edit] Ich merke auch gerade beim nochmaligen betrachten, dass ich ja ne Limitierung der Textlänge in den Memo-Feldern der Software auf 65kB gesetzt hab ... Ich versteh die Welt nicht mehr ... :coder2: [/edit] |
Re: Fehlermeldung: Data truncated
grundsätzlich ist diese Fehlermeldung nur eine Warnung und wird IIRC auch nicht in jedem Fall an den Client übertragen. Oft kommt solch ein Fehler vor, wenn man nicht trimmt, also zB bei "update myfield set myfield='hallo'+myfield". Obwohl das Ergebnis korrekt aussieht (und auch korrekt ist), werden am Ende Leerzeichen abgeschnitten, daher die Meldung. Du kannst höchstens versuchen, mal mit dem Debugger an die Sache ranzugehen. Da es aber nur beim Kunden passiert, macht er irgendwas spezifisches, was Du nicht machst (das sind die liebsten Fehler - PEBCAC -> problem exists between chair and computer).
|
Re: Fehlermeldung: Data truncated
Hallo Joachim,
cool, jemand von iAnywhere selber. :cheers: Getrimmt werden die Text schon, nachdem sie den Editor für neue Einträge verlassen haben. Ich werd testweise aber mal
Delphi-Quellcode:
in
ParamByName ('Problem').AsMemo := DatabaseData.Problem;
ParamByName ('ProblemDescription').AsMemo := DatabaseData.ProblemDescription; ParamByName ('Solution').AsMemo := DatabaseData.Solution; ParamByName ('SolutionDescription').AsMemo := DatabaseData.SolutionDescription;
Delphi-Quellcode:
ändern und ihm ne Version schicken.
ParamByName ('Problem').AsMemo := Trim (DatabaseData.Problem);
ParamByName ('ProblemDescription').AsMemo := Trim (DatabaseData.ProblemDescription); ParamByName ('Solution').AsMemo := Trim (DatabaseData.Solution); ParamByName ('SolutionDescription').AsMemo := Trim (DatabaseData.SolutionDescription); Danke für den Hinweis! :) |
Re: Fehlermeldung: Data truncated
Hallo Mario,
so rein aus Erfahrung würde ich bezweifeln, daß es mit den Memo-Feldern zusammenhängt (oder sind das Char-Felder, die Du mit AsMemo ansprichst?). Übrigens kannst Du statt AsMemo auch immer AsString verwenden (nicht, daß das jetzt helfen würde). |
Re: Fehlermeldung: Data truncated
Hallo Joachim,
nein, es sind echte Memo-Felder.
SQL-Code:
Was ich auch dachte, dass es vielleicht mit dem Short und IntToStr zusammenhängt. Allerdings sind ja die Werte die da aus der Konvertierung nur kommen zwischen 0 und 4. :gruebel:
Create Table [Data DB](
ID AutoInc, CategoryID Char( 32 ), Problem Memo, <<-- ProblemDescription Memo, <<-- Solution Memo, <<-- SolutionDescription Memo, <<-- SymbolType1 Short, Symbol1 Blob, SymbolType2 Short, Symbol2 Blob ); |
Re: Fehlermeldung: Data truncated
Das Problem hat sich geklärt.
Es lag an einer alten Datenbankstruktur, die der Kunde verwendet hat. Er hatte zwar die aktuellste Version vom Programm, jedoch irgendwie noch eine alte Datenbank drunter. Dort wurde früher als "Unique-ID" eine 8-stellige Prüfsumme (CRC32 aus allen möglichen Informationen über den Eintrag + Datum/Uhrzeit inkl. ms + Zufallszahl) verwendet, um einen Knoten eindeutig zu identifizieren. Im Laufe der Zeit stellte sich jedoch herraus, dass es damit Probleme gab. Beim Import von einigen Datenmengen kam gelegentlich die SQL-Fehlermeldung, dass eine solche ID schon existiert und somit nicht "UNIQUE" ist. Fragt mich nicht warum. Wie schon gesagt ist ein Zufallswert in die Berechnung mit eingeflossen. Also hab ich ohne viel Ruß aus CRC32 MD5 gemacht und die ID in der Tabelle von 8 auf 32 Zeichen erhöht. Die Software war noch recht jung und noch nicht soviel verbreitet, da hat das nix gemacht. Der Fehler tauchte seither nicht mehr auf. Die besagte Fehlermeldung wurde also verursacht, weil er versucht hat, einen 32-stelligen Wert in ein Char-Feld zu schreiben, was nur 8 Zeichen hatte. Ergo: Data truncated. ;) Danke an alle! :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz