Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.06.11;
Скачать: [xml.tar.bz2];

Вниз

Нужна блок схема   Найти похожие ветки 

 
wirg   (2006-05-20 16:03) [0]

У меня есть огромная процедура и мне нужно к ней составить блок-схему. Подскажите программу, которая может это сделать автоматически?

begin
//задание условий поиска конфигураций
 FindRes:=FindFirst("date\*.*",faArchive,SR);
 Form1.Caption:="загрузка конфигураций";
 while FindRes=0 do  // пока мы находим файлы, то выполнять цикл
   begin
     //подключаемся к БД
     ADOConnection1.Connected:=false;
ADOConnection1.ConnectionString:="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=DIAL.mdb;Persist Security Info=False";
     qr1.Connection:=adoconnection1;
     qr2.Connection:=adoconnection1;
     //проверяем существование конфигурации
     qr1.SQL.Clear;
     qr1.SQL.Append("Select ID_cfg, Name_cfg From Config where Name_cfg=""+SR.Name+""");
     qr1.Active:=true;
     //Если выборка пуста, то добавляем конфигурацию
     if qr1.Eof then
       begin
         ADOConnection1.Execute("Insert Into Config(Name_cfg,Date_create) values (""+SR.Name+"",Date())");
         //находим и записываем конфигурацию
         qr1.SQL.Clear;
         qr1.SQL.Append("Select ID_cfg From Config where Name_cfg=""+SR.Name+""");
         qr1.Active:=true;
       end;
     cfg:=inttostr(qr1.FieldValues["ID_cfg"]);
     //делаем выборку из таблиц конфигурации и компьютеров
     qr1.SQL.Clear;
     qr1.SQL.Append("Select ID_comp From Computers Where ID_cfg="+cfg+"");
     qr1.Active:=true;
     //если нет компьютера с такой конфигурацией добавляем его
     if  qr1.Eof then
       begin
         ADOConnection1.Execute("Insert Into Computers(ID_cfg) values ("+cfg+")");
         qr1.SQL.Clear;
         qr1.SQL.Append("Select Computers.ID_comp, Config.ID_cfg, Config.Name_cfg From Computers INNER JOIN Config ON Computers.ID_cfg=Config.ID_cfg Where Computers.ID_cfg="+cfg+"");
         qr1.Active:=true;
         //записываем идентификатор нового компа
         comp:=inttostr(qr1.FieldValues["ID_comp"]);
         //записываем название компа
         name:=qr1.FieldValues["Name_cfg"];
         cfg:=inttostr(qr1.FieldValues["ID_cfg"]);
         while not qr1.Eof do
           begin
              //связываем файловую переменную с именем файла
              AssignFile(F,"date\"+name);
              //открываем файл
              reset(F);
              while not eof(f) do  //проход по файлу конфигурации
                 begin
                   readln(F,S);  //считываем строку
              //дополнительная информация для компьютера
                 if pos("MAC_Addr=",s)<>0 then
                   begin
                    name:=copy(s,(pos("=",s)+1),length(s));
                    adoconnection1.Execute("UPDATE Computers SET Mac_address=""+name+"" where ([id_comp]="+comp+")");
                   end;
                 if pos("IP_Addr=",s)<>0 then
                   begin
                    name:=copy(s,(pos("=",s)+1),14);
                    adoconnection1.Execute("UPDATE Computers SET IP_address=""+name+"" where ([id_comp]="+comp+")");
                   end;
                 if pos("Computer_Name=",s)<>0 then
                   begin
                    name:=copy(s,(pos("=",s)+1),length(s));
                    adoconnection1.Execute("UPDATE Computers SET Name_comp=""+name+"" where ([id_comp]="+comp+")");
                   end;
                 //запись устройств
                if (pos("Device_",s)=1) or (pos("CPU=",s)=1) or (pos("Win_Device",s)=1) then
                  begin
                   if pos("Hdd",s)<>0 then
                      begin
                         model:= copy(s,(pos("Hdd",s)+4),length(s));
                         move:="Жёсткий диск";
                       end;
             .............................                  
                   if pos("Printer",s)<>0 then
                      begin
                         model:= copy(s,(pos("Printer",s)+8),length(s));
                         move:="Принтер";
                       end;
                    if (model<>"") and (move<>"") then
                       begin
                           qr2.sql.Clear;
                           qr2.SQL.Append("SELECT ID_type FROM Type_device WHERE Name_type=""+move+"";");
                           qr2.Active:=true;
                           if qr2.Eof then
                            begin
                             adoconnection1.Execute("Insert Into Type_device(Name_type) values (""+move+"")");
                             qr2.sql.Clear;
                             qr2.SQL.Append("SELECT ID_type FROM Type_device WHERE Name_type=""+move+"";");
                             qr2.Active:=true;
                            end;
                           Typ:=inttostr(qr2.FieldValues["ID_type"]);
                           qr2.sql.Clear;
                           qr2.SQL.Append("SELECT Name_model, ID_model  FROM Model WHERE Name_model=""+model+"";");
                           qr2.Active:=true;
                           if qr2.Eof then
                             begin
                               adoconnection1.Execute("insert into Model(Name_model,ID_type) values (""+model+"","+Typ+")");
                               qr2.sql.Clear;
                               qr2.SQL.Append("SELECT Name_model, ID_model  FROM Model WHERE Name_model=""+model+""");
                               qr2.Active:=true;
                             end;
                           i:= qr2.FieldValues["ID_model"];
                           qr2.sql.Clear;
                           qr2.SQL.Append("SELECT ID_model,ID_comp  FROM Device WHERE (ID_model="+inttostr(i)+") AND (ID_comp="+comp+")");
                           qr2.Active:=true;
                       //Добавление в девайс ид компа и ид модели устройства нужно добавить тип устройства к запросу
                           if qr2.Eof then
                            adoconnection1.Execute("Insert into Device(ID_model,ID_comp) values ("+inttostr(i)+","+comp+")");
                       end;
                   end;
                 end;
             closefile(F);
             qr1.Next;
           end;

       end;
     // продолжение поиска по заданным условиям
     FindRes:=FindNext(SR);
   end;
 FindClose(SR); // закрываем поиск

 //заносим производителей
  qr2.SQL.Clear;
  //all proizv
  qr2.SQL.Append("Select * from Proizvoditel");
  qr2.Active:=true;
  while  not qr2.Eof do
     begin
       id_proizv:=inttostr(qr2.FieldValues["ID_proizv"]);
       proizv:="%"+qr2.FieldValues["Name_proizv"]+"%";
       qr1.SQL.Clear;
       qr1.SQL.Append("Select  ID_model From Model Where Name_model Like ""+proizv+""");
       qr1.Active:=true;
         while  not qr1.Eof do
            begin
              id_model:=inttostr(qr1.FieldValues["ID_model"]);
              adoconnection1.Execute("Update Model Set Id_proizv ="+id_proizv+" Where ID_model="+id_model+"");
              qr1.Next;
             end;
       qr2.Next;
      end;
 Form1.Caption:="Учёт компьютерного оборудования";
 FormCreate(sender);
end;


 
boriskb ©   (2006-05-20 16:10) [1]

:)
Ну - кто первый? :)


 
antonn ©   (2006-05-20 16:10) [2]

итак, делаем ставки...


 
antonn ©   (2006-05-20 16:11) [3]

boriskb ©   (20.05.06 16:10) [1]
:))))


 
DrPass ©   (2006-05-20 16:12) [4]

Эх, не могу удержаться...
Только АВТОШЕМА!


 
antonn ©   (2006-05-20 16:15) [5]

ну елки, я на 8 пост поставил...
:)


 
boriskb ©   (2006-05-20 16:16) [6]

DrPass ©   (20.05.06 16:12) [4]

Приз заслуженно твой:)
Как встретимся, выставлю пиво :)


 
Nic ©   (2006-05-20 16:17) [7]

Автошема.
Но не такая уж и огромная процедура.


 
Nic ©   (2006-05-20 16:17) [8]

Можно скачать в исходниках где-то на http://kladovka.net.ru


 
wirg   (2006-05-20 16:19) [9]

У меня таких компонентов нет чтобы откомпилировать


 
wirg   (2006-05-20 16:20) [10]

А откомпилированная есть или аналог?


 
Anatoly Podgoretsky ©   (2006-05-20 16:21) [11]

Ну вот один не выдержал, не прошел тест.


 
wirg   (2006-05-20 16:25) [12]

Программа AutoFlowchart выдаёт не правильную блок-схему. Какие программы существуют ещё?


 
Джо ©   (2006-05-20 16:27) [13]

А может, все-так лучше процедуру переделать, чтобы она не была такой большой и запутанной, а? Оно и полезней всяко будет.


 
wirg   (2006-05-20 16:37) [14]

А что лучше переделать и как?


 
Гарри Поттер ©   (2006-05-20 16:40) [15]

Насколько помню автошема простейшие процедуры анимировала асесволюшинами, а уж такую процедуру и подавно непереварит.
Или ее уже модернизировали?


 
Джо ©   (2006-05-20 16:42) [16]

> [14] wirg   (20.05.06 16:37)
> А что лучше переделать и как?

Разбить на процедуры, каждая выполняет свою небольшую, но ОДНУ задачу, каждой процедуре присвоить имя, обозначающее то, что она делает. Тогда и комментарии станут излишними, кстати говоря.


 
Джо ©   (2006-05-20 16:44) [17]

Например, то, что идет после комментария "Заносим производителей", вынести в отдельную процедуру AddProducers (или в таком духе) и так далее. Читаемость кода будет на 2 порядка выше.


 
wirg   (2006-05-20 16:48) [18]

Т.е. вы предлагаете вынести в отдельные процедурвы запросы или что?

процедура

Запрос: строка

qr2.sql.Clear;
qr2.SQL.Append(Запрос);
qr2.Active:=true;


 
Джо ©   (2006-05-20 17:00) [19]

> [18] wirg   (20.05.06 16:48)
> Т.е. вы предлагаете вынести в отдельные процедурвы запросы
> или что?

Логические блоки. Вот ты эти блоки выделяешь комментариями, а вместо этого — не лучше ли их оформить отдельными процедурами? Смотри пример в моем посте выше.


 
wirg   (2006-05-20 17:03) [20]

А скорость выполнения не упадёт?


 
Джо ©   (2006-05-20 17:11) [21]

> [20] wirg   (20.05.06 17:03)
> А скорость выполнения не упадёт?

Об этом думать рано. И, скорее всего, даже не придется об этом думать, ибо задержка в несколько МИЛЛИсекунд не будет заметна ни практически, ни теоретически.


 
wirg   (2006-05-21 11:54) [22]

Ладно как может выгдядеть блок схема для такого кода???

begin
//задание условий поиска конфигураций
FindRes:=FindFirst("date\*.*",faArchive,SR);
Form1.Caption:="загрузка конфигураций";
while FindRes=0 do  // пока мы находим файлы, то выполнять цикл
  begin
    //подключаемся к БД
    ADOConnection1.Connected:=false;
ADOConnection1.ConnectionString:="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=DIAL.mdb;Persist Security Info=False";
    qr1.Connection:=adoconnection1;
    qr2.Connection:=adoconnection1;
    //проверяем существование конфигурации
    qr1.SQL.Clear;
    qr1.SQL.Append("Select ID_cfg, Name_cfg From Config where Name_cfg=""+SR.Name+""");
    qr1.Active:=true;
    //Если выборка пуста, то добавляем конфигурацию
    if qr1.Eof then
      begin
        ADOConnection1.Execute("Insert Into Config(Name_cfg,Date_create) values (""+SR.Name+"",Date())");
        //находим и записываем конфигурацию
        qr1.SQL.Clear;
        qr1.SQL.Append("Select ID_cfg From Config where Name_cfg=""+SR.Name+""");
        qr1.Active:=true;
      end;
    cfg:=inttostr(qr1.FieldValues["ID_cfg"]);
    //делаем выборку из таблиц конфигурации и компьютеров
    qr1.SQL.Clear;
    qr1.SQL.Append("Select ID_comp From Computers Where ID_cfg="+cfg+"");
    qr1.Active:=true;
    //если нет компьютера с такой конфигурацией добавляем его
    if  qr1.Eof then
      begin
        ADOConnection1.Execute("Insert Into Computers(ID_cfg) values ("+cfg+")");
        qr1.SQL.Clear;
        qr1.SQL.Append("Select Computers.ID_comp, Config.ID_cfg, Config.Name_cfg From Computers INNER JOIN Config ON Computers.ID_cfg=Config.ID_cfg Where Computers.ID_cfg="+cfg+"");
        qr1.Active:=true;
        //записываем идентификатор нового компа
        comp:=inttostr(qr1.FieldValues["ID_comp"]);
        //записываем название компа
        name:=qr1.FieldValues["Name_cfg"];
        cfg:=inttostr(qr1.FieldValues["ID_cfg"]);
        while not qr1.Eof do
          begin
             //связываем файловую переменную с именем файла
             AssignFile(F,"date\"+name);
             //открываем файл
             reset(F);
             while not eof(f) do  //проход по файлу конфигурации
                begin
                  readln(F,S);  //считываем строку
                //запись устройств
               if (pos("Device_",s)=1) or (pos("CPU=",s)=1) or (pos("Win_Device",s)=1) then {процедура добавления устройтсва}
              ADDDevice(s);

             end;
            closefile(F);
            qr1.Next;
          end;

      end;
    // продолжение поиска по заданным условиям
    FindRes:=FindNext(SR);
  end;
FindClose(SR); // закрываем поиск

//заносим производителей вызовом процедурой
ADDProizvoditel;


FormCreate(sender);
end;



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2006.06.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.012 c
1-1146306672
petun
2006-04-29 14:31
2006.06.11
не убивается компонент


2-1148235527
Василий Алибабаевич
2006-05-21 22:18
2006.06.11
работа со строкой


1-1146505428
Sysanin
2006-05-01 21:43
2006.06.11
защита от принт скрина


3-1145514966
vishnia
2006-04-20 10:36
2006.06.11
Индексы в Access


2-1148619374
shmel
2006-05-26 08:56
2006.06.11
Связь с приложением





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский