Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.11;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.042 c
15-1147891422
GA
2006-05-17 22:43
2006.06.11
Delphi будет жив или нет ?


15-1147361198
AlexanderMS
2006-05-11 19:26
2006.06.11
Эх, глюки


5-1133435396
S_T_E_P_A_N___
2005-12-01 14:09
2006.06.11
Разработка экспертов


6-1139248031
justy
2006-02-06 20:47
2006.06.11
передать голос по сети


3-1144416948
Petrovski
2006-04-07 17:35
2006.06.11
Как установить CommandTimeout в ADOStoredProc?