Zitat von
Alexander:
Zitat:
Da kennt wohl einer Reflector noch nicht?
Ehrlich gesagt, nicht wirklich. Bei der geringen Zeit, die ich momentan habe
.
Reflector spart Zeit, damit kannst du durch deine und fremde Binaries surfen wie ein einem Browser.
Zitat:
(Hast du dir dein Wissen eigentlich selbst beigebracht? )
Steht ja genug im Internet, und ich habe einen gesunden (kranken?) Spieltrieb.
Zitat:
Leider ja auch nicht. Hatte ich ja schon versucht. Der
SQL-String wird komplett richtig ausgelesen. Auch die Komponente hat den eigentlich den richtigen String bekommen. Nur irgendetwas scheint zu stören und es kommt zum Fehler.
Kann es sein, dass Jet zu blöd ist um einen einzelnen line feed (#10) als Zeilenumbruch/Whitespace anzusehen?
Denn bei einem Zeilenumbruch geht definitiv der Cr (#13) flöten, wenn man nicht explizit über einen XmlReader deserialisiert...
Hier mal zur Anschauung
Delphi-Quellcode:
type
SampleClass = public class
public
property CDataString : CData;
end;
class method ConsoleApp.Main;
const fileName = 'data.xml';
const sampleString = 'SELECT A, B'#13#10
'FROM C';
method ShowWhiteSpaces(value : String);
begin
Console.WriteLine(value.Replace(#32, '[Space]')
.Replace(#9, '[Tab]')
.Replace(#13#10, '[CrLf]')
.Replace(#13, '[Cr]')
.Replace(#10, '[Lf]'));
end;
begin
var serializer := new XmlSerializer(typeof(SampleClass));
if not File.Exists(fileName) then
using stream := new FileStream(fileName, FileMode.Create) do
using writer := new XmlTextWriter(stream, Encoding.UTF8) do
begin
serializer.Serialize(writer, new SampleClass(CDataString := sampleString));
end;
// mit reader
using stream := new FileStream(fileName, FileMode.Open) do
using reader := new XmlTextReader(stream) do
with s := serializer.Deserialize(reader) as SampleClass do
ShowWhiteSpaces(s.CDataString);
// ohne reader
using stream := new FileStream(fileName, FileMode.Open) do
with s := serializer.Deserialize(stream) as SampleClass do
ShowWhiteSpaces(s.CDataString);
Console.ReadLine();
end;
Interessant ist was dabei rauskommt:
Output
SELECT[Space]A,[Space]B[CrLf]FROM[Space][Space][Space]C
SELECT[Space]A,[Space]B[Lf]FROM[Space][Space][Space]C
Wie du siehst verhält sich der Overload von DeSerialize, der einen Stream schluckt, nicht wie es ein XmlReader per default macht.