AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Intraweb Datenbankdaten in ein IWGrid legen (kein IWDBGrid
Thema durchsuchen
Ansicht
Themen-Optionen

Intraweb Datenbankdaten in ein IWGrid legen (kein IWDBGrid

Ein Thema von af99 · begonnen am 1. Aug 2013 · letzter Beitrag vom 13. Aug 2013
Antwort Antwort
Seite 1 von 3  1 23      
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, 15: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
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.380 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Intraweb Datenbankdaten in ein IWGrid legen (kein IWDBGrid

  Alt 1. Aug 2013, 15:32
Hi,


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.

wenn ich mal nur die drei Zeilen anschaue, dann würde ich mal schlicht vermuten, dass das Problem auf der rechten Seite der Zuweisung steht und nicht links. Zudem wäre es hilfreich etwas mehr Infos zu geben, was denn genau nicht geht, denn "geht nicht" ist ein ziemlich weites Feld.
  Mit Zitat antworten Zitat
af99

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

AW: Intraweb Datenbankdaten in ein IWGrid legen (kein IWDBGrid

  Alt 1. Aug 2013, 15:43
Jep da hast Du recht.

Ich kann das Projekt erfolgreich kompilieren und starten. Wenn ich dann im Browser den Button betätige der die Procedure "IWGOrders_fuellen" aufruft erhalte ich folgende Fehlermeldung

"Im Projekt... ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletztung bei Adresse 0066EDDD im Modul XXX lesen von Adresse 00000064 aufgetreten."

Ich habe auf des Main Formular mal eine IWDBGrid Komponente gelegt in dieser werden die Daten einwandfrei angezeigt
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.380 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Intraweb Datenbankdaten in ein IWGrid legen (kein IWDBGrid

  Alt 1. Aug 2013, 15:51
siehst Du, ist doch gar nicht schwer. Und jetzt seh ich auch den Fehler (zumindest glaub ich das):

UserSessionUnit: HIer definierst Du ein DataModule1: TDataModule1; und erzeugst das dann auch. Im MainForm machst Du aber ein uses DataModuleUnit; d.h. Du greifst da auf das nicht initialisierte DataModule zu.

Grüße
  Mit Zitat antworten Zitat
af99

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

AW: Intraweb Datenbankdaten in ein IWGrid legen (kein IWDBGrid

  Alt 1. Aug 2013, 16:10
ok, ich habe das dann geändert auf
IWGOrders.Cell[1,1].Text := usersession.DataModule1.QR_orders_heute.FieldByName('orders_0800').AsString; ich hoffe Du meintest das so. Leider kommt immer noch der gleiche Fehler (bzw der gleiche mit anderen Adressen 0066EDE1 und 00000069)
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.380 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Intraweb Datenbankdaten in ein IWGrid legen (kein IWDBGrid

  Alt 1. Aug 2013, 16:23
hm..

kannst Du mal etwas Debugcode einbauen? Oder geht IW irgend wie direkt debuggen?

Überprüf bitte mal ob
Assigned(Usersession)
Assigned(Usersession.DataModule1)
Assigned(Usersession.DataModule1.QR_orders_heute)

Wie schaut es mit der Compilersetting "Optimierung" aus - die falls an mal ausschalten. Hat IW nicht einen eingebauten Debugger/Debugconsole?

Grüße
  Mit Zitat antworten Zitat
af99

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

AW: Intraweb Datenbankdaten in ein IWGrid legen (kein IWDBGrid

  Alt 1. Aug 2013, 16:29
puh,

was für einen Debugcode meinst Du ??? bin in IW auch blutiger Anfänger weis daher auch nicht ob man das direkt debuggen kann.

wie prüfe ich das ??
Assigned(Usersession)
Assigned(Usersession.DataModule1)
Assigned(Usersession.DataModule1.QR_orders_heute)

Compilersettings sind alle auf standard (nix geändert nach der Installation)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#8

AW: Intraweb Datenbankdaten in ein IWGrid legen (kein IWDBGrid

  Alt 1. Aug 2013, 16:58
Delphi-Quellcode:
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;
  
  { ###############
  nachdem man mit dem Debugger über die folgende Zeile "drüberstept"
  ist die Variable "test" out-of-scope
  daher wird im Debugger auch kein Wert mehr angezeigt wenn man den Mauszeiger über "test" schweben lässt
  Ursache könnte z.B. die Optimierung oder auch der fehlende Stackframe sein
  ################# }

  test := DataModule1.QR_orders_heute.FieldByName('orders_0800').AsString;
end;
fork me on Github
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.380 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Intraweb Datenbankdaten in ein IWGrid legen (kein IWDBGrid

  Alt 1. Aug 2013, 18:41
was für einen Debugcode meinst Du ??? bin in IW auch blutiger Anfänger weis daher auch nicht ob man das direkt debuggen kann.
mach 4 IWLabels auf das Form und dann

Delphi-Quellcode:
procedure TFMain.IWGOrders_fuellen;
var
  test: string;
begin
  if Assigned(Usersession) then
    iwLabel1.Caption := 'Usersession ist da';
  if Assigned(Usersession.DataModule1) then
    iwLabel2.Caption := 'DataModule1.QR_orders_heute ist da';
  if Assigned(Usersession.DataModule1.QR_orders_heute) then
    iwLabel3.Caption := 'Usersession.DataModule1.QR_orders_heute ist da';

  iwLabel4.Caption := DataModule1.QR_orders_heute.FieldByName('orders_0800').AsString;
end;
Alternativ einen Brakepoint auf die Zeile mit dem Auslesen des DB Wertes und dann durchdebuggen (F9).

Compilersettings sind alle auf standard (nix geändert nach der Installation)
dann ändere die Compilersettings im Debug-mode bei der Option "Optimierung" auf false
  Mit Zitat antworten Zitat
af99

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

AW: Intraweb Datenbankdaten in ein IWGrid legen (kein IWDBGrid

  Alt 2. Aug 2013, 09:02
ok, habe es dann so gemacht
Delphi-Quellcode:
procedure TFMain.IWGOrders_fuellen;
var
  test: string;
begin
  if Assigned(Usersession) then //er springt von hier nach
    iwLabel1.Caption := 'Usersession ist da'
  else
    iwLabel1.Caption := 'Usersession ist nicht da'; // hier
  if Assigned(Usersession.DataModule1) then //hier kommt die Exception. Den Rest macht er dann erst gar nicht
    iwLabel2.Caption := 'DataModule1.QR_orders_heute ist da'
  else
    iwLabel2.Caption := 'DataModule1.QR_orders_heute ist nicht da';
  if Assigned(Usersession.DataModule1.QR_orders_heute) then
    iwLabel3.Caption := 'Usersession.DataModule1.QR_orders_heute ist da'
  else
    iwLabel3.Caption := 'Usersession.DataModule1.QR_orders_heute ist nicht da';

  iwLabel4.Caption := DataModule1.QR_orders_heute.FieldByName('orders_0800').AsString;
end;
Compilersettings im Debug-mode bei der Option "Optimierung" auf false ... Wo stelle ich das ein?? Unter Projekt/Optionen gibt es diese Einstellung nicht ich habe das mal als Bild angehangen
Miniaturansicht angehängter Grafiken
debug.jpg  
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz