Поиск:

Ответ в темуСоздание новой темы Создание опроса
> выборка данных из zip внутри dbf, Помогите с кодом пожалуста 
:(
    Опции темы
Berliner
Дата 14.11.2006, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

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



Здраствуйте есть задача: в каталоге есть куча файлов(zip архивы )
Файлы названы по дате создания и имеют вид 13112006.zip 14112006.zip
Внутри лежат dbf
из которых нужно сделать выборку. Выборку нужно сделать за период с и по.
Решение задачи такое на форму я кинул 2 TdateTimePicker один играет как 
начальный а другой как завершающий период.

 Мне нужно 1 с помощью програмки pkunzip распокавать указанный zip архив
сделать выборку из dbf(select......).после этого перейти к другому зипу и
 сделать выборуку с другогого dbf. и так до конца периода.    
Я не знаю
1.Как распковать из программы при помощи програмки pkunzip указ?нн?й zip

2.я не знаю как организовать по поиску период с и по(период указ?вается 
2 TdateTimePickerа-ми).
3.Как организовать подключение через Ado к
 dbf(учит?вая что кажд?й раз название файла dbf 
внутри zip архива одно и тоже изменяется название zip архива согласно дате)

помогите с кодом куда че пихать- а то у мне тяжело.  
Код


procedure TForm1.Button1Click(Sender: TObject);

var DateB,PathF,FName:string;

begin

DateB:=DateToStr(DateTimePicker1.Date);
PathF:='c:\33\1\';
DateB:=Copy(DateB,1,2)+Copy(DateB,4,2)+Copy(DateB,7,4)+'.zip';

Fname:=PathF+DateB;
ShowMessage(Fname);
if FileExists(Fname) then
begin
ShowMessage('нашел файл');
 //Распаковываем  zip архив  файла строка для распаковки ! c:\fox\foxswap c:\service\pkunzip &zipfile Fail.dbf


end;
end;





PM   Вверх
Akella
Дата 14.11.2006, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



На примере распаковки из рар-архива
Код

function TfmMain.ExecAndWait(const FileName, Params: ShortString; ArcDir:string;
                               const WinState: Word): boolean; export;
var
  StartInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: ShortString;
begin
  { Помещаем имя файла между кавычками, с соблюдением всех пробелов в именах Win9x }
  CmdLine := '"' + Filename + '" ' + Params;
  FillChar(StartInfo, SizeOf(StartInfo), #0);
  with StartInfo do
  begin
    cb := SizeOf(StartInfo);
    dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
    wShowWindow := WinState;
  end;
  Result := CreateProcess(nil, PChar( String( CmdLine ) ), nil, nil, false,
                          CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
                          PChar(ArcDir),StartInfo,ProcInfo);
  { Ожидаем завершения приложения }
  if Result then
  begin
    WaitForSingleObject(ProcInfo.hProcess, INFINITE);
    { Free the Handles }
    CloseHandle(ProcInfo.hProcess);
    CloseHandle(ProcInfo.hThread);
  end;
end;


Код

Procedure TfmUpdateInfo.ExtractArchives(Dir:String);
Var
 SearchRec:TSearchRec;
begin
 try
   log('Поиск полученной информации');
   if Dir<>'' then Dir:=IncludeTrailingPathDelimiter(Dir);
   if FindFirst(Dir+'*.*', faAnyFile, SearchRec)=0 then
     repeat
       if (SearchRec.name='.') or (SearchRec.name='..') then continue;
       if ((SearchRec.Attr and faDirectory)<>0) then
         ExtractArchives(Dir+SearchRec.name) //we found Directory: "Dir+SearchRec.name"
       else
        begin
          if AnsiUpperCase(ExtractFileExt(SearchRec.name)) = '.RAR' then
          begin
            log('Распаковываю архив: '+dir+SearchRec.name);
     
            fmMain.ExecAndWait(fmMain.swinrar,'e -ep '+ SearchRec.name, dir,0);

            Application.ProcessMessages;
            DeleteFile(dir+SearchRec.name);
          end;//if ExtractFileExt(SearchRec.name)='.rar' then
        end;//else
     until FindNext(SearchRec)<>0;

 finally
   FindClose(SearchRec);
 end;
end;



Добавлено @ 17:39 
Цитата(Berliner @  14.11.2006,  17:21 Найти цитируемый пост)
13112006.zip 14112006.zip

тебе самому нужно "декодировать" в вид 14.11.2006
в условиях процедуры поиска и сравнивай
или наоборот "декодируй" значание DateTimePicker`а в вид 14112006

Добавлено @ 17:42 
Цитата(Berliner @  14.11.2006,  17:21 Найти цитируемый пост)
3.Как организовать подключение через Ado к
 dbf(учит?вая что кажд?й раз название файла dbf 
внутри zip архива одно и тоже изменяется название zip архива согласно дате)

закрыл ADO, выполнил поиск нужного файла, открыл ADO,
Кинь на форму ADOConnection, поковыряйся со строками подключения, поэксперементрируй, к ADOConnection прикрути ADOTable
Если не принципиально, то я бы на твоём месте использовал бы BDE, проще, а главное - быстрее.

Добавлено @ 17:44 
filedate:string;
...
filedate := FormatDateTime('ddmmyyyy',DateTimePicker1.Date);

Это сообщение отредактировал(а) Akella - 14.11.2006, 17:42
PM MAIL   Вверх
Berliner
Дата 14.11.2006, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

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



Спасиб за ответ 

Цитата

Добавлено @ 17:39 
13112006.zip 14112006.zip

тебе самому нужно "декодировать" в вид 14.11.2006
в условиях процедуры поиска и сравнивай
или наоборот "декодируй" значание DateTimePicker`а в вид 14112006



Так вот я  декондирую DateB:=DateToStr(DateTimePicker1.Date); а как сравнивать? Строки?  Может лучше сравнивать даты? хотелось бы примерчик. И куда это в моем коде тулить
PM   Вверх
Akella
Дата 15.11.2006, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



наверное строки лучше сравнивать в процедуре поиска


Код

Procedure TfmUpdateInfo.ExtractArchives(Dir:String);
Var
 SearchRec:TSearchRec;
begin
 try
   log('Поиск полученной информации');
   if Dir<>'' then Dir:=IncludeTrailingPathDelimiter(Dir);
   if FindFirst(Dir+'*.*', faAnyFile, SearchRec)=0 then
     repeat
       if (SearchRec.name='.') or (SearchRec.name='..') then continue;
       if ((SearchRec.Attr and faDirectory)<>0) then
         ExtractArchives(Dir+SearchRec.name) //we found Directory: "Dir+SearchRec.name"
       else
        begin

          if (AnsiUpperCase(ExtractFileExt(SearchRec.name)) = '.RAR') and
             (POS(ПЕРЕМЕННАЯ С ДАТОЙ ВИДА '14112006' ,SearchRec.name)<>0) then //SearchRec.name = 14112006.RAR


          begin
            log('Распаковываю архив: '+dir+SearchRec.name);
            fmMain.ExecAndWait(fmMain.swinrar,'e -ep '+ SearchRec.name, dir,0);
            Application.ProcessMessages;
              
            здесь нужно вставить функцию импорта из dbf
            DeleteFile(dir+SearchRec.name);

          end;//if ExtractFileExt(SearchRec.name)='.rar' then
        end;//else
     until FindNext(SearchRec)<>0;
 finally
   FindClose(SearchRec);
 end;
end;


после процедуры поиска и распаковки архивов запускается процедура поиска и импорта из dbf
принцип тот же.

Это сообщение отредактировал(а) Akella - 15.11.2006, 09:48
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

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

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


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


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

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

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


 




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


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

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