亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? uwebdataaccess.pas

?? 抽象三層訪問數據庫示例
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
var
  strURL: string;
begin
  strURL := Format('%s%s?' + GeneratorIDURL, [WebURL, OperateBaseURL, TableName]);
  Result := RequestRemoteGet(strURL);
end;

function TWebDataAccess.GetIdHTTP: TIdHTTP;
begin
  if not Assigned(FIdHTTP) then
  begin
    FIdHTTP := TIdHTTP.Create(self);
    FIdHTTP.HTTPOptions := [];
  end;
  Result := FIdHTTP;
end;

function TWebDataAccess.RequestRemoteGet(URL: string): string;
begin
  //application/x-www-form-urlencoded
  Result := '';
  try
    if IdHTTP.Connected then
      IdHTTP.Disconnect;
    Result := IdHTTP.Get(URL);
  except
    on e: Exception do
    begin
      if IdHTTP.Connected then
        IdHTTP.Disconnect;
      raise Exception.CreateFmt('請求服務器失敗.'#13#10'地址: %s'#13#10'錯誤信息: %s',
        [URL, e.Message]);
    end;
  end;
end;

procedure TWebDataAccess.RequestRemoteGet(URL: string; ResponseContent: TStream);
begin
  try
    if IdHTTP.Connected then
      IdHTTP.Disconnect;
    IdHTTP.Get(URL, ResponseContent);
  except
    on e: Exception do
    begin
      if IdHTTP.Connected then
        IdHTTP.Disconnect;
      raise Exception.CreateFmt('請求服務器失敗.'#13#10'地址: %s'#13#10'錯誤信息: %s',
        [URL, e.Message]);
    end;
  end;
end;

function TWebDataAccess.RequestRemotePost(URL: string; Source: TStream): string;
begin
  Result := '';
  try
    if IdHTTP.Connected then
      IdHTTP.Disconnect;
    Result := IdHTTP.Post(URL, Source);
  except
    on e: Exception do
    begin
      if IdHTTP.Connected then
        IdHTTP.Disconnect;
      raise Exception.CreateFmt('請求服務器失敗.'#13#10'地址: %s'#13#10'錯誤信息: %s',
        [URL, e.Message]);
    end;
  end;
end;

procedure TWebDataAccess.RequestRemotePost(URL: string; Source: TStrings;
  ResponseContent: TStream);
var
  strURL: string;
begin
  try
    if IdHTTP.Connected then
      IdHTTP.Disconnect;
    IdHTTP.Post(URL, Source, ResponseContent);
  except
    on e: Exception do
    begin
      if IdHTTP.Connected then
        IdHTTP.Disconnect;
      strURL := URL;
      if Source.Count > 0 then
      begin
        Source.Delimiter := '&';
        strURL := Format('%s?%s', [strURL, Source.DelimitedText]);
      end;
      raise Exception.CreateFmt('請求服務器失敗.'
        + #13#10'地址: %s'
        + #13#10'錯誤信息: %s',
        [strURL, e.Message]);
    end;
  end;
end;

function TWebDataAccess.RequestRemotePost(URL, Params: string): string;
var
  tmpRequest: TStringList;
begin
  Result := '';
  tmpRequest := TStringList.Create;
  try
    tmpRequest.Text := Params;
    Result := RequestRemotePost(URL, tmpRequest);
  finally
    tmpRequest.Free;
  end;
end;

procedure TWebDataAccess.RequestRemotePost(URL, Params: string;
  ResponseContent: TStream);
var
  tmpRequest: TStringList;
begin
  tmpRequest := TStringList.Create;
  try
    tmpRequest.Text := Params;
    RequestRemotePost(URL, tmpRequest, ResponseContent);
  finally
    tmpRequest.Free;
  end;
end;

function TWebDataAccess.RequestRemotePost(URL: string;
  Source: TStrings): string;
var
  strURL, strURLParams: string;
