我有firebird数据库,需要将一个数据库表上传到web上的远程mysql服务器。有数千条记录,我不知道如何上传这些记录。我可以用JSON逐个上传记录。我正在使用POST方法。
如何一次或部分上传所有记录?
更新1:此代码适用于逐个数据更新。但它就像是这样的洪水袭击。我想上传我一次选择的所有数据。
Delphi 7 Side HTTP Post方法
function PostURLAsString(aURL: string; code:string): string;
var
lHTTP: TIdHTTP;
lStream: TStringStream;
parameters: TStringList;
begin
lHTTP := TIdHTTP.Create(nil);
lHTTP.Request.ContentType := 'application/x-www-form-urlencoded';
lStream := TStringStream.Create(Result);
try
Parameters := TStringList.Create;
parameters.Add('code=' + code);
lHTTP.Post(aURL, parameters,lStream);
lStream.Position := 0;
Result := lStream.ReadString(lStream.Size);
finally
FreeAndNil(lHTTP);
FreeAndNil(lStream);
end;
end;
逐个上传记录:
procedure TForm1.Button1Click(Sender: TObject);
var
js:TlkJSONobject;
jb: TlkJSONbase;
s: String;
code:string;
begin
IBQuery1.First;
with IBQuery1 do
while not Eof do
begin
code := VarToStr(FieldValues['code']);
s := PostURLAsString('http://www.domain.com/uitems.php', code);
js := TlkJSON.ParseText(s) as TlkJSONobject;
jb := js.Field['items'];
if VarToStr(jb.Child[0].Field['status'].Value) = '1' then
ListBox1.Items.Add(code + ' is inserted')
else
ListBox1.Items.Add(code + ' is not inserted');
Application.ProcessMessages;
js.Free;
Next;
end;
end;
PHP端 的 uitems.php
<?php
include_once dirname(__FILE__) .'/DBConnect.php';
function update($code){
$db = new DbConnect();
// array for json response
$response = array();
$response["items"] = array();
$sqlstr = "INSERT INTO items (`code`) VALUES ('$code')";
$result = mysql_query($sqlstr);
$tmp = array();
if ($result) {
// successfully updated
$tmp["status"] = 1; //inserted
} else {
$tmp["status"] = 0; //not inserted
}
array_push($response["items"], $tmp);
header("Content-Type: application/json; charset=utf-8", true);
// echoing json result
echo json_encode($response, JSON_UNESCAPED_UNICODE);
}
update($_POST["code"]);
?>
答案 0 :(得分:2)
您可以使用JSON发送数据数组。只需在Delphi端准备该数组,将其发送到您的脚本并对您的数组的每个项执行查询。您也可以返回一个数组,其中包括您上传的每个数组项的成功消息。