Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADO und Intranet. Problemm mit CoInitialize (https://www.delphipraxis.net/40940-ado-und-intranet-problemm-mit-coinitialize.html)

Pauli 23. Feb 2005 15:08

Datenbank: Oracle • Zugriff über: ADO

ADO und Intranet. Problemm mit CoInitialize
 
Hallo Leute!
Ich hab ein Problem, und zwar ich soll eine Webanwending machen, damit man ein Paar Sachen aus Oracle DB ansehen und ändern kann. Es ist aber nicht gewollt, dass das Programm auf verschieenen Rechnern installirt wird, sondern soll als eine Webapplikation laufen (Intranet).
Dabei habe ich schwirigkeit eine ADO-Verbindung herzustellen.
Wenn ich einfach eine ADOConnection mach, meldet mir das Programm 'CoInitialize ist nicht gestartet'.

Kann mir jemand helfen die Verbindung richtig zu konfigurieren (wenn es uberhaupt möglich ist)?

Bernhard Geyer 23. Feb 2005 15:26

Re: ADO und Intranet. Problemm mit CoInitialize
 
Die Antwort steht doch schon in der Fehlermeldung:
Du mußt die Funktion CoInitialize (Unit ActiveX) aufrufen. Und am Programmende CoUninitialize.
In einer "normalen" Anwendung wird diese durch Application.Initialize erledigt.

Für Oracle würde ich dir eh empfehlen nicht über ADO zu gehen sondern über einen native Oracle Treiber. Der (von MS) defaultmäßig installierte Treiber ist alles andere als Vollständig und Fehlerfrei.

Pauli 23. Feb 2005 15:37

Re: ADO und Intranet. Problemm mit CoInitialize
 
Hi!

Ich benutze im Programm keine ActiveX-Komponenten, und hab das auch schon ausprobiert mit coinitialize(nil).
Funktioniert trotzdem nicht :(
Wie gesagt, es soll eine Webseite sein, wo man ein paar Bilder und dazugehörige eiträge siet (alles aus DB).
Sobald ich die ADOConnection rauslösche gibt es keine Meldungen mer und die Seite wird angezeigt, aber wie sinst soll ich ich eine Verbindung schaffen?

Danke.

Robert_G 23. Feb 2005 15:41

Re: ADO und Intranet. Problemm mit CoInitialize
 
Du musst das für jeden Thread ausführen! (Und natürlich auch wieder rückgängig machen!!!)
Nicht nur bei Programmstart.

Bernhard Geyer 23. Feb 2005 15:43

Re: ADO und Intranet. Problemm mit CoInitialize
 
Zitat:

Zitat von Pauli
Ich benutze im Programm keine ActiveX-Komponenten

Weißt Du was die Abkürzung ADO bedeutet? ActiveX Data Objects :-). Ist zwar "nur" COM-Basierend aber der Name wurde zu einer Zeit festgelegt als bei M$ alles "Active" sein mußte.

Zitat:

Zitat von Pauli
und hab das auch schon ausprobiert mit coinitialize(nil). Funktioniert trotzdem nicht :(

Dann rück mal etwas Code heraus. Es ist definitiv der Fehler eines nicht angemeldeten (COM-) Appartments. Und dieses wird mit CoInitialize angemeldet.

Zitat:

Zitat von Pauli
Sobald ich die ADOConnection rauslösche gibt es keine Meldungen mer und die Seite wird angezeigt, aber wie sinst soll ich ich eine Verbindung schaffen?

Wenn Du über ADO gehen willst, benötigst Du ein angemeldetes Appartment (CoInitialize). Mit native Komponenten wie von Core Labs kommst Du evtl. komplett ohne COM-Kommunikation aus.

Pauli 23. Feb 2005 15:54

Re: ADO und Intranet. Problemm mit CoInitialize
 
Da wäre erstmal das:
Delphi-Quellcode:
unit DatamoduleUnit;

interface

uses
  {$IFDEF Linux}QForms, {$ELSE}Forms, {$ENDIF}
  SysUtils, Classes, DB, ADODB;

type
  TDataModule1 = class(TDataModule)
    ADOConnection1: TADOConnection;
  private
  public
  end;

// Procs
  function DataModule1: TDataModule1;

implementation
{$R *.dfm}

uses
  IWInit,
  ServerController;

// Since we are threaded we cannot use global variables to store form / datamodule references
// so we store them in WebApplication.Data and we could reference that each time, but by creating
// a function like this our other code looks "normal" almost as if its referencing a global.
// This function is not necessary but it makes the code in the main form which references this
// datamodule a lot neater.
// Without this function ever time we would reference this datamodule we would use:
//   TDataModule1(WebApplication.Data).Datamodule.<method / component>
// By creating this procedure it becomes:
//   TDataModule1.<method / component>
// Which is just like normal Delphi code.
function DataModule1: TDataModule1;
begin
  Result := TUserSession(RWebApplication.Data).Datamodule1;
end;

end.
und dann das zu sehen:
Delphi-Quellcode:
unit IWUnit1;
{PUBDIST}

interface

uses
  IWAppForm, IWApplication, IWTypes, IWCompButton, Classes, Controls,
  IWControl, IWCompEdit, DB, ADODB, IWCompListbox, IWDBStdCtrls, IWGrids,
  IWDBGrids, DBTables;

type
  TformMain = class(TIWAppForm)
    IWDBGrid1: TIWDBGrid;
    procedure IWAppFormCreate(Sender: TObject);
    procedure IWAppFormDestroy(Sender: TObject);
  public
  end;

implementation
{$R *.dfm}

uses
  ServerController, IWForm, ComObj;

procedure TformMain.IWAppFormCreate(Sender: TObject);
begin
  //tblMediaType.Open;
end;

procedure TformMain.IWAppFormDestroy(Sender: TObject);
begin
  //tblMediaType.Close;
end;

end.
Ich hoffe ich komme Dir nich so dumm vor ;)

Danke.

Bernhard Geyer 23. Feb 2005 16:14

Re: ADO und Intranet. Problemm mit CoInitialize
 
Und wo hattest Du CoInitialize untergebracht?

Ich denke Robert_G ist der genauere Tipp. Für jeden Thread ist die Anmeldung des Appartments nötig.

Union 23. Feb 2005 18:56

Re: ADO und Intranet. Problemm mit CoInitialize
 
Zitat:

Zitat von Pauli
Hallo Leute!
Ich hab ein Problem, und zwar ich soll eine Webanwending machen, damit man ein Paar Sachen aus Oracle DB ansehen und ändern kann. Es ist aber nicht gewollt, dass das Programm auf verschieenen Rechnern installirt wird, sondern soll als eine Webapplikation laufen (Intranet).
Dabei habe ich schwirigkeit eine ADO-Verbindung herzustellen.
Wenn ich einfach eine ADOConnection mach, meldet mir das Programm 'CoInitialize ist nicht gestartet'.

Kann mir jemand helfen die Verbindung richtig zu konfigurieren (wenn es uberhaupt möglich ist)?

Hi,

so bekommst Du es hin:

Delphi-Quellcode:
unit ComInit;

interface

uses
  ActiveX;

implementation

initialization
  CoInitializeEx(nil,COINIT_MULTITHREADED);
finalization
  CoUninitialize;
end.

Diese Unit MUSS als erste in deiner .dpr Datei stehen. Dann wird CoInitializeEx auch gleich beim Laden der Anwendung aufgerufen.

Pauli 24. Feb 2005 11:09

Re: ADO und Intranet. Problemm mit CoInitialize
 
Hi,

Hab das ausprobiert, aber kriege jetzt eine andere Fehlermeldung:

'Error 2 while launching browser'

Vielleicht mach ich etwas falsch?

Danke.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:19 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 by Thomas Breitkreuz