begin
  Result := '';
  try
    if IdHTTP.Connected then
      IdHTTP.Disconnect;
    Result := IdHTTP.Post(URL, Source);
  except
    on e: Exception do
    begin
      if IdHTTP.Connected then
        IdHTTP.Disconnect;
      strURL := URL;
      if Source.Count > 0 then
      begin
        Source.Delimiter := '&';
        strURLParams := Source.DelimitedText;
        if strURLParams <> '' then
        begin
          if strURLParams[1] = '"' then
            Delete(strURLParams, 1, 1);
          if strURLParams[Length(strURLParams)] = '"' then
            Delete(strURLParams, Length(strURLParams), 1);
        end;
        strURL := Format('%s?%s', [strURL, strURLParams]);
      end;
      raise Exception.CreateFmt('請求服務器失敗.'
        + #13#10'地址: %s'
        + #13#10'錯誤信息: %s',
        [strURL, e.Message]);
    end;
  end;
end;

procedure TWebDataAccess.RequestRemotePost(URL: string; Source,
  ResponseContent: TStream);
begin
  try
    if IdHTTP.Connected then
      IdHTTP.Disconnect;
    IdHTTP.Post(URL, Source, ResponseContent);
  except
    on e: Exception do
    begin
      if IdHTTP.Connected then
        IdHTTP.Disconnect;
      raise Exception.CreateFmt('請求服務器失敗.'#13#10'地址: %s'#13#10'錯誤信息: %s',
        [URL, e.Message]);
    end;
  end;
end;

function TWebDataAccess.UpdateBatchData(BatchDataList: TList): Boolean;
var
  strURL, strURLParams, strResponse: string;
begin
  strURL := Format('%s%s', [WebURL, OperateBaseURL]);
//  ShowMessage('begin batch data to xml');
  strURLParams := Format(UpdateDataURL, [ParamsEncode(DataAsXML(BatchDataList))]);
//  ShowMessage('begin request update');
  strResponse := RequestRemotePost(strURL, strURLParams);
//  ShowMessage('end request update');
  Result := StrToBoolDef(strResponse, False);
end;

function TWebDataAccess.UpdateBlobContent(const TableName, KeyFieldName,
  KeyFieldValue, BlobFieldName: string;
  BlobFieldContent: TStream): boolean;
var
  strURL, strResponse: string;
begin
  strURL := Format('%s%s?' + UpdateBlobContentURL, [WebURL, OperateBaseURL,
    TableName, ParamsEncode(KeyFieldName), ParamsEncode(FillKeyValues(KeyFieldName,
      KeyFieldValue)), BlobFieldName]);
  strResponse := RequestRemotePost(strURL, BlobFieldContent);
  Result := StrToBoolDef(strResponse, False);
end;

function TWebDataAccess.UpdateData(Data: OleVariant; const TableNameOrSQL,
  KeyFields: string): Boolean;
var
  strURL, strURLParams, strResponse: string;
begin
  strURL := Format('%s%s', [WebURL, OperateBaseURL]);
  strURLParams := Format(UpdateDataURL, [ParamsEncode(DataAsXML(Data, TableNameOrSQL, KeyFields))]);
  strResponse := RequestRemotePost(strURL, strURLParams);
  Result := StrToBoolDef(strResponse, False);
end;

function TWebDataAccess.URLEncode(URL: string): string;
begin
  Result := TIdURI.URLEncode(URL);
end;

function TWebDataAccess.ParamsEncode(Params: string): string;
begin
  Result := TIdURI.ParamsEncode(Params);
end;

function TWebDataAccess.XMLAsData(XML: string; TableNameOrIndex: Variant): OleVariant;
var
  XMLDocument: IXMLDocument;
  XMLChildNode: IXMLNode;
  i, intTableIndex: integer;
  strTableName: string;
  blnIndex: boolean;
begin
  blnIndex := VarType(TableNameOrIndex) in [varByte, varSmallint, varInteger,
    varShortInt, varWord, varLongWord, varInt64];
  if blnIndex then
    intTableIndex := TableNameOrIndex
  else
    strTableName := TableNameOrIndex;
  XMLDocument := LoadXMLData(XML);
  try
    for i := 0 to XMLDocument.DocumentElement.ChildNodes.Count - 1 do
    begin
      XMLChildNode := XMLDocument.DocumentElement.ChildNodes[i];
      if TXMLHelper.NodeNameEqual(XMLChildNode, 'TABLE')
        and ((blnIndex and (i = intTableIndex))
          or ((not blnIndex) and TXMLHelper.AttributeEqual(XMLChildNode, 'NAME', strTableName))) then
      begin
        Result := XMLAsData(XMLChildNode);
        break;
      end;
    end;
  finally
    XMLDocument := nil;
  end;
