![]() |
Access-Memofeld mit ASP.NET auslesen
Hi zusammen
Delphi-Quellcode:
Mit dieser Zeile lese ich in einem DataSet ein Feld aus, das aus einer Access-Datenbank stammt und da als Memo deklariert ist. Dazu verwende ich die Bdp-Komponenten.
ZellText := cRow[cCol.Ordinal].ToString;
In der Datenbank habe ich mittlerweile die Unicode-Kompression für dieses Feld abgeschaltet. Trotzdem erhalte ich bei einem Probelauf die Testausgabe "System.Char[]" anstelle des tatsächlichen Textes. Andere Felder, die in der Datenbank als "Text" deklariert sind, werden korrekt ausgegeben. Würde mich riesig freuen, wenn mir jemand einen guten Typ geben könnte. Ach ja - dieses Feld in Access als Text zu deklarieren, ist leider nicht möglich, da die enthaltenen Texte unterschiedlich gross sein können und die Aceess-Vorgaben für den Datentyp "Text" sprengen würden. Gruss Delbor |
Re: Access-Memofeld mit ASP.NET auslesen
Was stört dich denn daran, wenn du ein Char[] zurückbekommst :gruebel: ?
|
Re: Access-Memofeld mit ASP.NET auslesen
Hi Khabarakh
Zitat:
Gruss Delbor |
Re: Access-Memofeld mit ASP.NET auslesen
Zitat:
|
Re: Access-Memofeld mit ASP.NET auslesen
Zitat:
Was sagt Reflector dazu ob System.Array ToString überschreibt? Nix? Nunja er überschreibt es ja auch nicht. Ein Char array ist kein wirklicher Typ, eher etwas compiler magic kombiniert mit der speziellen Behandlung von typisierten Arays in der CLR. Er kann ToString also auch nicht überschreiben. ;) Was stellt eine ListBox dar wenn du ihr keinen DisplayMember gibst oder der DisplayMember selbst kein primitiver Typ ist? Richtig, ToString. Was passiert also wenn du eine Liste von Char arrays an eine ListBox hängst? Richtig:
Code:
Der Wert des Items in der DataRow ist ein Char Array, aber ein Char Array ist nur ein Array und wird seine Chars nicht als String ausgeben wenn man ToString auf ihn ausführt.
System.Char[]
System.Char[] System.Char[] System.Char[] System.Char[] System.Char[] System.Char[] System.Char[] System.Char[] System.Char[] System.Char[] System.Char[] Einen String würdest du zum Beispiel so bekommen:
Code:
Das sind übrigens absolute Basics in .Net. ;)
x := String.Create(deinWert as array of Char);
|
Re: Access-Memofeld mit ASP.NET auslesen
Hi zusammen
@Khabarakh Meine Deklaration:
Delphi-Quellcode:
@Elvis:
cRow:DataRow; cCol:DataColumn;
Danke für deine ausführliche Antwort! Der Gedanke an eine Konvertierung ist mir auch schon gekommen, nur... Zitat:
Jetzt irritiert mich aber die Tatsache, dass ein als "Text" in Access deklariertes Feld korrekt ausgegeben wird... Gruss Delbor |
Re: Access-Memofeld mit ASP.NET auslesen
Hi zusammen
Hmmm.... 2 Versionen der Prozedur, dasselbe Ergebnis:
Delphi-Quellcode:
Contra
procedure TWebForm1.Page_Load(sender: System.Object; e: System.EventArgs);
var Tabelle : System.Data.DataTable; i: integer; StriBu: StringBuilder; Zeile: TableRow; Zelle : TableCell; TZ,j: Integer; cRow:DataRow; cCol:DataColumn; CreateDate,ZellShow,ZellText,ZellInhalt,HeVa :System.String; begin BdpDataAdapter1.Active:=True; BdpDataAdapter1.Fill(Dataset1); Tabelle := Dataset1.Tables[0]; For j := 0 to Tabelle.Rows.Count-1 do begin cRow := Tabelle.Rows[j]; For i := 0 to Tabelle.Columns.Count-1 do begin cCol := Tabelle.Columns[i]; if cCol.ColumnName='Content_ID' then ZellInhalt := cRow[i].ToString; if cCol.ColumnName='Text' then begin HeVa := cRow[i].ToString; StriBu := Stringbuilder.Create(cRow[i].ToString); ZellText := StriBu.Append(HeVa).ToString; end; if cCol.ColumnName='Visible' then ZellShow := cRow[i].ToString; if cCol.ColumnName='Edit_Date' then CreateDate := cRow[cCol.Ordinal].ToString; Label1.Text := CreateDate; Label2.Text:= ZellShow; Label3.Text := Zelltext; Label4.Text := ZellInhalt; Listbox1.Items.Add(cCol.ColumnName.ToString + ' = '+ cRow[cCol.Ordinal].ToString); end; end;
Delphi-Quellcode:
Zur Erinnerung:
procedure TWebForm1.Page_Load(sender: System.Object; e: System.EventArgs);
var Tabelle : System.Data.DataTable; i: integer; StriBu: StringBuilder; Zeile: TableRow; Zelle : TableCell; TZ,j: Integer; cRow:DataRow; cCol:DataColumn; CreateDate,ZellShow,ZellText,ZellInhalt:System.String; begin BdpDataAdapter1.Active:=True; BdpDataAdapter1.Fill(Dataset1); Tabelle := Dataset1.Tables[0]; For j := 0 to Tabelle.Rows.Count-1 do begin cRow := Tabelle.Rows[j]; For i := 0 to Tabelle.Columns.Count-1 do begin cCol := Tabelle.Columns[i]; if cCol.ColumnName='Content_ID' then ZellInhalt := cRow[i].ToString; if cCol.ColumnName='Text' then ZellText := cRow[i].ToString; if cCol.ColumnName='Visible' then ZellShow := cRow[i].ToString; if cCol.ColumnName='Edit_Date' then CreateDate := cRow[cCol.Ordinal].ToString; Label1.Text := CreateDate; Label2.Text:= ZellShow; Label3.Text := Zelltext; Label4.Text := ZellInhalt; Listbox1.Items.Add(cCol.ColumnName.ToString + ' = '+ ZellText); end; end; BdpDataAdapter1.Active:=False; Zitat:
Zitat:
Das Problem ist also weiterhin ungelöst. Gruss Delbor |
Re: Access-Memofeld mit ASP.NET auslesen
Zitat:
Hast du schon Elvis' Vorschlag ausprobiert?
Delphi-Quellcode:
ZellText := String.Create(cRow[cCol.Ordinal] as array of string);
|
Re: Access-Memofeld mit ASP.NET auslesen
Hi zusammen
Zitat:
Die Delphi-Hilfe ist ganz klar besser als unter Dephi2005, wenn auch durch 'F1' nichts gefunden werden kann, doch manuelles Handling schafft da interessante Abhilfe: Zitat aus der .net-Framework SDK: Zitat:
Gruss Delbor |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 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