Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Prism VB.NET zu Delphi.NET Problem (https://www.delphipraxis.net/42353-vbulletin-net-zu-delphi-net-problem.html)

vsti 17. Mär 2005 16:57

Datenbank: Interbase • Version: 6 • Zugriff über: Borland Data Provider

VB.NET zu Delphi.NET Problem
 
Moin,

auf der Microsoft Support Seite habe ich folgenden Code für Visual Basic .NET zum Thema
"How To Read and Write BLOB Data by Using ADO.NET with Visual Basic .NET"
gefunden.


Code:
...
Dim myRow As DataRow
myRow = ds.Tables("MyImages").Rows(0)

Dim MyData() As Byte
MyData = myRow("imgField")
Dim K As Long
K = UBound(MyData)

Dim fs As New FileStream _
("C:\winnt\Gone Fishing2.BMP", FileMode.OpenOrCreate, _
FileAccess.Write)
fs.Write(MyData, 0, K)
fs.Close()
Jetzt habe ich diesen folgendermaßen nach Delphi .NET übersetzt

Delphi-Quellcode:
var
  MyData: array of Byte;
  fs: FileStream;
  myRow: DataRow;
  K: LongInt;
begin
  myRow := ds.Tables['MyTables'].Rows[0];

  MyData := myRow['imgField']; //<-- hier sagt er 'Inkompatible Typen' !!?
  K := length(MyData);
  fs := FileStream.Create('C:\winnt\Gone Fishing2.BMP', FileMode.OpenOrCreate, FileAccess.Write);
  fs.write(MyData, 0, K);
  fs.close;
end;
Jetzt hab ich nurnoch die Daten etwas angepasst, weil ich natürlich eine andere Tabelle verwende. Aber das Prinzip ist das selbe.

In der Zeile in der die Daten auf MyData zugewiesen werden sollen gibt er die o.g. Meldung aus, dass die Typen inkompatibel seien.

Was habe ich hier verkert gemacht?

vsti 18. Mär 2005 14:35

Re: VB.NET zu Delphi.NET Problem
 
sorry, *push*

Phoenix 18. Mär 2005 15:06

Re: VB.NET zu Delphi.NET Problem
 
Guck Dir dazu lieber diesen Beitrag im MSDN mal an : klick.

Ist der gleiche Artikel, nur für C#. VB.NET hat einige Probleme im Bereich sauberer Programmierung. Wenn Du den C# - Code als Quelle nimmst, siehst Du deutlichst besser was da gemacht wird und wie das nach Delphi zu übersetzen ist.

vsti 18. Mär 2005 15:20

Re: VB.NET zu Delphi.NET Problem
 
Zu Anfang hatte ich auch den C# Code als Vorlage. Stieß aber auf das gleiche Prblem. Daher hab ich mir gedacht, schau ich mir das für VB an, da man das evtl. besser versteht. Nunja, auf jeden Fall stoße ich bei beiden Codes auf das selbe Problem. :?

Robert_G 18. Mär 2005 15:25

Re: VB.NET zu Delphi.NET Problem
 
Du versuchst doch auch ein Object in einen array of byte zu boxen!
Wie soll denn das eine typensichere Sprache akzeptieren können? :gruebel:

Generalissimo 18. Mär 2005 15:27

Re: VB.NET zu Delphi.NET Problem
 
Irgendwie kommt mir die Fragestellung bekannt vor.

Kann es sein, das diese hier jemand schon einmal gestellt hat?

Alter Beitrag

Was hindert dich daran das VB.NET Beispiel direkt zu übernehmen und in eine Assembly (Klassenbibliothek) auszulagern und diese dann nur einzubinden? Damit entfällt die Aufgabe der Portierung.

vsti 18. Mär 2005 15:35

Re: VB.NET zu Delphi.NET Problem
 
@Generalissimo
Der Beitrag war auch von mir :)
Ich wollte die Frage nur nochmal auf eine andere Weise stellen, da ich bei der Assembly Geschichte nicht ganz durchgestiegen bin, bzw. ich die C# Unit nicht kompiliert bekommen habe.

@Robert_G
das habe ich mir ausch schon überlegt, aber im Beispiel für C# und VB gings wohl auch irgendwie :?

Robert_G 18. Mär 2005 15:40

Re: VB.NET zu Delphi.NET Problem
 
Zitat:

Zitat von vsti
@Robert_G
das habe ich mir ausch schon überlegt, aber im Beispiel für C# und VB gings wohl auch irgendwie :?

Stimmt doch gar nicht!
Zitat:

Code:
MyData = (byte[])myRow["imgField"];

Das sieht mir wie ein cast auf byte[] aus.

btw: Auch als Delphi.Net Entwickler sollte man C# lesen und schreiben können. ;)

vsti 18. Mär 2005 15:48

Re: VB.NET zu Delphi.NET Problem
 
Leider kann ich kein C#.NET, das kann doch keine Voraussetzung sein... bin froh das jetzt Delphi.NET langsam flüssiger geht :)

Ok, bei C# ist es ein Cast, bei VB gings aber ohne...

Aber mal angenommen ich wolle das auf Delphi.NET umsetzten, so

Delphi-Quellcode:
MyData := myRow['imgField'] as byte oder bytes oder byte() oder array of byte;
gehts nicht. Ich hab mir da schon die wildesten Sachen aus den Fingern gesogen, bin aber zu keinem Ergebnis gekommen. Nen Tipp?

Robert_G 18. Mär 2005 16:07

Re: VB.NET zu Delphi.NET Problem
 
Zitat:

Zitat von vsti
Leider kann ich kein C#.NET, das kann doch keine Voraussetzung sein...

Doch ist es, ob's dir gefällt oder nciht. ;) Von den 0,000001% Delphi.Net Entwicklern im .Net Zoo wirst du wohl auch nur 0,00001% aller Code beispiele finden können. :mrgreen:

Zitat:

Zitat von vsti
Delphi-Quellcode:
MyData := myRow['imgField'] as byte oder bytes oder byte() oder array of byte;

Das kann doch auch nicht gehen.
Genau wie in Delphi32 ist der Delphi.Net Compilier einfach nicht in der lage zu kapieren, dass [array of WasWeißIch] == [array of WasWeißIch] ist.
Du musst also diese Arbeit für den Compiler machen und so einen ollen Hilfstyp deklarieren:
Delphi-Quellcode:
type TMyByteArrayType = array of byte;
var
  MyData :TMyByteArrayType;
begin
  MyData := myRow['dcoiqwd'] as TMyByteArrayType;
end;

vsti 18. Mär 2005 16:11

Re: VB.NET zu Delphi.NET Problem
 
Wie du siehst hab ich selbst beim normalen Delphi noch nicht alles inne...

Da kann man mal sehen, was die Chefs so alles von Azubis im ersten Lehrjahr erwarten... :roll:

Werd ich testen, ich hoffe es funzt, danke für die Unterstützung.

Generalissimo 18. Mär 2005 16:38

Re: VB.NET zu Delphi.NET Problem
 
Würde dir trotzdem raten nebenbei auch C# und VB.NET dir anzuschauen.

Als Beispiel sei hier COM und die späte Bindung mit VB.NET genannt.

vsti 21. Mär 2005 10:13

Re: VB.NET zu Delphi.NET Problem
 
Klasse, es funktioniert :)

Jetzt muss ich das selbe noch für CLOBs machen, aber das kann ja jatzt nicht mehr so schwer sein.

Thx guys!


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:39 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 by Thomas Breitkreuz