end;

function TWebDataAccess.XMLAsData(XML: string): OleVariant;
var
  XMLDocument: IXMLDocument;
  XMLChildNode: IXMLNode;
  i: integer;
  DataArray: TDataArray;
begin
  XMLDocument := LoadXMLData(XML);
  try
    for i := 0 to XMLDocument.DocumentElement.ChildNodes.Count - 1 do
    begin
      XMLChildNode := XMLDocument.DocumentElement.ChildNodes[i];
      if TXMLHelper.NodeNameEqual(XMLChildNode, 'TABLE') then
      begin
        SetLength(DataArray, High(DataArray) + 2);
        DataArray[High(DataArray)] := XMLAsData(XMLChildNode);
      end;
    end;
    Result := DataArray;
  finally
    XMLDocument := nil;
  end;
end;

function TWebDataAccess.XMLAsData(AXMLNode: IXMLNode): OleVariant;
var
  XMLDocument: IXMLDocument;
  XMLChildNode: IXMLNode;
  XMLMetaDataNode, XMLKeyFieldsNode, XMLFieldsNode: IXMLNode;
  tmpCDS: TClientDataSet;
  tmpStream: TMemoryStream;
  i: integer;
  strFieldType: string;
const
  FieldTypeR8 = 'TINYINT;SMALLINT;INTEGER;BIGINT;FLOAT;REAL;DOUBLE;NUMERIC;DECIMAL';
  FieldTypeDate = 'DATETIME;DATE;TIME;TIMESTAMP';
begin
//AXMLNode: XML中的"Table"節點
  tmpCDS := TClientDataSet.Create(Self);
  tmpStream := TMemoryStream.Create;
  XMLDocument := TXMLHelper.NewXMLDocument('1.0', 'GBK', 'DATAPACKET');
  try
    XMLDocument.Options := XMLDocument.Options + [doNodeAutoIndent];
    TXMLHelper.AddAttributes(XMLDocument.DocumentElement, 'Version=2.0');
    //按TClientDataSet的XML格式復制節點
    for i := 0 to AXMLNode.ChildNodes.Count - 1 do
    begin
      XMLChildNode := AXMLNode.ChildNodes[i].CloneNode(true);
      XMLDocument.DocumentElement.ChildNodes.Add(XMLChildNode);
    end;
    XMLMetaDataNode := TXMLHelper.GetChildNode(XMLDocument.DocumentElement, 'METADATA');
    XMLKeyFieldsNode := TXMLHelper.GetChildNode(XMLMetaDataNode, 'KEYFIELDS');
    XMLFieldsNode := TXMLHelper.GetChildNode(XMLMetaDataNode, 'FIELDS');
    //刪除"KEYFIELDS"節點
    if XMLKeyFieldsNode <> nil then
      XMLMetaDataNode.ChildNodes.Delete(XMLMetaDataNode.ChildNodes.IndexOf(XMLKeyFieldsNode));
    //修改傳回來的數據類型"FIELDS"
    if XMLFieldsNode <> nil then
      for i := 0 to XMLFieldsNode.ChildNodes.Count - 1 do
      begin
        XMLChildNode := XMLFieldsNode.ChildNodes[i];
        if TXMLHelper.NodeNameEqual(XMLChildNode, 'FIELD') then
        begin
          strFieldType := TXMLHelper.GetNodeAttributeValue(XMLChildNode, 'fieldtype');
          if ParamExists(FieldTypeR8, strFieldType, true) then
            strFieldType := 'r8'
          else if ParamExists(FieldTypeDate, strFieldType, true) then
            strFieldType := 'dateTime'
          else
            strFieldType := 'string';
          TXMLHelper.AddAttributes(XMLChildNode, 'fieldtype=' + strFieldType);
        end;
      end;
    XMLDocument.SaveToStream(tmpStream);
    tmpStream.Position := 0;
    tmpCDS.LoadFromStream(tmpStream);
    if tmpCDS.ChangeCount > 0 then
      tmpCDS.MergeChangeLog;
    Result := tmpCDS.Data;
  finally
    XMLDocument := nil;
    tmpStream.Free;
    tmpCDS.Free;
  end;
end;

function TWebDataAccess.FillKeyValues(KeyFields,
  KeyValues: string): string;
var
  i: integer;
  strKeyValue: string;
begin
  if Pos(';', KeyValues) = 0 then
    Result := CopySubStr(KeyValues)
  else
  begin
    Result := '';
    for i := 0 to SubStrCount(KeyFields) do
    begin
      strKeyValue := CopySubStr(KeyValues, i);
      if strKeyValue = '' then
        Result := Result + '<null>;'
      else
        Result := Result + strKeyValue + ';';
    end;
    if Result <> '' then
      Delete(Result, Length(Result), 1);
  end;
end;

function TWebDataAccess.GetFileContent(const AFileName: string;
  FileContent: TStream): boolean;
var
  strURL, strFileName: string;
begin
  strFileName := AFileName;
  if strFileName = '' then
    raise Exception.Create('遠程文件路徑為空');
  if strFileName[1] = '/' then
    Delete(strFileName, 1, 1);
  strURL := Format('%s%s', [WebURL, strFileName]);
  RequestRemoteGet(strURL, FileContent);
  Result := True;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美肥妇bbw| 日产精品久久久久久久性色| 亚洲国产一二三| 国产一区二区三区四| 欧美视频在线播放| 久久麻豆一区二区| 青青草国产成人av片免费| 99国产麻豆精品| 国产欧美日韩视频在线观看| 日本三级亚洲精品| 欧美色倩网站大全免费| 中文字幕亚洲综合久久菠萝蜜| 极品美女销魂一区二区三区 | 9i看片成人免费高清| 欧美三级日本三级少妇99| 亚洲欧洲在线观看av| 国产综合色视频| 日韩欧美国产电影| 亚洲高清视频在线| 色综合久久中文字幕综合网| 亚洲线精品一区二区三区| 成人毛片视频在线观看| 久久先锋影音av鲁色资源| 免费成人美女在线观看.| 在线播放一区二区三区| 午夜精品久久久久久久蜜桃app| 99精品在线免费| 综合色中文字幕| 一本大道久久a久久精品综合| 中文字幕一区二区三区在线不卡 | 欧美午夜理伦三级在线观看| 国产精品久久久久aaaa| 懂色av一区二区在线播放| 国产蜜臀av在线一区二区三区| 国产成人丝袜美腿| 国产拍欧美日韩视频二区| 成人精品一区二区三区四区| 自拍偷拍国产精品| 欧美亚洲动漫另类| 日韩国产高清在线| 久久综合丝袜日本网| 成人性视频网站| 亚洲欧美日韩系列| 欧美日韩久久久一区| 麻豆91免费观看| 国产欧美一区二区三区在线老狼| 国产成人av一区| 一区二区三区蜜桃| 日韩欧美在线一区二区三区| 久久国产麻豆精品| 国产精品天天摸av网| 91视视频在线观看入口直接观看www | 欧美日韩夫妻久久| 国产在线播放一区三区四| 国产欧美一区二区三区在线看蜜臀 | 国产精品伊人色| 亚洲桃色在线一区| 欧美一级日韩一级| 成人手机电影网| 丝袜美腿一区二区三区| 久久一夜天堂av一区二区三区 | 欧美日韩国产成人在线免费| 久久国产视频网| 亚洲欧美日韩精品久久久久| 欧美夫妻性生活| 国产91精品精华液一区二区三区| 亚洲精品免费一二三区| 日韩精品专区在线影院重磅| a4yy欧美一区二区三区| 麻豆精品在线观看| 国产精品国产自产拍高清av| 在线观看91av| 91美女蜜桃在线| 精品一区二区在线看| 一区二区三区四区激情| 2023国产一二三区日本精品2022| 欧洲视频一区二区| 国产99久久久国产精品潘金| 日韩激情一二三区| 亚洲女同一区二区| 国产午夜亚洲精品理论片色戒| 欧美精品久久99| 91亚洲国产成人精品一区二区三| 精品一区二区日韩| 日韩国产欧美在线视频| 亚洲综合激情另类小说区| 国产女人18毛片水真多成人如厕 | 成人av电影免费观看| 美女www一区二区| 亚洲一区二区在线免费观看视频| 国产精品美女久久久久久久久| 日韩一级成人av| 欧美日韩一区三区四区| 日本韩国欧美在线| 99精品在线免费| av毛片久久久久**hd| 国产乱码精品一品二品| 久久成人综合网| 亚洲国产视频网站| 亚洲精品欧美二区三区中文字幕| 国产精品成人在线观看| 国产欧美日韩另类一区| 久久久亚洲欧洲日产国码αv| 日韩一区二区三区在线| 91精品国产一区二区| 91精品国产91热久久久做人人 | 日韩成人一级片| 三级欧美在线一区| 婷婷亚洲久悠悠色悠在线播放| 亚洲国产精品影院| 丝袜美腿亚洲一区| 青青草97国产精品免费观看无弹窗版 | 亚洲视频你懂的| ●精品国产综合乱码久久久久| 国产精品污污网站在线观看| 国产精品久久久久毛片软件| 国产精品色噜噜| 亚洲欧美一区二区三区国产精品| 日韩美女久久久| 亚洲综合色区另类av| 亚洲777理论| 日韩精品三区四区| 国内精品免费在线观看| 国产精品一区二区91| 国产**成人网毛片九色| 91一区一区三区| 欧美日韩国产大片| 精品国产乱码久久久久久久| 久久精品人人爽人人爽| 国产精品色哟哟| 亚洲国产你懂的| 久久精品国产色蜜蜜麻豆| 国产成人综合亚洲91猫咪| 99精品视频在线播放观看| 91高清视频在线| 欧美不卡一二三| 中文字幕一区三区| 午夜精品久久久久久久久久| 韩国欧美国产一区| 色婷婷久久久综合中文字幕 | 欧美日韩小视频| 久久久久久久国产精品影院| 国产精品成人一区二区三区夜夜夜| 亚洲综合999| 久久不见久久见免费视频1| 成人小视频免费观看| 欧美电影一区二区| 中文字幕免费不卡在线| 亚洲va韩国va欧美va精品| 国产一区二区三区四区在线观看| 色爱区综合激月婷婷| 欧美一区二区三区的| 国产精品入口麻豆原神| 午夜亚洲福利老司机| 成人综合婷婷国产精品久久蜜臀| 在线观看一区不卡| 久久女同性恋中文字幕| 亚洲国产视频在线| 国产**成人网毛片九色 | 中文字幕国产精品一区二区| 亚洲成人av中文| av在线综合网| 精品美女被调教视频大全网站| 亚洲精品久久久久久国产精华液| 精品一区二区三区免费播放| 欧美日韩一区二区三区在线| 欧美国产成人精品| 美日韩一级片在线观看| 91免费看片在线观看| 国产亚洲欧美中文| 久久精品99国产精品日本| 欧美日韩欧美一区二区| 国产精品毛片a∨一区二区三区| 日本午夜一区二区| 欧美又粗又大又爽| 国产精品久线在线观看| 国产一二精品视频| 欧美一区二区高清| 日韩精品五月天| 在线日韩一区二区| 亚洲欧美精品午睡沙发| 不卡的av网站| 天天av天天翘天天综合网色鬼国产| 成人av综合一区| 欧美一级xxx| 日本不卡不码高清免费观看| 欧美日韩不卡一区| 亚洲成人av资源| 欧美日韩精品欧美日韩精品| 亚洲精品乱码久久久久| 91在线高清观看| 亚洲日穴在线视频| 97精品电影院| 亚洲激情第一区| 欧美在线999| 婷婷六月综合网| 欧美一区二区视频网站| 奇米一区二区三区av| 欧美大片在线观看一区| 久久成人免费电影|