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


Автор: shaft666 21.12.2005, 21:37
У меня вот какой вопрос!!! Есть таблица (Paradox), и ее нужно как-то сохранить с помощью SaveDialog и Table?????

Автор: YurikGL 21.12.2005, 21:48
Цитата
Есть таблица (Paradox), и ее нужно как-то сохранить с помощью SaveDialog и Table?????


Если нужно сохранить таблицу внутрь базы, то достаточно Table... если во внешний файл, то можно через SaveDialog.... А чем объясняется такой странный выбор компонентов?

Автор: Dron84 22.12.2005, 17:39
а в чём собственно проблема?
читай таблицу Eof до конца и затем а затем записывай поля через Writeln, естественно всё это в цикле... как считал одну строку делай Table.Next и усё...

Автор: SPrograMMer 22.12.2005, 23:36
Цитата(Dron84 @ 22.12.2005, 17:39)
в чём собственно проблема?
читай таблицу Eof до конца и затем а затем записывай поля через Writeln, естественно всё это в цикле... как считал одну строку делай Table.Next и усё...


Dron84, как я понимаю человек хочет именно Paradox`овскую таблицу сохранить, т е файл *.db с его структурой....
Добавлено @ 23:43
shaft666, структура таблицы заранее известна?

Автор: Dron84 23.12.2005, 05:55
SPrograMMer
а разницы нет...
в общем вот накатал кодик...
этот код вписать в батн сохранения...
Код

var
   s: string;
begin
  if SaveDialog.Execute then
    begin
      s := SaveDialog.FileName;
        if pos('.txt',s) = 0 then
          s := s + '.txt';
        if FileExists(s) then
          begin
            if MessageBox(0,'Такой файл уже существует. Перезаписать?','', MB_YESNO or MB_ICONQUESTION) = IDYES then
            Write(s);
          end
        else
          Write(s);
    end;

а это отдельная процедура для чтения таблицы
Код

procedure TViewPrice.Write(const s: string);
var
   f: TextFile;
begin
       AssignFile(f,s);
       ReWrite(f);
       data.TOrgPrices.First;
       while not data.TOrgPrices.Eof do
         begin
          writeln (f, data.TOrgPrices.FieldByName('Goods').AsString + ' - ' +
                      data.TOrgPrices.FieldByName('Price').AsString + ' - ' +
                      data.TOrgPrices.FieldByName('Other').AsString);
          data.TOrgPrices.Next
         end;
       data.TOrgPrices.First;
       CloseFile(f);
end;

естественно Write объявить в pivate....
проверял, работает нормально.... smile
удачи...

Автор: SPrograMMer 24.12.2005, 16:04
Dron84, у тебя получается ТИПИЗИРОВАННЫЙ (ну можно даже сказать паскалевский) файл, а я говорил, насчет Paradox`овского, т е что бы этот файл можно было бы просмотреть в любой программе типа DataBase Desktop.... т е действительно файл базы данных...
Вот поэтому я и спрашивал у shaft666`а... Такое можно сотворить, коли знаешь структуру таблицы...

Добавлено @ 16:13
Вот пример:
Код

Var
  NewTable:TTable;
begin
NewTable:=TTable.Create(Self);
With NewTable Do Begin
 Active:=False;
 DatabaseName:='TestDB';
 TableType:=ttParadox;
 TableName:='Test.db';   // здесь конкретное имя файла, можно прикрутить Dialog
 with FieldDefs Do Begin
   With AddFieldDef do Begin
     Name:='ID';
     DataType:=ftAutoInc;
     Required:=True
   End;
   With AddFieldDef do Begin
     Name:='Name';
     DataType:=ftString;
     Size:=50
   End;
 End;
 with IndexDefs Do
   With AddIndexDef Do Begin
     Name:='';
     Fields:='ID';
     Options:=[ixPrimary]
   End;
 CreateTable; // непосредственно создаем файл
End;

Автор: Dron84 25.12.2005, 18:35
SPrograMMer
это для парадокса и есть, просто я это уже для созданной таблицы а не для того чтобы создавать её программно...
вопрос был не том чтобы создать таблицу программно, а как сохраниь данные из таблици....

Автор: SPrograMMer 26.12.2005, 22:34
Цитата(Dron84 @ 25.12.2005, 18:35)
вопрос был не том чтобы создать таблицу программно, а как сохраниь данные из таблици

вот-вот. ты так понимаешь вопрос, а я его понимаю... в общем в примере я и реализовал то как я его понимаю....
давай больше спорить не будем, а дождемся shaft666`а ( smile ) может он сам и скажет чего он хотел-то на самом деле....

Автор: shaft666 28.12.2005, 11:15
1) Я вот чего хотел: Жмешь на кнопку Сохранить таблицу как, вылазит SaveDialog в нем указываем имя файла и и выбираем расшерение(*.db). Таблица должна сохраняться полностью, со всеми полями, индексами и записями (перечеслять каждое поле будет очень некрасиво (их около 300 ) ). Может как нибудь через копирование???

2) И ребят подскажите как можно создавать новую таблицу со старой структурой (Нажимаешь кнопочку создать новую БД, опять же вылазит SaveDialog, показываем куда сохранить, имя и расширение(db).)....

3) И вот еще вопрос. Открываю таблицу (проиндексированную) жму Cортировать вот с таким кодом:
Код
Table1.IndexName := 'indFam';

ошибка невыскакивает, добавляю новую запись, опять жму Сортировать и выскакивает вот такого типа ошибка:
Цитата
'Index is Out of date index: indFam'

Автор: shaft666 28.12.2005, 11:17
Извеняюсь за оффтоп! Выше код не для C++, а для Delphi!!! smile

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