Frage

Ich bin neu in Intraweb. Ich möchte eine einfache Anwendung erstellen, die eine Zugriffsdatenbank mit ADO -Steuerelementen verbindet und anzeigt. Wenn ich den Server ausführe, gibt er mir

"Coinitialize wurde nicht genannt"

Error. Ich suchte im Internet und fand viele Text, die das erzählten

Ändern Sie die Kominitialisierungseigenschaft von IwServerController in CimultitHhread.

Ich habe versucht, dies bei der Event von Iwappformcreate zu tun. Dann bekam ich Kompilierungsfehler:

"Nicht deklarierter Kennung CimultitHhread"

Ich lege die Linie IWServerController.ComInitialization:=ciMultiThreaded; Dann erscheint der Laufzeitfehler:

"Zugriffsverletzung bei Adresse . . ."

Da ich nicht weiß, was ich tue, kann ich das Problem nicht finden. Bitte hilf mir.

War es hilfreich?

Lösung

Das Fehler bei Intraweb mit ADO misitialisieren Gibt Ihnen die richtige Antwort.

Wie ich von Kommentaren fange @David Antwort In dieser Frage sind noch zwei Dinge übrig:

  1. Wo wird der Typ des T -Kombialisierungstyps deklariert, der auch die Cimultithread -Kennung definiert. Antwort darauf ist: IWSERVERCONTROLLERBASE -Einheit, Teil von Intraweb.
  2. Wo kann die Kominitialisierungseigenschaft des IwServerController -Objekts geändert werden, um dies zum Laufen zu bringen.
    • Das erste, was Sie wissen müssen, ist, dass die tatsächliche Klasse, mit der das iWServerController -Objekt konstruiert wurde, Teil Ihres Intraweb -Projekts ist.
    • Als nächstes sieht es zu spät aus, diese Eigenschaft auf einer Seite aufzubauen. vollständig ignoriert werden.
    • Mit dem Delphi XE VCL für den Webanwendungsassistenten habe ich ein Gerät namens ServerController mit dem Klasse TiwServerController erhalten. Nachdem ich den Konstruktor nicht überschrieben habe, überschreibe ich die Afterconstruction -Methode, um solche Eigenschaften wie diese zu initialisieren

Beispiel:

  TIWServerController = class(TIWServerControllerBase)
    procedure IWServerControllerBaseNewSession(ASession: TIWApplication;
      var VMainForm: TIWBaseForm);

  private

  protected
    //constructor Create; override;  //failed!!
  public
    procedure AfterConstruction; override;
  end;

  //..

procedure TIWServerController.AfterConstruction;
begin
  inherited;
  ComInitialization := ciMultiThreaded;  //succeded
end;

Ich habe dann eine Taste, eine Beschriftung und eine ordnungsgemäß konfigurierte Adoconnection (gegen SQL Server) hinzugefügt und:

procedure TIWForm2.IWButton1Click(Sender: TObject);
begin
  try
    ADOConnection1.Connected := True;
    IWLabel1.Caption := 'Connected';
  except
    on E:Exception do
      IWLabel1.Caption := E.ClassName + ' ' + E.Message;
  end;
end;

Das Drücken der Taste erzeugt Folgendes:

TADOConnection Succesfully connected

Ich hoffe, das reicht Ihnen aus.

Andere Tipps

Es hört sich so an, als hätten Sie COM nicht initialisiert, was Sie durch Anrufe tun müssen CoInitializeEx(). Aus der Dokumentation:

Coinitializeex muss mindestens einmal aufgerufen werden und wird normalerweise nur einmal für jeden Thread, der die COM -Bibliothek verwendet, genannt. Mehrere Aufrufe bei Coinitializeex durch denselben Thread sind zulässig, solange sie das gleiche Parallelitätsflag übergeben, aber nachfolgende gültige Aufrufe return s_false. Um die COM -Bibliothek anmutig in einem Thread zu schließen, muss jeder erfolgreiche Aufruf zur Coinitialisierung oder Coinitializeex, einschließlich eines Aufrufs, der S_FALSE zurückgibt, durch einen entsprechenden Aufruf zur Beratung ausgeglichen werden.

Wenn Sie den Intraweb -Anwendungsassistenten in XE2 verwendet haben, würde er für Sie eine Servercontroller.pas -Einheit erstellt.

Wenn Sie dieses Gerät im visuellen Designer öffnen und auf das "Form" klicken, sehen Sie eine Reihe von Eigenschaften für den TiwServerController. Eine davon ist die Kominitialisierung, die ein Dropdown mit Cimultithrede, Cinone, Cinormal enthält. Es ist standardmäßig Cinone.

Hier ist das DFM, nachdem ich die Eigenschaft der Kominitialisierung geändert habe:

object IWServerController: TIWServerController
  OldCreateOrder = False
  AuthBeforeNewSession = False
  AppName = 'MyApp'
  CharSet = 'UTF-8'
  CacheExpiry = 120
  ComInitialization = ciMultiThreaded
  Compression.Enabled = False
  Compression.Level = 6
  Description = 'My IntraWeb Application'
  DebugHTML = False
  DisplayName = 'IntraWeb Application'
  Log = loNone
  EnableImageToolbar = False
  ExceptionDisplayMode = smAlert
  HistoryEnabled = False
  InternalFilesURL = '/'
  JavascriptDebug = False
  PageTransitions = False
  Port = 8888
  RedirectMsgDelay = 0
  ServerResizeTimeout = 0
  ShowLoadingAnimation = True
  SessionTimeout = 10
  SSLOptions.NonSSLRequest = nsAccept
  SSLOptions.Port = 0
  SSLOptions.SSLVersion = sslv3
  Version = '12.0.8'
  OnNewSession = IWServerControllerBaseNewSession
  Height = 310
  Width = 342
end

Hoffe das hilft einigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top