Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > передать архив в MYSQL


Автор: mr_oz 6.7.2008, 00:34
Доброй ночи всем) У меня есть удаленный сервер Mysql, где уже есть рабочая БД. Так вот как можно передать с клиента (клиент не взаимодействует с наборами данных из этой БД) архив на сервер в каталог допустим c:\mysql\data\mybd\ ну и конечно чтоб потом можно было бы его от туда по надобности стянуть. 


P.S. Может еще кто подскажет какую нить путевую книгу по написанию компонентов в Delphi.

Автор: mr_oz 8.7.2008, 13:41
Я тут подумал.... Решил буду добавлять в Blob поле архив....
Подскажите пож. Как добавит и считать через dbExpress. Я нашел примеры, но они не работют....
Использую TSQLConnection, TSimpleDataSet, Provider and Client dataSET
НА удаленном MySQL сервере есть таблица test два поля Index: Char ; arx: Blob;
Например 
Код

 BLOBField: TBlobField; 
  Stream1: TMemoryStream;
  d: Char;
  i: Integer;
  s: string;
........

 Stream1 := TMemoryStream.Create;
          Stream1.Clear;
          Stream1.LoadFromFile('c:\ms2.dat');
          Stream1.Position := 0;
          for i := 1 to Stream1.Size do begin
          Stream1.Read(d, 1);
          s := s + d;
                                          end;
          BlobField.DataSet.Edit; <---- на этом этапе возникает ошибка
          BlobField.AsString := s;
          BlobField.DataSet.Post;
          TSimpleDataSet(BlobField.DataSet).ApplyUpdates(0);
          Stream1.Free;

Ошибка при выполнении кода(записи в blob) : Access violation at adress 00494CA0 in module "Project.exe". Read of address 8400016F.

Автор: mr_oz 8.7.2008, 15:36
Еще заметил, что в коде например qrProba.FetchBlobs;; и вообще где встречается объект типа TBlobField, или все что с этим связанно происходит эта ошибка.
Свойство FetchonDeman =true;
ни как не пойму в чем ошибка....  smile 

Автор: mr_oz 8.7.2008, 21:48
Решил обойти проблему с FetchBlob'ом... Получился код:

Код

   Stream1: TMemoryStream;
   Stream3: TStream;
 with ClientDataSet2 do begin
      Open;
      Insert;
      Stream1 := TMemoryStream.Create;
      Stream1.LoadFromFile('c:\ms2.dat');
      FieldByName('Id').AsInteger := 1;
      Stream3 := ClientDataSet2.CreateBlobStream(ClientDataSet2.FieldByName('arx'), bmReadWrite);
      Stream3.CopyFrom(Stream1, Stream1.Size);
      Post;
      Stream3.Free;
      Stream1.Free;
      ApplyUpdates(0);<---- error      end;


 В последней строке возникает ошибка "commands out of sync you can't run this command now", как я понял она говорит что набор данных не свободен типо изначально в SQLQuery при запуске уже был запрос "select * from test" и этот набор нужно выгрузить... 

Столько людей уже просмотрело эту тему... неужели ни кто с ней не боролся.... 

Автор: mr_oz 9.7.2008, 21:20
Раз ни кто не хочет говорить со мной по теме.... Буду говорить сам с собой(Докатился)  smile  Так вот.. Добавление
В решении ошибки можно продвинуться чуть дальше

перед ApplyUpdates(0);
Можно вставить 
SQLConnection1.Connected:=false;
SQLConnection1.Connected:=true;
И значение 0 заменить на -1(то есть 0 реакции на ошибки). Выдается ошибка со стороны сервера  в виде типа:  Двойние изменение 'ттт' для ключа иии

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)