Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么你真的需要知道这些信息?文件存在可能会经常更改。最好的解决方案是在SQL(order+where)和Delphi中过滤记录,只检查以前未检查过的路径。使用线程许可证进行后台工作,不要冻结应用程序。@Victoria-完全正确。我的经验是,如果你偏离了_Delphi_Sqlite_Sql Update_Pascal - Fatal编程技术网

为什么你真的需要知道这些信息?文件存在可能会经常更改。最好的解决方案是在SQL(order+where)和Delphi中过滤记录,只检查以前未检查过的路径。使用线程许可证进行后台工作,不要冻结应用程序。@Victoria-完全正确。我的经验是,如果你偏离了

为什么你真的需要知道这些信息?文件存在可能会经常更改。最好的解决方案是在SQL(order+where)和Delphi中过滤记录,只检查以前未检查过的路径。使用线程许可证进行后台工作,不要冻结应用程序。@Victoria-完全正确。我的经验是,如果你偏离了,delphi,sqlite,sql-update,pascal,Delphi,Sqlite,Sql Update,Pascal,为什么你真的需要知道这些信息?文件存在可能会经常更改。最好的解决方案是在SQL(order+where)和Delphi中过滤记录,只检查以前未检查过的路径。使用线程许可证进行后台工作,不要冻结应用程序。@Victoria-完全正确。我的经验是,如果你偏离了问题,试图解决实际问题,问题就会消失,提问者(即使是新手)也会觉得你必须解决没有被问到的问题。我的观点是,我们应该鼓励人们提出更好的问题。“维多利亚-福威特,我希望你能考虑不要放弃,因为我认为你通过你的输入和评论带来了很多价值。”Victori



为什么你真的需要知道这些信息?文件存在可能会经常更改。最好的解决方案是在SQL(order+where)和Delphi中过滤记录,只检查以前未检查过的路径。使用线程许可证进行后台工作,不要冻结应用程序。@Victoria-完全正确。我的经验是,如果你偏离了问题,试图解决实际问题,问题就会消失,提问者(即使是新手)也会觉得你必须解决没有被问到的问题。我的观点是,我们应该鼓励人们提出更好的问题。“维多利亚-福威特,我希望你能考虑不要放弃,因为我认为你通过你的输入和评论带来了很多价值。”Victoria:“FWW,我希望你会考虑不要放弃,”我也是,我认为你在这里的贡献是无价的。@ Victoria:BTW,我认为这个问题和所有的评论都表明,不恰当的问题产生的热量大于光线。因此,我已经做了我希望更多人首先做的事情,即投票关闭,因为在它的上下文中,q不够清晰,无法正确回答。最好的解决方案是在SQL(order+where)和Delphi中过滤记录,只检查以前未检查过的路径。使用线程许可证进行后台工作,不要冻结应用程序。@Victoria-完全正确。我的经验是,如果你偏离了问题,试图解决实际问题,问题就会消失,提问者(即使是新手)也会觉得你必须解决没有被问到的问题。我的观点是,我们应该鼓励人们提出更好的问题。“维多利亚-福威特,我希望你能考虑不要放弃,因为我认为你通过你的输入和评论带来了很多价值。”Victoria:“FWW,我希望你会考虑不要放弃,”我也是,我认为你在这里的贡献是无价的。@ Victoria:BTW,我认为这个问题和所有的评论都表明,不恰当的问题产生的热量大于光线。因此,我已经做了我希望更多人首先做的事情,即投票关闭,因为在它的上下文中,q不够清楚,无法正确回答。想想看,通常数据库引擎甚至不会在客户端运行。UDF如何在服务器端帮助过滤客户端文件?虽然我怀疑这是否是你的否决理由,但这看起来像是一个天生的否决者入侵了。@SertacAkyuz:你说得对,我认为文件也可以从服务器访问是理所当然的。我已经通过指定这个事实更新了答案的第一部分。您也可以在Delphi中注册UDF。它是关于导入一些C函数的。您的客户端库只需要提供已打开数据库的句柄。@exd-谢谢。还要注意,客户端必须存储通过共享的路径。例如,如果数据库服务器不在同一台计算机上,“c:\…something”对服务器没有任何意义。请考虑一下,通常数据库引擎甚至不在客户端运行。UDF如何在服务器端帮助过滤客户端文件?虽然我怀疑这是否是你的否决理由,但这看起来像是一个天生的否决者入侵了。@SertacAkyuz:你说得对,我认为文件也可以从服务器访问是理所当然的。我已经通过指定这个事实更新了答案的第一部分。您也可以在Delphi中注册UDF。它是关于导入一些C函数的。您的客户端库只需要提供已打开数据库的句柄。@exd-谢谢。还要注意,客户端必须存储通过共享的路径。例如,如果数据库服务器不在同一台计算机上,“c:\…something”对服务器没有任何意义。纯粹是猜测,但我猜这会产生额外的减速效果,因为对于每条记录,客户端需要额外的往返,假设数据库服务器位于不同的框中。@Sertac,我假设只在本地使用(对不起,这篇文章只是猜测使用FireDAC,所以我没有提到远程机器使用的可能性)。通过本地使用,您可能会获得一些加速,因为将整个文件名结果集提取到应用程序,检查是否存在并仅更新不存在的文件元组应该比UDF回调更昂贵。纯粹是猜测,但我猜这会产生额外的减速效果,因为假设数据库服务器位于不同的框中,则每个记录都需要到客户端的额外往返。@Sertac,我假设只在本地使用(对不起,这篇文章只是猜测使用FireDAC,所以我没有提到远程机器使用的可能性)。通过本地使用,您可能会获得一些加速,因为将整个文件名结果集提取到应用程序、检查是否存在以及仅更新不存在的文件元组应该比UDF回调更昂贵。
bigDB.First;
while not(bigDB.EOF) do
begin 
  if Trim(bigDB.FieldByName('refFile').AsString) > '' then
  begin
    if not(FileExists(bigDB.FieldByName('refFile').AsString)) then
    begin
      bigDB.Edit;
      bigDB.FieldByName('refFile').AsString:='';
      bigDB.Post;
    end;
  end;
  bigDB.Next;
end;   
select refFile 
from myTable
where (refFile is not null) and (length(trim(refFile)) > 0)
var
  Fld : TField;
begin
  BigDB.DisableControls();
  try
    Fld := BigDB.FieldByName('refFile');

    BigDB.First;
    while not(BigDB.Eof) do
    begin
      if not(FileExists(Fld.AsString)) then
      begin
        BigDB.Edit;
        Fld.AsString := '';
        BigDB.Post;
      end;
      BigDB.Next;
    end;
  finally
    BigDB.EnableControls();
  end;
uses
  FireDAC.Phys.SQLiteWrapper;

type
  TForm1 = class(TForm)
    Button1: TButton;
    FDQuery1: TFDQuery;
    FDConnection1: TFDConnection;
    FDGUIxWaitCursor1: TFDGUIxWaitCursor;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    FValidator: TSQLiteFunction;
    procedure ValidateFile(AFunc: TSQLiteFunctionData; AInputs: TSQLiteInputs;
      AOutput: TSQLiteOutput; var AUserData: TObject);
  end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FDConnection1.Open;

  FValidator := TSQLiteFunction.Create((TObject(FDConnection1.CliObj) as TSQLiteDatabase).Lib);
  FValidator.Args := 1;
  FValidator.Name := 'FileExists';
  FValidator.OnCalculate := ValidateFile;
  FValidator.InstallAll;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  FDQuery1.SQL.Text :=
    'UPDATE MyTable SET FileName = NULL WHERE ' +
    'FileName IS NOT NULL AND NOT FileExists(FileName)';
  FDQuery1.ExecSQL;
end;

procedure TForm1.ValidateFile(AFunc: TSQLiteFunctionData; AInputs: TSQLiteInputs;
  AOutput: TSQLiteOutput; var AUserData: TObject);
begin
  AOutput.AsBoolean := FileExists(AInputs[0].AsString);
end;