Можно выбрать ... в выходной файл, не сохранять его в файл, а вместо этого сохранять в blob - PullRequest
3 голосов
/ 20 апреля 2011

Я хочу сделать select * from x into outfile 'c:/test.csv'.
Но вместо сохранения в выходной файл test.csv я хочу сохранить его в поле BLOB-объекта.

Я запускаю запрос от клиента на Windows .
Сервер MySQL находится на сервере в Windows или Linux (может быть и тем и другим).
Но я хочу иметь файл на стороне клиента, а не где-нибудь на сервере.

КСТАТИ
Клиентское программное обеспечение написано на Delphi 2007 и использует ZEOS для подключения к базе данных MySQL на удаленном сервере.

Как получить клиентскую часть outfile вместо серверной?

Ответы [ 2 ]

3 голосов
/ 20 апреля 2011

Йохан, MySql выполняет это предложение с сервера, на котором работает. единственный способ создать файл на стороне клиента - передать местоположение общей папки и имя файла, которое указывает на клиентский компьютер. также владелец службы MySQL (daemon) должен обладать достаточными правами для записи в целевой каталог.

из Mysql Документация

Оператор SELECT ... INTO OUTFILE предназначен в первую очередь, чтобы позволить вам очень быстро вывести таблицу в текстовый файл на серверная машина. Если хотите создать результирующий файл на некоторых другой хост, кроме хоста сервера, вы обычно не может использовать SELECT ... INTO OUTFILE, так как нет возможности написать путь к файлу относительно файловая система хоста сервера.

Однако, если клиентское программное обеспечение MySQL установлен на удаленной машине, вместо этого вы можете использовать команду клиента такой как mysql -e "SELECT ..."> имя_файла для создания файла на клиентский хост.

Также возможно создание результирующий файл на другом хосте кроме хоста сервера, если расположение файла на пульте хост может быть доступен с помощью сетевой путь на сервере файловая система . В этом случае наличие mysql (или какого-то другого MySQL клиентская программа) не требуется на целевой хост.

1 голос
/ 21 апреля 2011

ОК. Если люди хотят знать, я сделал обходной путь для 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;
...