Форум: "Прочее";
Текущий архив: 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