У меня есть база данных Firebird и мне нужно загрузить одну из таблиц базы данных на удаленный сервер MySQL в сети. Есть тысячи записей, и я не знаю, как загрузить эти записи. Я могу загружать записи по одной с JSON. Я использую метод POST.
Как я могу загрузить все записи за один раз или по частям?
Обновление 1: Этот код работает для одного за другим обновления данных. Но это как такая атака наводнения. Я хочу загрузить все данные, которые я выбрал, за один раз.
Delphi 7 Side
HTTP Post Method
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"]);
?>
Вы можете отправлять массивы данных, используя JSON. Просто подготовьте этот массив на стороне Delphi, отправьте его в ваш скрипт и выполните запрос для каждого элемента вашего массива. Вы также можете вернуть массив, который включает в себя сообщения об успешном выполнении для каждого загруженного вами элемента массива.
Других решений пока нет …