![]() |
DatabankObjekte von anderen ASPX-Seiten zugreifen
Hallo Allerseits..
auch wenn ich nerven sollte :???: Ich möchte zentral eine Unit/Modul für den Datenbankzugriff anlegen. Darin sollten auch DataSets usw. abgelegt werden. Nun möchte ich von verschiedenen ASPX-Seiten auf die im Unit/Modul definierten Objektvariablen zugreifen. Die Units kann ich im übrigen per USES in die ASPX-Dateien mit einbinden. Nur.. auf die Datenbankcontrols kann ich leider nicht zugreifen. Was ist zu tun, wo ist mein Fehler, wer hat Ahnung von dem doch nicht so einfachen ASP.NET -Thema unter Delphi ????? |
Re: DatabankObjekte von anderen ASPX-Seiten zugreifen
Zeig mal ein bisschen Code von Deiner Datenunit und von Deiner ASPX. Meine Glaskugel ist grad in Reparatur :zwinker:
|
Re: DatabankObjekte von anderen ASPX-Seiten zugreifen
Zunächst einmal habe ich eine ASPX-Seite erstellt mit dem typischen HelloWorld -Beispiel, was aber jetzt nicht Gegenstand der Diskussion ist. Dann habe ich ein DBWEBTextbox in den Designer geschoben.
Delphi-Quellcode:
Dann habe ich eine weitere ASPX-Datei samt dahinterliegender Unit gebaut, welches die Controls BdpConnection, BdpCommand, BdpDataAdapter, Dataset und als Kontrolle ein DBWebDataSource und DBWebGrid beinhaltet.unit WebForm_test; interface uses System.Collections, System.ComponentModel, System.Data, System.Drawing, System.Web, System.Web.SessionState, System.Web.UI, System.Web.UI.WebControls, System.Web.UI.HtmlControls, Borland.Data.Provider, Borland.Data.Web, db_modul; type TWebForm_Test = class(System.Web.UI.Page) {$REGION 'Vom Designer verwalteter Code'} strict private procedure InitializeComponent; procedure Button1_Click(sender: System.Object; e: System.EventArgs); {$ENDREGION} strict private procedure Page_Load(sender: System.Object; e: System.EventArgs); strict protected Button1: System.Web.UI.WebControls.Button; BdpConnection1: Borland.Data.Provider.BdpConnection; DBWebTextBox1: Borland.Data.Web.DBWebTextBox; procedure OnInit(e: EventArgs); override; private { Private-Deklarationen } public { Public-Deklarationen } end; implementation {$REGION 'Vom Designer verwalteter Code'} /// <summary> /// Erforderliche Methode zur Unterstützung des Designers -- /// ändern Sie die Methode nicht mit dem Quelltext-Editor /// </summary> procedure TWebForm_Test.InitializeComponent; begin Self.BdpConnection1 := Borland.Data.Provider.BdpConnection.Create; Include(Self.Button1.Click, Self.Button1_Click); // // BdpConnection1 // Self.BdpConnection1.ConnectionOptions := ''; Include(Self.Load, Self.Page_Load); end; {$ENDREGION} procedure TWebForm_Test.Page_Load(sender: System.Object; e: System.EventArgs); begin end; procedure TWebForm_Test.OnInit(e: EventArgs); begin // // Erforderlich zur Unterstützung des Designers // InitializeComponent; inherited OnInit(e); end; procedure TWebForm_Test.Button1_Click(sender: System.Object; e: System.EventArgs); begin button1.Text := button1.Text + 'Hallo Entwickler'; end; end.
Delphi-Quellcode:
Dieses Unit habe ich in meiner delphi-Logik in der WebForm_Test.ASPX im Bereich USES mit eingebundenunit DB_modul; interface uses System.Collections, System.ComponentModel, System.Data, System.Drawing, System.Web, System.Web.SessionState, System.Web.UI, System.Web.UI.WebControls, System.Web.UI.HtmlControls, Borland.Data.Common, Borland.Data.Provider, System.Globalization, Borland.Data.Web, System.Data.Common; type TWebForm1 = class(System.Web.UI.Page) {$REGION 'Vom Designer verwalteter Code'} strict private procedure InitializeComponent; {$ENDREGION} strict private procedure Page_Load(sender: System.Object; e: System.EventArgs); strict protected Bdp_Connect_Migration: Borland.Data.Provider.BdpConnection; bdpSelectCommand1: Borland.Data.Provider.BdpCommand; bdpInsertCommand1: Borland.Data.Provider.BdpCommand; bdpUpdateCommand1: Borland.Data.Provider.BdpCommand; bdpDeleteCommand1: Borland.Data.Provider.BdpCommand; BdpDataAdapter1: Borland.Data.Provider.BdpDataAdapter; dataSet_Migration: System.Data.DataSet; DBWebDataSource_Migration: Borland.Data.Web.DBWebDataSource; DataTable1: System.Data.DataTable; DataColumn1: System.Data.DataColumn; DataColumn2: System.Data.DataColumn; DBWebGrid1: Borland.Data.Web.DBWebGrid; procedure OnInit(e: EventArgs); override; private { Private-Deklarationen } public { Public-Deklarationen } end; implementation {$REGION 'Vom Designer verwalteter Code'} /// <summary> /// Erforderliche Methode zur Unterstützung des Designers -- /// ändern Sie die Methode nicht mit dem Quelltext-Editor /// </summary> procedure TWebForm1.InitializeComponent; type TArrayOfSystem_Data_Common_DataTableMapping = array of System.Data.Common.DataTableMapping; TArrayOfSystem_Data_Common_DataColumnMapping = array of System.Data.Common.DataColumnMapping; TArrayOfSystem_Data_DataTable = array of System.Data.DataTable; TArrayOfSystem_Data_DataColumn = array of System.Data.DataColumn; begin Self.Bdp_Connect_Migration := Borland.Data.Provider.BdpConnection.Create; Self.bdpSelectCommand1 := Borland.Data.Provider.BdpCommand.Create; Self.bdpInsertCommand1 := Borland.Data.Provider.BdpCommand.Create; Self.bdpUpdateCommand1 := Borland.Data.Provider.BdpCommand.Create; Self.bdpDeleteCommand1 := Borland.Data.Provider.BdpCommand.Create; Self.BdpDataAdapter1 := Borland.Data.Provider.BdpDataAdapter.Create; Self.dataSet_Migration := System.Data.DataSet.Create; Self.DBWebDataSource_Migration := Borland.Data.Web.DBWebDataSource.Create; Self.DataTable1 := System.Data.DataTable.Create; Self.DataColumn1 := System.Data.DataColumn.Create; Self.DataColumn2 := System.Data.DataColumn.Create; (System.ComponentModel.ISupportInitialize(Self.BdpDataAdapter1)).BeginInit; (System.ComponentModel.ISupportInitialize(Self.dataSet_Migration)).BeginInit; (System.ComponentModel.ISupportInitialize(Self.DBWebDataSource_Migration)).BeginInit; (System.ComponentModel.ISupportInitialize(Self.DataTable1)).BeginInit; // // Bdp_Connect_Migration // Self.Bdp_Connect_Migration.ConnectionOptions := 'transaction isolation=Rea' + 'dCommitted;blobsize=1024'; Self.Bdp_Connect_Migration.ConnectionString := 'assembly=Borland.Data.Mssq' + 'l,Version=2.5.0.0,Culture=neutral,PublicKeyToken=91d62ebb5b0d1b1b;vendorc' + 'lient=sqloledb.dll;pooling=True;grow on demand=True;database=Migration;us' + 'ername=tiger;max pool size=100;password=scott;provider=MSSQL;min pool siz' + 'e=0;hostname=164.24.61.158'; // // bdpSelectCommand1 // Self.bdpSelectCommand1.CommandOptions := nil; Self.bdpSelectCommand1.CommandText := 'SELECT S_GPNR, S_QKDNR FROM dbo.tbl' + '_mig'; Self.bdpSelectCommand1.CommandType := System.Data.CommandType.Text; Self.bdpSelectCommand1.Connection := Self.Bdp_Connect_Migration; Self.bdpSelectCommand1.ParameterCount := (SmallInt(0)); Self.bdpSelectCommand1.SchemaName := nil; Self.bdpSelectCommand1.Transaction := nil; Self.bdpSelectCommand1.UpdatedRowSource := System.Data.UpdateRowSource.None; // // bdpInsertCommand1 // Self.bdpInsertCommand1.CommandOptions := nil; Self.bdpInsertCommand1.CommandText := 'INSERT INTO dbo.tbl_mig (S_QKDNR ) ' + 'VALUES ( ?)'; Self.bdpInsertCommand1.CommandType := System.Data.CommandType.Text; Self.bdpInsertCommand1.Connection := Self.Bdp_Connect_Migration; Self.bdpInsertCommand1.ParameterCount := (SmallInt(1)); Self.bdpInsertCommand1.Parameters.Add(Borland.Data.Common.BdpParameter.Create('S' + '_QKDNR', Borland.Data.Common.BdpType.Double, Borland.Data.Common.BdpType.Unknown, 8, System.Data.ParameterDirection.Input, False, (Byte(0)), (Byte(0)), 0, 'S_QKDNR', System.Data.DataRowVersion.Current, nil)); Self.bdpInsertCommand1.SchemaName := nil; Self.bdpInsertCommand1.Transaction := nil; Self.bdpInsertCommand1.UpdatedRowSource := System.Data.UpdateRowSource.None; // // bdpUpdateCommand1 // Self.bdpUpdateCommand1.CommandOptions := nil; Self.bdpUpdateCommand1.CommandText := 'UPDATE dbo.tbl_mig SET S_QKDNR = ? ' + 'WHERE ID = ? AND S_QKDNR = ?'; Self.bdpUpdateCommand1.CommandType := System.Data.CommandType.Text; Self.bdpUpdateCommand1.Connection := Self.Bdp_Connect_Migration; Self.bdpUpdateCommand1.ParameterCount := (SmallInt(3)); Self.bdpUpdateCommand1.Parameters.Add(Borland.Data.Common.BdpParameter.Create('S' + '_QKDNR', Borland.Data.Common.BdpType.Double, Borland.Data.Common.BdpType.Unknown, 8, System.Data.ParameterDirection.Input, False, (Byte(0)), (Byte(0)), 0, 'S_QKDNR', System.Data.DataRowVersion.Current, nil)); Self.bdpUpdateCommand1.Parameters.Add(Borland.Data.Common.BdpParameter.Create('I' + 'DOriginal', Borland.Data.Common.BdpType.Double, Borland.Data.Common.BdpType.Unknown, 8, System.Data.ParameterDirection.Input, False, (Byte(0)), (Byte(0)), 0, 'ID', System.Data.DataRowVersion.Original, nil)); Self.bdpUpdateCommand1.Parameters.Add(Borland.Data.Common.BdpParameter.Create('S' + '_QKDNROriginal', Borland.Data.Common.BdpType.Double, Borland.Data.Common.BdpType.Unknown, 8, System.Data.ParameterDirection.Input, False, (Byte(0)), (Byte(0)), 0, 'S_QKDNR', System.Data.DataRowVersion.Original, nil)); Self.bdpUpdateCommand1.SchemaName := nil; Self.bdpUpdateCommand1.Transaction := nil; Self.bdpUpdateCommand1.UpdatedRowSource := System.Data.UpdateRowSource.None; // // bdpDeleteCommand1 // Self.bdpDeleteCommand1.CommandOptions := nil; Self.bdpDeleteCommand1.CommandText := 'DELETE FROM dbo.tbl_mig WHERE ID = ' + '? AND S_QKDNR = ?'; Self.bdpDeleteCommand1.CommandType := System.Data.CommandType.Text; Self.bdpDeleteCommand1.Connection := Self.Bdp_Connect_Migration; Self.bdpDeleteCommand1.ParameterCount := (SmallInt(2)); Self.bdpDeleteCommand1.Parameters.Add(Borland.Data.Common.BdpParameter.Create('I' + 'DOriginal', Borland.Data.Common.BdpType.Double, Borland.Data.Common.BdpType.Unknown, 8, System.Data.ParameterDirection.Input, False, (Byte(0)), (Byte(0)), 0, 'ID', System.Data.DataRowVersion.Original, nil)); Self.bdpDeleteCommand1.Parameters.Add(Borland.Data.Common.BdpParameter.Create('S' + '_QKDNROriginal', Borland.Data.Common.BdpType.Double, Borland.Data.Common.BdpType.Unknown, 8, System.Data.ParameterDirection.Input, False, (Byte(0)), (Byte(0)), 0, 'S_QKDNR', System.Data.DataRowVersion.Original, nil)); Self.bdpDeleteCommand1.SchemaName := nil; Self.bdpDeleteCommand1.Transaction := nil; Self.bdpDeleteCommand1.UpdatedRowSource := System.Data.UpdateRowSource.None; // // BdpDataAdapter1 // Self.BdpDataAdapter1.Active := True; Self.BdpDataAdapter1.DataSet := Self.dataSet_Migration; Self.BdpDataAdapter1.DataTable := Self.DataTable1; Self.BdpDataAdapter1.DeleteCommand := Self.bdpDeleteCommand1; Self.BdpDataAdapter1.InsertCommand := Self.bdpInsertCommand1; Self.BdpDataAdapter1.SelectCommand := Self.bdpSelectCommand1; Self.BdpDataAdapter1.StartRecord := 0; Self.BdpDataAdapter1.TableMappings.AddRange(TArrayOfSystem_Data_Common_DataTableMapping.Create(System.Data.Common.DataTableMapping.Create('T' + 'able', 'tbl_mig', TArrayOfSystem_Data_Common_DataColumnMapping.Create(System.Data.Common.DataColumnMapping.Create('I' + 'D', 'ID'), System.Data.Common.DataColumnMapping.Create('S_Q' + 'KDNR', 'S_QKDNR'))))); Self.BdpDataAdapter1.UpdateCommand := Self.bdpUpdateCommand1; // // dataSet_Migration // Self.dataSet_Migration.DataSetName := 'NewDataSet'; Self.dataSet_Migration.Locale := System.Globalization.CultureInfo.Create('d' + 'e-DE'); Self.dataSet_Migration.Tables.AddRange(TArrayOfSystem_Data_DataTable.Create(Self.DataTable1)); // // DBWebDataSource_Migration // Self.DBWebDataSource_Migration.DataSource := Self.dataSet_Migration; Self.DBWebDataSource_Migration.ErrorDlgBackColor := System.Drawing.Color.Azure; Self.DBWebDataSource_Migration.ErrorDlgBorderColor := System.Drawing.Color.Red; Self.DBWebDataSource_Migration.ErrorDlgForeColor := System.Drawing.Color.Black; // // DataTable1 // Self.DataTable1.Columns.AddRange(TArrayOfSystem_Data_DataColumn.Create(Self.DataColumn1, Self.DataColumn2)); Self.DataTable1.TableName := 'tbl_mig'; // // DataColumn1 // Self.DataColumn1.ColumnName := 'S_GPNR'; Self.DataColumn1.DataType := TypeOf(System.Double); // // DataColumn2 // Self.DataColumn2.ColumnName := 'S_QKDNR'; Self.DataColumn2.DataType := TypeOf(System.Double); Include(Self.Load, Self.Page_Load); (System.ComponentModel.ISupportInitialize(Self.BdpDataAdapter1)).EndInit; (System.ComponentModel.ISupportInitialize(Self.dataSet_Migration)).EndInit; (System.ComponentModel.ISupportInitialize(Self.DBWebDataSource_Migration)).EndInit; (System.ComponentModel.ISupportInitialize(Self.DataTable1)).EndInit; end; {$ENDREGION} procedure TWebForm1.Page_Load(sender: System.Object; e: System.EventArgs); begin // TODO: Hier Anwendercode zum Initialisieren der Seite einfügen end; procedure TWebForm1.OnInit(e: EventArgs); begin // // Erforderlich zur Unterstützung des Designers // InitializeComponent; inherited OnInit(e); end; end. Naja.. vielleicht war das zu blauäugig !!!!! |
Re: DatabankObjekte von anderen ASPX-Seiten zugreifen
Hallo Zusammen,
könnte ich das VCL-Datenmodul innerhalb einer Web-Anwendung als zentraler Ort für meine Datenbankobjekte nutzen.. und wenn wie.. Die Dokumentationen geben ja leider nicht alzuviel her... ich kann diese VCL-Datenmodule zwar als Unit einschliffen, jedoch kann ich die Objekte selber nicht ansprechen. Naja... mittlerweile habe ich es herausgefunden. Ich muss die unit als namespace mit in die aufzählung nehmen. :wall: |
Re: DatabankObjekte von anderen ASPX-Seiten zugreifen
Ah, da haben wir's: Du hast das Zeug in einer eigenen .ASPX hinterlegt. Das kann nicht funktionieren, da eine ASPX-Seite nur genau dann ziemlich kurz lebt, wenn sie vom Client aufgerufen wird. Du hast also 'niemals gar nie nicht' ™ Zugriff von einer ASPX-Seite auf eine andere.
Du müsstest die Datenzugriffskomponenten schon in eine 'normale' Unit packen und die dann referenzieren. Problematisch wird hier dann ggf. die Initialisierung, weil Du ja keine Persistenz zwischen den Seitenaufrufen hast. |
Re: DatabankObjekte von anderen ASPX-Seiten zugreifen
Mittlerweile habe ich wie schon erwähnt, ein VCL-Datenmodul aus der IDE gefischt. Die Datenobjekte kann ich zumindest theoretisch
nun ansprechen ohne das mir während der Compilation ein fehlermeldung unterläuft .. |
Re: DatabankObjekte von anderen ASPX-Seiten zugreifen
Wichtig ist einfach, darauf zu achten, dass die Objekte auch existieren wenn Du sie benötigst.
Dazu gibt es einmal den Weg, die innerhalb der Session Global zur Verfügung zu stellen (Stichwort global.asax), wobei das natürlich permanent auf den Speicher des Servers geht. Eine andere Lösung wäre, die Objekte beim Ersten Zugriff zu erzeugen. Aufgeräumt werden sie dann von der GC. |
Re: DatabankObjekte von anderen ASPX-Seiten zugreifen
:cheers: Jedenfalls habe ich glaube ich die Zusammenhänge verstanden und möchte Dir Danken !!!
Peter |
Re: DatabankObjekte von anderen ASPX-Seiten zugreifen
Zitat:
Man kann ein wenig mit WeakReference und watch dogs spielen um das zu erreichen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 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