⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mysqlcommon.pas

📁 通过Tmysql来访问MSQL Server数据库的应用案例.
💻 PAS
📖 第 1 页 / 共 5 页
字号:
function TmySQLClientQuery.GetIndexByFieldName(const FieldString : string) : integer;
begin
  Result:=-1;

  if FCurrentTaskData.F_presults=nil then exit;

  if not FFieldsLoaded then GetFields;

  Result:=FFields.IndexOf(FieldString);
end;

function TmySQLClientQuery.DataByFieldName(const i : longint; const FieldString : string) : pchar;
var
  j : integer;
begin
  Result:='';

  j:=GetIndexByFieldName(FieldString);

  if j<0 then exit;

  Result:=Data(i,j);
end;

//----------------------------------------------------------------------------
//----------------------------------------------------------------------------

destructor TmySQLClientModifyData.Destroy;
begin
  StrDispose(pData);

  inherited;
end;

constructor TmySQLClientModify.Create;
begin
  inherited Create;

  FTaskHandler:=nil;
  
  FData       :=TStringList.Create;
end;

destructor TmySQLClientModify.Destroy;
begin
  Reset;

  FData.Free;

  inherited;
end;

procedure TmySQLClientModify.Reset;
var
  i : integer;
  D : TmySQLClientModifyData;
begin
  for i:=0 to FData.Count-1 do begin
    D:=TmySQLClientModifyData(FData.Objects[i]);
    D.Free;
  end;
  FData.Clear;
end;

procedure TmySQLClientModify.Add(const Column : string; Data : pchar);
var
  D : TmySQLClientModifyData;
begin
  D:=TmySQLClientModifyData.Create;
  D.pData:=StrAlloc(MAX_SQL_LENGTH);

  StrCopy(D.pData,Data);
  FData.AddObject(Column,D);
end;

procedure TmySQLClientModify.AddString(const Column : string; const Data : string);
var
  D : TmySQLClientModifyData;
begin
  D:=TmySQLClientModifyData.Create;
  D.pData:=StrAlloc(Length(Data)+1);
  StrPCopy(D.pData,Data);

  FData.AddObject(Column,D);
end;

procedure TmySQLClientModify.AddInteger(const Column : string; const Data : integer);
var
  D : TmySQLClientModifyData;
  sTemp : string;
begin
  sTemp:=IntToStr(Data);

  D:=TmySQLClientModifyData.Create;
  D.pData:=StrAlloc(Length(sTemp)+1);
  StrPCopy(D.pData,sTemp);

  FData.AddObject(Column,D);
end;

procedure TmySQLClientModify.AddMemo(const Column : string; Memo : TMemo);
var
  iTemp : integer;
  pTemp : pchar;
begin
  iTemp:=StrLen(Memo.Lines.GetText);
  if iTemp>0 then begin
    pTemp:=StrAlloc(MAX_MEMO_LENGTH);
    pTemp^:=#0;
    Add(Column,Quote(pTemp,Memo.Lines.GetText,iTemp,[QUOTE_STRIP_CR]));
    StrDispose(pTemp);
  end
  else
    Add(Column,'NULL');
end;

procedure TmySQLClientModify.Combine(T : TmySQLClientTaskData);
var
  pStrTemp : array[0..255] of char;
  i : integer;
  D : TmySQLClientModifyData;
