【问题标题】:Can select ... into outfile not save it into a file, but save it in blob instead可以 select ... into outfile 不将其保存到文件中,而是将其保存在 blob 中
【发布时间】:2011-04-20 09:10:32
【问题描述】:

我想做一个select * from x into outfile 'c:/test.csv'
但我不想将其保存到 outfile test.csv 中,而是将其保存到 blob 字段中。

我从 Windows 上的客户端开始查询。
MySQL 服务器位于 Windows 或 Linux 上的服务器上(两者都可以)。
但我想拥有文件客户端,而不是服务器上的某个地方。

顺便说一句
客户端软件用 Delphi 2007 编写,使用 ZEOS 连接到远程服务器上的 MySQL 数据库。

如何获取 outfile 客户端而不是服务器端?

【问题讨论】:

  • 我不明白。您开始询问如何将查询结果保存到 Blob 字段而不是文件,但随后您继续询问如何在客户端获取文件。你要不要文件?请编辑您的问题以澄清。
  • @rob 在 blob 中或在客户端。
  • 现在我使用 DBAdvGrid.OutputToCSV (不得不稍微更改 TAdvStringGrid 的源代码以防止它导出标题行,但它可以工作)
  • Johan,如果这是您的问题的解决方案,那么请写一个 answer 描述它。如果其他人遇到类似的问题,他们会去那里看看;只是 cmets 甚至会在一段时间后隐藏
  • OOps OutputToCSV 应该是 SaveToCSV,抱歉。

标签: mysql windows delphi delphi-2007 zeos


【解决方案1】:

Johan,MySql 从正在运行的服务器执行这句话。在客户端创建文件的唯一方法是传递指向客户端计算机的共享文件夹位置和文件名。 MySQL 服务(守护程序)所有者还必须拥有足够的权限才能写入目标目录。

来自MysqlDocumentation

SELECT ... INTO OUTFILE 语句 主要是为了让你很 快速将表格转储到文本文件 服务器机器。如果你想 在一些上创建结果文件 服务器主机以外的其他主机,您 通常不能使用 SELECT ... INTO OUTFILE 因为没有办法写 相对于文件的路径 服务器主机的文件系统。

但是,如果 MySQL 客户端软件 安装在远程机器上, 您可以改为使用客户端命令 如 mysql -e "SELECT ..." > file_name 生成文件 客户端主机。

也可以创建 结果文件在不同的主机上 除了服务器主机,如果 远程文件的位置 主机可以使用 服务器上的网络映射路径 文件系统。在这种情况下, mysql(或其他一些 MySQL 客户端程序)不需要 目标主机。

【讨论】:

    【解决方案2】:

    好的,如果人们想知道我对 TMS DBAdvGrid 进行了解决以导出 CSV 文件。

    我向 TAdvStringGrid 添加了一个新属性

    public {properties}
    property HideCSVHeader: boolean read FHideCSVHeader write FHideCSVHeader;
    

    并更改了以下代码:

    procedure TAdvStringGrid.OutputToCSV(FileName:String;appendmode: Boolean; 
      Unicode: boolean);
    ....
    //changed this code further down the procedure:
    //for z := SaveStartRow to SaveEndRow do 
    //Into:
    
    MyStartRow:= SaveStartRow;
    if HideCSVHeader then Inc(MyStartRow);
    for z := MyStartRow to SaveEndRow do   
    

    然后当我打电话时

    procedure TForm1.BtnExportClick(Sender: TObject);
    var
      Filename: string;
      succes: Boolean;
    begin
      succes:= True;
      if ExportSaveDialog.Execute then begin
        Filename:= ExportSaveDialog.FileName;
        try
          DBGridExportExact.Delimiter:= ';';
          DBGridExportExact.AlwaysQuotes:= True;
          DBGridExportExact.QuoteEmptyCells:= True;
          DBGridExportExact.SaveHiddenCells:= True;
          DBGridExportExact.HideCSVHeader:= True;
          DBGridExportExact.SaveToCSV(bestandsnaam);
        except
          succes:= False;
        end;
        if not(succes) then StatusLabel.Caption:= 'Error bla bla';
      end;
    end;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-28
      • 2011-08-10
      • 1970-01-01
      • 2012-08-10
      • 2011-08-21
      • 1970-01-01
      • 2018-04-20
      • 2017-06-10
      相关资源
      最近更新 更多