我想做一个select * from x into outfile 'c:/test.csv'
。
但不是保存到outfile test.csv中,而是保存到blob字段中。
我从Windows的客户端开始查询。
MySQL服务器位于Windows或Linux的服务器上(可以是两者)。
但是我希望文件在客户端,而不是在服务器上。
客户端软件用Delphi 2007编写,使用ZEOS连接远程服务器上的MySQL数据库。
我如何获得输出文件客户端,而不是服务器端?
Johan, MySql从正在运行的服务器执行这句话。在客户端创建文件的唯一方法是传递一个指向客户端机器的共享文件夹位置和文件名。并且MySQL服务(守护进程)的所有者必须拥有足够的权限来写入目标目录。
来自Mysql文档
SELECT…INTO OUTFILE语句主要是为了让你很吗上的文本文件中快速转储一个表服务器机器。如果你想在某些上创建结果文件其他主机除了服务器主机,你通常不能使用SELECT…成OUTFILE,因为无法写入文件的相对路径
服务器的文件系统。但是,如果MySQL客户端软件安装在远程机器上,您可以使用客户机命令代替例如mysql -e "SELECT…">生成文件的File_name客户端主机。
也可以创建在另一台主机上生成的文件除了服务器主机之外,如果远程文件的位置可以通过a访问主机服务器上的网络映射路径文件系统。在这种情况下,mysql(或其他mysql)的存在的客户端程序)是不需要的目标主机。
OK,如果人们想知道,我做了一个变通的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;