Einzelnen Beitrag anzeigen

af99

Registriert seit: 22. Apr 2004
84 Beiträge
 
Delphi XE5 Ultimate
 
#1

Intraweb Datenbankdaten in ein IWGrid legen (kein IWDBGrid

  Alt 1. Aug 2013, 14:11
HAllo Zusammen,

puh Intraweb is doch ganz schön anders als Delphi.
Also hier die Rahmenbedingungen: Delphi XE Enterprise
In einer MS SQL DB 2008 R2 liegen die Daten. Zugriff über ADO (dbGo Komponenten).
Hier meine DataModuleUnit
Delphi-Quellcode:
unit DataModuleUnit;

interface

uses
  Forms, SysUtils, Classes, DB, ADODB;

type
  TDataModule1 = class(TDataModule)
    Con_srvsqlprod01: TADOConnection;
    QR_orders_heute: TADOQuery;
    DS_QR_orders_heute: TDataSource;
    procedure DataModuleCreate(Sender: TObject);
  private
  public
    procedure querry_orders_heute;
  end;

var
  DataModule1: TDataModule1;

implementation

{$R *.dfm}

procedure TDataModule1.querry_orders_heute;
begin
  QR_orders_heute.SQL.Clear;
  QR_orders_heute.SQL.Add(
                'select DISTINCT orders_0800 ' +
                'FROM tLog WITH(NOLOCK) ' +
                          );
  QR_orders_heute.Active := true;
end;

procedure TDataModule1.DataModuleCreate(Sender: TObject);
begin
  Con_srvsqlprod01.ConnectionString := 'Provider=sqloledb;' +
                                       'Data Source=XXX;'+
                                       'Initial Catalog=XXX;'+
                                       'User Id=XXX;' +
                                       'Password=XXX';

  Con_srvsqlprod01.LoginPrompt := False;
  Con_srvsqlprod01.Open;
  querry_orders_heute;
end;

end.
Hier meine ServerControler Unit
Delphi-Quellcode:
unit ServerController;

interface

uses
  SysUtils, Classes, IWServerControllerBase, IWBaseForm, HTTPApp,
  // For OnNewSession Event
  UserSessionUnit, IWApplication, IWAppForm, DataModuleUnit, IWDataModulePool;

type
  TIWServerController = class(TIWServerControllerBase)
    Pool: TIWDataModulePool;
    procedure IWServerControllerBaseNewSession(ASession: TIWApplication;
      var VMainForm: TIWBaseForm);
    procedure IWServerControllerBaseCreate(Sender: TObject);
    procedure PoolCreateDataModule(var ADataModule: TDataModule);
    procedure PoolFreeDataModule(var ADataModule: TDataModule);
  private

  public
  end;

  function UserSession: TIWUserSession;
  function IWServerController: TIWServerController;
  function LockDataModule: TDataModule1;
  procedure UnlockDataModule(ADataModule: TDataModule1);

implementation

{$R *.dfm}

uses
  IWInit, IWGlobal;

function UserSession: TIWUserSession;
begin
  Result := TIWUserSession(WebApplication.Data);
end;

function IWServerController: TIWServerController;
begin
  Result := TIWServerController(GServerController);
end;

procedure TIWServerController.IWServerControllerBaseNewSession(
  ASession: TIWApplication; var VMainForm: TIWBaseForm);
begin
  ASession.Data := TIWUserSession.Create(nil);
end;

procedure TIWServerController.IWServerControllerBaseCreate(Sender: TObject);
begin
  Pool.Active := True;
end;

procedure TIWServerController.PoolCreateDataModule(var ADataModule: TDataModule);
begin
  ADataModule := TDataModule1.Create(nil);
end;

procedure TIWServerController.PoolFreeDataModule(var ADataModule: TDataModule);
begin
  FreeAndNil(ADataModule);
end;

function LockDataModule: TDataModule1;
begin
  Result := TDataModule1(TIWServerController(GServerController).Pool.Lock);
end;

procedure UnlockDataModule(ADataModule: TDataModule1);
var
  LTemp: TDataModule;
begin
  LTemp := ADataModule;
  TIWServerController(GServerController).Pool.Unlock(LTemp);
end;

initialization
  TIWServerController.SetServerControllerClass;
end.
Hier meine UserSessionUnit
Delphi-Quellcode:
unit UserSessionUnit;

{
  This is a DataModule where you can add components or declare fields that are specific to
  ONE user. Instead of creating global variables, it is better to use this datamodule. You can then
  access the it using UserSession.
}

interface

uses
  IWUserSessionBase, SysUtils, Classes, DataModuleUnit;

type
  TIWUserSession = class(TIWUserSessionBase)
    procedure IWUserSessionBaseCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    DataModule1: TDataModule1;
  end;

implementation

{$R *.dfm}

procedure TIWUserSession.IWUserSessionBaseCreate(Sender: TObject);
begin
  inherited;
  Datamodule1 := TDatamodule1.Create(Self);
end;

end.
Hier die Unit von meinem Main Formular
Delphi-Quellcode:
unit main;

interface

uses
  Classes, SysUtils, IWAppForm, IWApplication, IWColor, IWTypes, Controls,
  IWVCLBaseControl, IWBaseControl, IWBaseHTMLControl, IWControl, IWGrids,
  IWDBGrids, IWCompButton;

type
  TFMain = class(TIWAppForm)
    IWDBGrid1: TIWDBGrid;
    IWGOrders: TIWGrid;
    IWButton1: TIWButton;
    procedure IWButton1Click(Sender: TObject);
  public
    procedure IWGOrders_fuellen;
  end;

implementation

uses DataModuleUnit;

{$R *.dfm}

procedure TFMain.IWButton1Click(Sender: TObject);
begin
  IWGOrders_fuellen;
end;

procedure TFMain.IWGOrders_fuellen;
var
  test: string;
begin

  //IWGOrders.Cell[1,1].Text := '15';
  //IWGOrders.Cell[1,1].Text := DataModule1.QR_orders_heute.FieldByName('orders_0800').AsString;
  test := DataModule1.QR_orders_heute.FieldByName('orders_0800').AsString;
end;

initialization
  TFMain.SetAsMainForm;

end.
Hierin liegt nun der Knackpunkt
Delphi-Quellcode:
  //IWGOrders.Cell[1,1].Text := '15';
  //IWGOrders.Cell[1,1].Text := DataModule1.QR_orders_heute.FieldByName('orders_0800').AsString;
  test := DataModule1.QR_orders_heute.FieldByName('orders_0800').AsString;
IWGOrders.Cell[1,1].Text := '15'; Das funktioniert
IWGOrders.Cell[1,1].Text := DataModule1.QR_orders_heute.FieldByName('orders_08 00').AsString; das
test := DataModule1.QR_orders_heute.FieldByName('orders_08 00').AsString; und das hingegen nicht.

Leider habe ich im Netz nichts gefunden wie ich nun unter Intraweb die Daten aus meiner Datenquelle in dieses verfixte Grid bekomme.

Ich kann hier kein IWDBGrid nehmen da meine Daten in der finalen Version aus unterschiedlichen Datenquellen kommen die ich nicht mit einem Statement abfragen kann.

Kann mir hier irgendeiner helfen ???

Viele Grüße
Andreas
  Mit Zitat antworten Zitat