Results 1 to 7 of 7

Thread: Webservice en ADO

  1. #1
    Senior Member rieni's Avatar
    Join Date
    Mar 2001
    Location
    Br?©ttum bij Lillehammer, Noorwegen
    Posts
    342

    Unhappy Webservice en ADO

    Umpfff, deze vraag hoort dus hier thuis, bij 'WebDelphi'.

    Stel ik maak een Webservice waar ik in een (bijv. ADO) -query/tabel iets wil opzoeken, waar plaats ik dan mijn datacomponenten?
    In de TWebmodule, in een (nieuw) TDatamodule of...
    Ik heb verschillende mogelijkheden geprobeerd, maar ik krijg steeds een foutmelding als ik middels de Client de query/table wil aanspreken.

    In mijn Serverprogramma heb ik een functie zoals dit:


    Code:
    function TIMicWebService.MakeName(const s: string): string stdcall;
    begin
      with WebModule1.ADOQuery1 do
      begin
        if Active then
          Close;
        SQL.clear;
        SQL.add(s);
        Open;
        Result:=Fieldbyname('Name').asstring;
      end;
    end;
    Op mijn WebModule1 heb ik een TADOQuery en een TADOConnection.

    Iedere keer komt er een access-violation.
    Wat doe ik fout ?

  2. #2
    Op welk punt wordt die WebModule1 aangemaakt/gevuld?

    Ik zou er zelf voor kiezen een private field te maken waarin je die WebModule1 aanmaakt. Dan ben je zelf ook verantwoordelijk voor het aanmaken en vrijgeven.
    Marcel

  3. #3
    Senior Member rieni's Avatar
    Join Date
    Mar 2001
    Location
    Br?©ttum bij Lillehammer, Noorwegen
    Posts
    342
    Bedankt voor je antwoord, maar...
    Op welk punt wordt die WebModule1 aangemaakt/gevuld?
    Die wordt aangemaakt zo gauw ik in Delphi kies:
    File / New / Other / Web Services / Soap Server application
    Op dezelfde WebModule1 heb ik m'n ADO componenten geplaatst.
    Ik zou er zelf voor kiezen een private field te maken waarin je die WebModule1 aanmaakt. Dan ben je zelf ook verantwoordelijk voor het aanmaken en vrijgeven.
    Dit begrijp ik niet. Die WebModule heb je meteen al. Waarom / hoe moet ik die dan zelf aanmaken?

    Neem nu jouw EuroConverter-voorbeeld: daar heb je ook meteen een TWebModule met de naam MainModule. Stel dat je nu dat rijtje met landennamen niet in een array 'currencies' had staan, maar wilde opzoeken in een table. Hoe zou je dat dan doen en waar zouden je table/data-componenten komen?

  4. #4
    Senior Member Anders's Avatar
    Join Date
    Dec 2001
    Location
    Doetinchem
    Posts
    1,415
    Niet een direct antwoord, maar ik mee een week suf zitten te kijken op een webaplicatie met ADO. Uiteindelijk lag het dus aan Delphi 6.01, want naar een update 6.02 werkt het probleemloos.

    (Mange hilsener fra een Dansker til alle i Norge)
    Anders

    May your code compile!

  5. #5
    Ah, ik snap je probleem al (hoop ik). Die WebModule die Delphi voor je aanmaakt kun je beter helemaal met rust laten en alleen als 'ingang' voor je webservice zien. Die module zorgt ervoor dat een call naar je webservice op de juiste manier wordt doorgestuurd. Als je vervolgens die module in je applicatie weer wilt gebruiken ga je eigenlijk terug naar de ingang.

    Ik zou het meer op deze manier zien: MainModule roept EuroConverter aan en EuroConverter roept een derde datamodule aan. Die derde datamodule bevat dan je connectie, datasets, en dergelijke. Dus vandaar mijn opmerking om dat met een private field te doen. Om het voorbeeld van de EuroConverter aan te houden:
    Code:
      TEuroConverter = class(TInvokableClass, IEuroConverter)
      private
        FData: TMyDataModule;
      public
        function Convert(Amount: Real;
          FromCurrency, ToCurrency: string): Real; stdcall;
        function GetCountryCount: integer; stdcall;
        function GetCountry(Index: integer): string; stdcall;
        function GetCurrency(Index: integer): string; stdcall;
        constructor Create;
        destructor Destroy;
      end;
    En in de implementatie:
    Code:
    constructor TEuroConverter.Create;
    begin
      FData := TMyDataModule.Create(nil);
    end;
    
    destructor TEuroConverter.Destroy;
    begin
      FData.Free;
    end;
    
    function TEuroConverter.GetCountryCount: integer;
    begin
      FData.CountQuery.Open;
      try
        Result := FData.CountQuery.FieldByName('Aantal').AsInteger;
      finally
        FData.CountQueryClose;
      end;
    end;
    Marcel

  6. #6
    Senior Member rieni's Avatar
    Join Date
    Mar 2001
    Location
    Br?©ttum bij Lillehammer, Noorwegen
    Posts
    342
    Anders: bedankt voor de groet en de groeten terug natuurlijk. Ja, ik heb het 2e updatepack geïnstalleerd, dus dat was het niet.

    Marcel: bedankt voor het voorbeeld, nu werkt het. Jij schreef:
    Als je vervolgens die module in je applicatie weer wilt gebruiken ga je eigenlijk terug naar de ingang.
    Betekent dat, dat je die dus nooit meer kunt aanspreken nadat de applicatie is opgestart?

  7. #7
    Alleen als je via de owner gaat zoeken. Als je WebModule1 zou gebruiken werkt het niet want ieder proces krijgt zijn eigen datamodule en via de naam WebModule1 heb je alleen de eerste.
    Marcel

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. C# webservice gebruiken in Delphi 6/7
    By Marcel in forum .NET
    Replies: 31
    Last Post: 08-Mar-04, 21:03
  2. ADO een goede keus?
    By Mani in forum Databases
    Replies: 9
    Last Post: 26-Jan-04, 21:40
  3. Sockets gebruiken in een webservice
    By Spiderken in forum WebDelphi
    Replies: 10
    Last Post: 14-Jan-03, 00:45
  4. Niet Synchroon lopen ADO Tables
    By TwoWalker in forum Databases
    Replies: 10
    Last Post: 05-Aug-02, 19:58
  5. Gebruik ADO in combinatie met Delphi 4
    By WyboH in forum Algemeen
    Replies: 4
    Last Post: 11-Mar-02, 00:44

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •