Results 1 to 15 of 15

Thread: Tabel uploaden naar webserver

  1. #1

    Question ActiveX components

    Ok,

    even heel iets anders...

    Stel nou he, dat ik op mijn server een access database heb en die gewoon via de server kan benaderen. Dus dat ik een actieve internetpagina heb.

    In deze access database staan bijvoorbeeld namen.

    Nou heb ik op mijn 'lokale' pc ook een zelfde access database staan, en ik wil alle data in deze 'lokale' database kopieren in de database op de 'server'.

    Ik weet dat het kan omdat ik dat al eens ergens gezien heb. Maar natuurlijk wil ik dat zelf ook kunnen.

    Alleen hoe krijg ik de data uit de 'lokale' tabel naar die op de 'server'.

    Ik kan wel een programma schrijven die gedownload wordt en de database lokaal uitleest, geen probleem, maar de uitgelezen dat naar de 'server'-tabel kopieren. Daar loop ik op vast.

    Nu kun je met Delphi een ActiveX component maken en deze als develop for web opslaan. Het programma wordt dan een CAB bestand (bv.) en moet bij aanroep geinstalleerd worden . ( Je krijgt dan zo'n scherm met: wilt u dit en dat installeren blablabla (moet normaal dig. gesigneerd worden, maar met security op low gaat het toch goed).

    Misschien is het mogelijk om via zo'n component de 'lokale' database uit telezen, maar ik vraag me dan toch af hoe dat op de server komt.

    Iemand een idee?! Misschien zelf al ooit geprobeerd? Misschien ergens een artikel gelezen!?

    Laat het ff weten.....

    danku...
    Everybody lies, but it doesn't matter since nobody listens.

  2. #2
    Daar heb je dus nou net één van de nadelen van Access te pakken: er is geen database server. Zou je met bijvoorbeeld Interbase of MySQL werken dan zou je je server ook gewoon vanaf afstand kunnen benaderen.

    Maar goed, daar schiet je nu niets mee op. Twee mogelijkheden schieten me zo te binnen: Midas gebruiken of je tabel FTP'en en dan inlezen.

    Kies je voor Midas dan ga je op je webserver een Midas server neerzetten. Op die server staat een DataSet gekoppeld aan een Provider, die DataSet gaat zorgen voor het opslaan. Op je client plaats je dan een TWebConnection, hieraan koppel je een ClientDataset. Op de client zet je ook een gewone dataset, verbonden met je lokale Access database. Vervolgens ga je je data overzetten van je lokale dataset naar je ClientDataSet, door middel van een ApplyUpdates wordt je data naar de provider op de server gestuurd die e.e.a. dan vervolgens kan opslaan. Eeeh, ik weet niet of dit de simepelste manier is .

    De tweede manier is dat je je lokale tabel via FTP naar je webserver overzet (gebruik Indy om eventueel zelf een FTP Client te maken). Vervolgens lees je met je web applicatie de tabel in en zet je hem over naar de echte database.

    Terwijl ik zit te tikken bedenk ik nog een derde methode: http Post. In de WebDelphi artikelen heb je kunnen zien dat er een Post en een Get bestaat. Als je je tabel gewoon zou vullen vanuit een formulier zou dat met een Post uiteindelijk resulteren in een URL als volgt:

    www.Server.com/cgi-bin/SaveAccessData?Name=Marcel&Adres=Thuis&Telefoon=Ja .

    Zo'n URL kun je natuurlijk heel eenvoudig zelf genereren en vervolgens met het HTTP component van Indy posten. Je webserver 'denkt' dan dat een gebruiker zojuist een formulier heeft ingevuld en op OK heeft geklikt en voor hem maakt het dus geen verschil.

    Misschien kom je hiermee een beetje op gang, zeg maar waar je voor wilt kiezen dan gaan we meedenken
    Marcel

  3. #3
    Midas en Indy ken ik helaas niet... tenminste midas niet indy net gelezen in forum...

    Ik heb een keer een of andere trial gedownload en die deed ook zoiets... tenminste die las de contacs van outlook uit en zette die in een access database..
    dat werkte als volgt:

    op het moment dat je da knopje indrukte dan moest je zo'n programmatje installeren en kreeg je zo'n venster (net als je bv. flash cab moet installeren) er kwam dan een nieuw venster en dan kon je dus de contacts selecteren en dan op next klikken en de contacts werden in je access database gezet. (dit ging toen bij mij via een netwerk dus met een webserver)

    maar goed...

    zoiets zal dan moeten natuurlijk, of gewoon een programmatje downloaden en dan starten, dat maakt met niet zoveel uit.. als het maar werkt snaps..?

    maar je denkt dat dit dus met dat indy verhaal kan. Dus dat iemand op zijn pc klikt op haal gegevens uit database en dat ie dan een progje start en dan de gegevens uiit zijn tabel haalt en die terug stuurt naar de server?

    Zo'n post of get kan wel, maar op het moment dat er 30 rijen met 10 velden uit de tabel worden gehaald krijg je dus 300 dingen achter je ? beetje omslachtig...

    eigenlijk zou dat programmatje wat gedownload wordt gewoon moeten zeggen:

    select * form tabel_lokaal;
    insert into tabel_op_server;

    en als je dat afsluit dat het dan erin zit....
    Everybody lies, but it doesn't matter since nobody listens.

  4. #4
    eigenlijk zou dat programmatje wat gedownload wordt gewoon moeten zeggen:
    Dat zou eigenlijk moeten, maar je hebt geen database server waar je tegenaan kunt praten zoals b.v. sql.nldelphi.com. Ik zal wel eens wat gaan testen met de POST method, ben er zelf ook wel benieuwd naar.
    Marcel

  5. #5
    Maar dat kan wel want die ene trial deed dat ook....

    ik kan met niet voorstellen dat je zoiets met een post gaat doen, zie je het al voor je


    test.html?id1=1&naam1=jan&anaam1=klaassen&age1=32& sex1=man&id2=2&naam2=piet&anaam2=bax&age2=31&sex2= man

    en dan zo heel die tabel af zeker.... denk het niet....
    Everybody lies, but it doesn't matter since nobody listens.

  6. #6
    Maar dat kan wel want die ene trial deed dat ook....
    Welke trial?
    Marcel

  7. #7
    ik kan met niet voorstellen dat je zoiets met een post gaat doen, zie je het al voor je
    Toch is dat ook de manier waarop je het zou doen als je wel een database server had. Alleen zou je het dan meteen in de database doen met insert statements (insert into x (Naam, Adres, Telefoon) values ('Marcel', 'Thuis', 'Ja')). Eigenlijk is dit een erg versimpelde versie van webservices.
    Marcel

  8. #8
    Dat is nou eigenlijk het probleem ook een beetje, ik weet niet meer welke trial dat was...


    Ja in principe heb je wel gelijk ja....


    ok mee eens....

    maar stel nou dat dus dat programma klaar is met inlezen.... dan zou je dus weer een extra browser window moeten openen en connecten met die server..

    dat ziet er ook niet uit natuurlijk....

    maar goed, dat is natuurlijk een probleem voor later.
    Everybody lies, but it doesn't matter since nobody listens.

  9. #9
    Dat hoeft niet. De POST hoef je niet in de browser uit te voeren, dat doe je gewoon in de achtergrond terwijl de gebruiker zit te kijken naar 'Wijzigingen worden opgeslagen, een ogenblikje AUB...'
    Marcel

  10. #10
    O ja! JA! JA! Dat bedoel ik inderdaad!

    Maar hoe? Ik zou het echt niet weten...
    Everybody lies, but it doesn't matter since nobody listens.

  11. #11
    Ik ga even wat verzinnen, staat vanavond wel op de site denk ik.
    Marcel

  12. #12
    Tof!

    Hiero in het forum of waar mag ik zoeken ?!
    Everybody lies, but it doesn't matter since nobody listens.

  13. #13
    Het werkt! Ik heb net 203 regel van een Delphi programma naar de server overgezet. Dat duurde 25 seconden dus dat valt nog alles mee. Ik heb het volgende gedaan:

    Als eerste heb ik op de webserver applicatie een Query component neergezet, in mijn geval heb ik componenten voor MySQL gebruikt, maar voor Access is het principe hetzelfde. Vervolgens heb ik een nieuw item gemaakt met de volgende code:

    Code:
    procedure TWebModule1.WebModule1PostDemoItemAction(Sender: TObject;
      Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
    var
      TableName: string;
      FieldList: string;
      ValueList: string;
      FieldName: string;
      i: Integer;
    begin
      TableName := Request.QueryFields.Values['TableName'];
      FieldList := '';
      ValueList := '';
    
      with Request.QueryFields do
      begin
        { Beginnen bij 1 omdat 0 de tabelnaam is }
        for i := 1 to Count-1 do
        begin
          FieldName := Names[i];
          FieldList := FieldList + FieldName + ', ';
          ValueList := ValueList + '"' + Values[FieldName] + '"' + ', ';
        end;
    
        { Verwijder laatste komma }
        FieldList := Copy(FieldList, 1, Length(FieldList)-2);
        ValueList := Copy(ValueList, 1, Length(ValueList)-2);
      end;
    
      MySqlQuery.Sql.Text := 'INSERT INTO ' + TableName + ' (' + FieldList + ') ' +
      'VALUES (' + ValueList + ')';
      MySqlQuery.ExecSql;
    end;
    Deze routine accepteerd dus een URL in de vorm /PostDemo?TabelNaam=Tabel&Veld1=Waarde1&Veld2=Waard e2 enz...

    Vervolgens heb ik een gewone applicatie gemaakt, hierop heb ik een ADOConnection en een ADOQuery neergezet om de lokale data op te halen. De query bevat het volgende:
    Code:
    select PartNo, 
              VendorNo, 
              Description, 
              OnHand, 
              OnOrder, 
              Cost, 
              ListPrice 
    from    parts
    order by Description
    Ook heb ik hier een Indy http component neergezet en de volgende code gebruikt om de tabel te uploaden:
    Code:
    procedure TMainForm.PostButtonClick(Sender: TObject);
    
      function FitForURL(const Text: string): string;
      begin
        Result := Text;
        Result := StringReplace(Result, ' ', '%20', [rfReplaceAll]);
        Result := StringReplace(Result, '&', '%26', [rfReplaceAll]);
      end;
    
    var
      i: Integer;
      PostString: string;
      Response: string;
    begin
      PartsData.Open;
      PartsData.First;
    
      while not PartsData.Eof do
      begin
        PostString := 'http://www.nldelphi.com/cgi-bin/webdelphi.exe/postdemo?' +
        'TableName=PostDemo&';
    
        with PartsData do
          for i := 0 to FieldCount-1 do
            PostString := PostString +
              Fields[i].FieldName + '=' + FitForURL(Fields[i].AsString) + '&';
    
        PostString := Copy(PostString, 1, Length(PostString)-1);
    
        Response := HTTP.Get(PostString);
        PartsData.Next;
      end;
    end;
    Let even op die FitForURL, die is nodig omdat je geen data mag versturen met een spatie of een &. Die moet ds even worden vervangen. Het is allemaal nog wat ruw, maar volgens mij moet het idee duidelijk zijn.
    Marcel

  14. #14
    Zit er trouwens aan de lengte van zo'n querystring geen beperking? Dus dat ie niet te lang mag zijn...
    Everybody lies, but it doesn't matter since nobody listens.

  15. #15
    Heb net Indy gedownload, weet alleen niet welke componenten ik moet gebruiken.
    Zou je anders jouw sources van die 2 progjes even kunnen mailen ofzo dan kijk ik zelf wel hoe het in elkaar steekt en als ik het dan niet begrijp dan lees je het wel...
    Everybody lies, but it doesn't matter since nobody listens.

Thread Information

Users Browsing this Thread

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

Similar Threads

  1. Copy c:\File.bmp naar webserver
    By tecknow@euronet in forum .NET
    Replies: 3
    Last Post: 12-Mar-05, 00:29
  2. Bestand uploaden naar ftp
    By sn0x0r in forum Algemeen
    Replies: 9
    Last Post: 08-Jun-04, 22:00
  3. SQL resultaat naar Delphi
    By Siemons in forum Databases
    Replies: 5
    Last Post: 17-Feb-04, 20:10
  4. Record toevoegen aan tabel ?
    By hsenden in forum Algemeen
    Replies: 4
    Last Post: 23-Dec-01, 23:24

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
  •