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.
Bookmarks