begin
  with T do begin

  FillChar(F_query^,MAX_SQL_LENGTH,#0);

    case F_modifytype of
      MODIFY_CREATE_TABLE: begin
        StrCopy(F_query,'CREATE TABLE ');
        StrCat(F_query,StrPCopy(pStrTemp,F_table+' ('));

        for i:=0 to FData.Count-1 do begin
          D:=TmySQLClientModifyData(FData.Objects[i]);
          StrCat(F_query,StrPCopy(pStrTemp,FData.Strings[i]+' '));
          StrCat(F_query,D.pData);
          if i<>FData.Count-1 then
            StrCat(F_query,',');
        end;

        StrCat(F_query,')');
      end;

      MODIFY_DROP_TABLE: begin
        StrPCopy(F_query,'DROP TABLE '+F_table);
      end;

      MODIFY_INSERT, MODIFY_REPLACE_INTO: begin
        if F_modifytype = MODIFY_UPDATE then
          StrCopy(F_query,'INSERT INTO ')
        else
          StrCopy(F_query,'REPLACE INTO ');

        StrCat(F_query,StrPCopy(pStrTemp,F_table+' ('));

        for i:=0 to FData.Count-1 do begin
          StrCat(F_query,StrPCopy(pStrTemp,FData.Strings[i]));
          if i<>FData.Count-1 then
            StrCat(F_query,',');
        end;

        StrCat(F_query,') VALUES (');

        for i:=0 to FData.Count-1 do begin
          D:=TmySQLClientModifyData(FData.Objects[i]);
          StrCat(F_query,D.pData);
          if i<>FData.Count-1 then
            StrCat(F_query,',');
        end;
        StrCat(F_query,')');

        if F_condition<>nil then begin
          StrCat(F_query,' ');
          StrCat(F_query,F_condition);
        end;
      end;

      MODIFY_UPDATE: begin
        StrCopy(F_query,'UPDATE ');

        StrCat(F_query,StrPCopy(pStrTemp,F_table+' SET '));

        for i:=0 to FData.Count-1 do begin
          D:=TmySQLClientModifyData(FData.Objects[i]);
          StrCat(F_query,StrPCopy(pStrTemp,FData.Strings[i]+'='));
          StrCat(F_query,D.pData);
          if i<>FData.Count-1 then
            StrCat(F_query,',');
        end;
        if F_condition<>nil then begin
          StrCat(F_query,' ');
          StrCat(F_query,F_condition);
        end;
      end;

      MODIFY_DELETE: begin
        StrCopy(F_query,'DELETE FROM ');
        StrCat(F_query,StrPCopy(pStrTemp,F_table));

        if F_condition<>nil then begin
          StrCat(F_query,' ');
          StrCat(F_query,F_condition);
        end;
      end;
    end;
  end; {with}
end;

// ---------------

procedure TmySQLClientModify.PrepareCreateTableTask(
  Table : pchar;
  const TaskName : string;
  OnComplete : TmySQLClientTask_OnComplete;
  OnError    : TmySQLClientTask_OnError
);
var
  T : TmySQLClientTaskData;
begin
  T:=TmySQLClientTaskData.Create;

  with T do begin
    FName       :=TaskName;
    FPrepared   :=TRUE;
    F_table     :=Table;
    F_modifytype:=MODIFY_CREATE_TABLE;
    StrCopy(F_condition,'');
  end;

  Combine(T);

  FTaskHandler.Thread.Prepare_mysql_query(task_mysql_query,T.F_Query,TaskName,_OnComplete,_OnError,OnComplete,OnError);

  T.Free;

  Reset;
end;

procedure TmySQLClientModify.PrepareCreateTable(Table : pchar; const TaskName : string);
begin
  PrepareCreateTableTask(Table,TaskName,FDefault_OnComplete,FDefault_OnError);
end;

// ---------------

procedure TmySQLClientModify.PrepareDropTableTask(
  Table : pchar;
  const TaskName : string;
  OnComplete : TmySQLClientTask_OnComplete;
  OnError    : TmySQLClientTask_OnError
);
var
  T : TmySQLClientTaskData;
begin
  T:=TmySQLClientTaskData.Create;

  with T do begin
    FName       :=TaskName;
    FPrepared   :=TRUE;
    F_table     :=Table;
    F_modifytype:=MODIFY_DROP_TABLE;
    StrCopy(F_condition,'');
  end;

  Combine(T);

  FTaskHandler.Thread.Prepare_mysql_query(task_mysql_query,T.F_Query,TaskName,_OnComplete,_OnError,OnComplete,OnError);

  T.Free;

  Reset;
end;

procedure TmySQLClientModify.PrepareDropTable(Table : pchar; const TaskName : string);
begin
  PrepareDropTableTask(Table,TaskName,FDefault_OnComplete,FDefault_OnError);
end;

// ---------------

procedure TmySQLClientModify.PrepareInsertTask(
  Table : pchar;
  const TaskName : string;
  OnComplete : TmySQLClientTask_OnComplete;
  OnError    : TmySQLClientTask_OnError
);
var
  T : TmySQLClientTaskData;
begin
  T:=TmySQLClientTaskData.Create;

  with T do begin
    FName       :=TaskName;
    FPrepared   :=TRUE;
    F_table     :=Table;
    F_modifytype:=MODIFY_INSERT;
    StrCopy(F_condition,'');
  end;

  Combine(T);

  FTaskHandler.Thread.Prepare_mysql_query(task_mysql_query,T.F_Query,T.FName,_OnComplete,_OnError,OnComplete,OnError);

  T.Free;

  Reset;
end;

procedure TmySQLClientModify.PrepareInsert(Table : pchar; const TaskName : string);
begin
  PrepareInsertTask(Table,TaskName,FDefault_OnComplete,FDefault_OnError);
end;

// ---------------

procedure TmySQLClientModify.PrepareUpdateTask(
  Table, Condition : pchar;
  const TaskName : string;
  OnComplete : TmySQLClientTask_OnComplete;
  OnError    : TmySQLClientTask_OnError
);
var
  T : TmySQLClientTaskData;
begin
  T:=TmySQLClientTaskData.Create;

  with T do begin
    FName       :=TaskName;
    FPrepared  :=TRUE;
    F_table     :=Table;
    F_modifyType:=MODIFY_UPDATE;
    StrCopy(F_condition,Condition);
  end;

  Combine(T);

  FTaskHandler.Thread.Prepare_mysql_query(task_mysql_query,T.F_Query,T.FName,_OnComplete,_OnError,OnComplete,OnError);

  T.Free;

  if FTaskHandler.FThreaded then Reset;
end;

procedure TmySQLClientModify.PrepareUpdate(Table, Condition : pchar; const TaskName : string);
begin
  PrepareUpdateTask(Table,Condition,TaskName,FDefault_OnComplete,FDefault_OnError);
end;

// ---------------

procedure TmySQLClientModify.PrepareUpdateStringTask(
  Table : pchar; const Condition : string;
  const TaskName : string;
  OnComplete : TmySQLClientTask_OnComplete;
  OnError    : TmySQLClientTask_OnError
);
var
  T : TmySQLClientTaskData;
begin
  T:=TmySQLClientTaskData.Create;

  with T do begin
    FName       :=TaskName;
    FPrepared   :=TRUE;
    F_table     :=Table;
    F_modifytype:=MODIFY_UPDATE;
    StrPCopy(F_condition,Condition);
  end;

  Combine(T);

  FTaskHandler.Thread.Prepare_mysql_query(task_mysql_query,T.F_Query,T.FName,_OnComplete,_OnError,OnComplete,OnError);

  T.Free;

  if FTaskHandler.FThreaded then Reset;
end;

procedure TmySQLClientModify.PrepareUpdateString(Table : pchar; const Condition : string; const TaskName : string);
begin
  PrepareUpdateStringTask(Table,Condition,TaskName,FDefault_OnComplete,FDefault_OnError);
end;

// ---------------

procedure TmySQLClientModify.PrepareReplaceIntoTask(
  Table, Condition : pchar;
  const TaskName : string;
  OnComplete : TmySQLClientTask_OnComplete;
  OnError    : TmySQLClientTask_OnError
);
var
  T : TmySQLClientTaskData;
begin
  T:=TmySQLClientTaskData.Create;

  with T do begin
    FName       :=TaskName;
    FPrepared  :=TRUE;
    F_table     :=Table;
    F_modifyType:=MODIFY_REPLACE_INTO;
    StrCopy(F_condition,Condition);
  end;

  Combine(T);

  FTaskHandler.Thread.Prepare_mysql_query(task_mysql_query,T.F_Query,T.FName,_OnComplete,_OnError,OnComplete,OnError);

  T.Free;

  if FTaskHandler.FThreaded then Reset;
end;

procedure TmySQLClientModify.PrepareReplaceInto(Table, Condition : pchar; const TaskName : string);
begin
  PrepareReplaceIntoTask(Table,Condition,TaskName,FDefault_OnComplete,FDefault_OnError);
end;

// ---------------

procedure TmySQLClientModify.PrepareReplaceIntoStringTask(
  Table : pchar; const Condition : string;
  const TaskName : string;
  OnComplete : TmySQLClientTask_OnComplete;
  OnError    : TmySQLClientTask_OnError
);
var
  T : TmySQLClientTaskData;
begin
  T:=TmySQLClientTaskData.Create;

  with T do begin
    FName       :=TaskName;
    FPrepared   :=TRUE;
    F_table     :=Table;
    F_modifytype:=MODIFY_REPLACE_INTO;
    StrPCopy(F_condition,Condition);
  end;

  Combine(T);

  FTaskHandler.Thread.Prepare_mysql_query(task_mysql_query,T.F_Query,T.FName,_OnComplete,_OnError,OnComplete,OnError);

  T.Free;

  if FTaskHandler.FThreaded then Reset;
end;

procedure TmySQLClientModify.PrepareReplaceIntoString(Table : pchar; const Condition : string; const TaskName : string);
begin
  PrepareReplaceIntoStringTask(Table,Condition,TaskName,FDefault_OnComplete,FDefault_OnError);
end;

// ---------------

procedure TmySQLClientModify.PrepareDeleteTask(
  Table, Condition : pchar;
  const TaskName : string;
  OnComplete : TmySQLClientTask_OnComplete;
  OnError    : TmySQLClientTask_OnError
);
var
  T : TmySQLClientTaskData;
begin
  T:=TmySQLClientTaskData.Create;

  with T do begin
    FName       :=TaskName;
    FPrepared   :=TRUE;
    F_table     :=Table;
    F_modifytype:=MODIFY_DELETE;
    StrCopy(F_condition,Condition);
  end;

  Combine(T);

  FTaskHandler.Thread.Prepare_mysql_query(task_mysql_query,T.F_Query,T.FName,_OnComplete,_OnError,OnComplete,OnError);

  T.Free;

  if FTaskHandler.FThreaded then Reset;
end;

procedure TmySQLClientModify.PrepareDelete(Table, Condition : pchar; const TaskName : string);
begin
  PrepareDeleteTask(Table,Condition,TaskName,FDefault_OnComplete,FDefault_OnError);
end;

// ---------------

procedure TmySQLClientModify.PrepareDeleteStringTask(
  Table : pchar; const Condition : string;
  const TaskName : string;
  OnComplete : TmySQLClientTask_OnComplete;
  OnError    : TmySQLClientTask_OnError
);
var
  T : TmySQLClientTaskData;
begin
  T:=TmySQLClientTaskData.Create;

  with T do begin
    FName       :=TaskName;
    FPrepared   :=TRUE;
    F_table     :=Table;
    F_modifytype:=MODIFY_DELETE;
    StrPCopy(F_condition,Condition);
  end;

  Combine(T);

  FTaskHandler.Thread.Prepare_mysql_query(task_mysql_query,T.F_Query,T.FName,_OnComplete,_OnError,OnComplete,OnError);

  T.Free;

  if FTaskHandler.FThreaded then Reset;
end;

procedure TmySQLClientModify.PrepareDeleteString(Table : pchar; const Condition : string; const TaskName : string);
begin

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -