Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сохранить данные из таблицы в файл ? InterBase/FireBird 
:(
    Опции темы
3D-Dragon
  Дата 15.1.2003, 06:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 7.1.2003
Где: Днепропетровск, U A

Репутация: нет
Всего: нет



Мне нужно передавать часть данных на удаленный комп с базой.
Как программно (Delphi) записать данные из таблицы в файл ?
И как (чем) этот файл можно зашифровать (чтобы защитить от редактирования), а потом залить эти данные в базу уже на удаленном компе программой, имеющей этот "ключик" ?

В mySQL знакомая процедура (-mysqlDump), а в Delphi "чем" это сделать ?
PM MAIL WWW ICQ   Вверх
Vit
Дата 15.1.2003, 07:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Хм... Странный вопрос. А какая база данных? Обычно через файл не самый удобный способ, а большинство серверов баз данных поддерживают:

1) Удалённый доступ
2) Репликации
3) Трансформации

Все эти три метода передают инфу на несколько порядков быстрее.

Некоторые виду репликации поддерживают передачу инфы через файл. В общем, основные положения такие:

1) Сам Дельфи, как и другие языки общего назначения автоматический перевод не поддерживают

2) Прежде всего надо разобраться какие методы встроены в сервер баз данных - обычно, как минимум, их несколько. Большинство из этих сервисов можно вызвать из приложения (они или имеют свои API, или реализованы в виде System Stored Procedure, или имеют утилиты для запуска из командной строки). Язык программирования тут не причём - это сервисы сервера.

3) В дельфи вариантов несколько - использовать XML файл (и использовать либо DOM, либо свой собственный Parser/Builder, либо посмотреть новые Web сервисы для Дельфи 6/7) - плюсы - лёгкость использования и универсальность, минус - огромный размер и низкая скорость обработки. Можно конвертнуть например в MS Access и передать в виде его файла - сделать относительно легко, файл тоже получится не маленький, зато скорость построения считывания будет весьма высока, хотя и меньше чем в пункте 2. В любом случае прийдётся самому побеспокоится о шифровании данных.

Итого, я бы рекомендовал прежде чем искать возможности Дельфи, ознакомится с возможностями сервера базы данных.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
3D-Dragon
Дата 15.1.2003, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 7.1.2003
Где: Днепропетровск, U A

Репутация: нет
Всего: нет



Vit
Цитата
А какая база данных?


Я же в теме указал - FireBird

Мне нужно обмениваться именно файлами т.к. постоянной связи (сетка, интернет) с удаленными машинами нет ...

Мне вполне достаточно сохранять данные в обыкновенный текстовый файл (*.sql) вида
INSERT INTO ...
а потом на удаленной машине выполнить запрос по вставке данных из этого файла.

На php я это делал путем построчной записи данных в файл, да и другие там есть способы.
Вот и спрашиваю как мне создать ТАКОЙ файл из приложения, написанного на Delphi
PM MAIL WWW ICQ   Вверх
Vit
Дата 15.1.2003, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Покажи маленький кусочек файла который ты хотел бы получить, а то что-то я не понимаю. Вообще-то работа с файлами в Дельфи описана в нашем FAQ - там большая моя статья...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Vit
Дата 15.1.2003, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Ага, прочитал в разделе по SQL твой вопрос, с IB не работал, могу написать тебе код для работы через ADO или BDE на выбор...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
3D-Dragon
Дата 15.1.2003, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 7.1.2003
Где: Днепропетровск, U A

Репутация: нет
Всего: нет



Vit
Спасибо!
Я нашел выход в компонентах SMExport Suite 4.20 или EMS QuickExport 2.60, которые позволяют записать результат выборки DataSet в *.sql файл.
PM MAIL WWW ICQ   Вверх
Vit
Дата 16.1.2003, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Примерно так:

Код

procedure TForm1.Button1Click(Sender: TObject);
 var f:textFile;
     s1, s2:string;
     i:integer;
begin
 query1.Active:=true;
 assignfile(f,'c:\test.sql');// открываем файл
 rewrite(f);
 // Делаем шаблон для всех записей
 s1:='Insert into MyTable(';
 for i:=0 to query1.FieldCount-1 do
   begin
     s1:=s1+query1.Fields[i].FieldName;// добавляем имя поля
     if i<query1.FieldCount-1 then s1:=s1+', ' else s1:=s1+') Values (';
   end;
 // Заполняем шаблон данными
 while not query1.Eof do
   begin
     s2:=s1;
     for i:=0 to query1.FieldCount-1 do
       begin
         if query1.Fields[i].IsNull then s2:=s2+'NULL'// обработка значений типа NULL
         else
           begin
             if query1.Fields[i].DataType in [ftString, ftFixedChar, ftWideString] then // строковые значения берём в кавычки
               s2:=s2+''''+query1.Fields[i].asstring+''''
             else // не строковые добавляем без кавычек
               s2:=s2+query1.Fields[i].asstring;
           end;
         if i<query1.FieldCount-1 then s2:=s2+', ' else s2:=s2+')';
       end;
     writeln(f, s2);// пишем в файл
     query1.Next;
   end;
 closefile(f);
end;



Только надо предусмотреть особенности синтаксиса конкретной базы данных и корректную обработку полей типа DateTime, Boolean - там реализация в квери сильно различается в разных базах данных.




--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
3D-Dragon
Дата 16.1.2003, 03:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 7.1.2003
Где: Днепропетровск, U A

Репутация: нет
Всего: нет



Vit
ОГРОМНОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО !
Это именно то, что я искал.
Даже не знаю как тебя отблагодарить, может хостинг нужен, могу предоставить совершенно бесплатно под нормальный проект ?

Единственный трабл? пока не решенный мной - это запись вещественных чисел в этот файл.
Код записывает как 5,45 а мне нужно, чтобы записывало как 5.45
PM MAIL WWW ICQ   Вверх
Vit
Дата 16.1.2003, 03:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Измени код примерно так:


Код

procedure TForm1.Button1Click(Sender: TObject);
 var f:textFile;
     s1, s2:string;
     i:integer;
begin
 query1.Active:=true;
 assignfile(f,'c:\test.sql');// открываем файл
 rewrite(f);
 // Делаем шаблон для всех записей
 s1:='Insert into MyTable(';
 for i:=0 to query1.FieldCount-1 do
   begin
     s1:=s1+query1.Fields[i].FieldName;// добавляем имя поля
     if i<query1.FieldCount-1 then s1:=s1+', ' else s1:=s1+') Values (';
   end;
 // Заполняем шаблон данными
 while not query1.Eof do
   begin
     s2:=s1;
     for i:=0 to query1.FieldCount-1 do
       begin
         if query1.Fields[i].IsNull then s2:=s2+'NULL'// обработка значений типа NULL
         else
           begin
             if query1.Fields[i].DataType in [ftString, ftFixedChar, ftWideString] then // строковые значения берём в кавычки
               s2:=s2+''''+query1.Fields[i].asstring+''''
             else // не строковые добавляем без кавычек
               s2:=s2+StringReplace(query1.Fields[i].asstring,',','.',[rfReplaceAll]);
           end;
         if i<query1.FieldCount-1 then s2:=s2+', ' else s2:=s2+')';
       end;
     writeln(f, s2);// пишем в файл
     query1.Next;
   end;
 closefile(f);
end;


PS. Спасибо за предложение, мне лично ничего не надо, просто я рад что у нас появился ещё один, надеюсь активный участник.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
3D-Dragon
Дата 16.1.2003, 05:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 7.1.2003
Где: Днепропетровск, U A

Репутация: нет
Всего: нет



Vit
Спасибо, всё получилось !
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.5484 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.