可以选择... into outfile而不是将其保存到文件中,而是将其保存在blob中

时间:2011-04-20 09:10:33

标签: mysql windows delphi delphi-2007 zeos

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

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

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

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

2 个答案:

答案 0 :(得分:3)

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

来自Mysql Documentation

  

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

     

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

     

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

答案 1 :(得分:1)

确定如果有人想知道我对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;